MCP4922 arduino et signal clock


bonjour
pour un ami qui veut retrofiter souplement et simplement  des équipements commandés en 0/10v
je suis parti sur mes fonds de tiroirs , j'ai des mcp4922 à la pelle et c'est toujours suivi
pour l'amplification 0-->5 vers 0--->10 je sais (encore) faire  :smiley-mr-green:

n'ayant pas voulu réinventer la "poudre" , je suis parti à la recherche et je suis tombé
là dessus

http://stevewoodward.posterous.com/using-a-mcp4922-dac-with-an-arduino-to-contro

et sur ça
http://mrbook.org/downloads/arduinosx150/sx150driverarduino.pde

au moins pour test :
pas de lib et du facilement "tripotable"  8)


ça fonctionne bien , qq test de vitesse/récurrence  à faire avec le code derivé en bas de page
mais par curiosité et tres humblement, je ne vois pas où dans ce code simple la clock (transition) spi est gérée ?
ça doit etre parfaitement trivial, mais si un des petits genies du code veulent bien m'eclairer, j'accepte toutes lumieres  8)
j'imagine du bitwise , mais je ne vois pas où ?

pour info : j'ai testé pour levée de doute en déconnectant pin13 = "çamarchpu"  :d

code: [select]
#define dataout 11//mosi
//#define datain 12//miso - not used, part of builtin spi
#define spiclock  13//sck
#define slaveselect 10//ss

void setup()
{
  byte clr;
  pinmode(dataout, output);
// pinmode(datain, input);
  pinmode(spiclock,output);
  pinmode(slaveselect,output);
  digitalwrite(slaveselect,high); //disable device
 
  spcr = (1<<spe)|(1<<mstr);
  clr=spsr;
  clr=spdr;
  //delay(10);


}

void write_value(uint16_t sample)
{
  uint8_t dacspi0 = 0;
  uint8_t dacspi1 = 0;
  dacspi0 = (sample >> 8) & 0x00ff;
  dacspi0 |= 0x10;
  dacspi1 = sample & 0x00ff;
  digitalwrite(slaveselect,low);
  spdr = dacspi0;                    // start transmission
  while (!(spsr & (1<<spif)))     // wait end of transmission
  {
  };
 
  spdr = dacspi1;
  while (!(spsr & (1<<spif)))     // wait end of transmission
  {
  }; 
  digitalwrite(slaveselect,high);
  //delay(5);
}

void playnote(int incomingbyte)
{
  int diff = 0;
 
 
  //---------
  (diff=0; diff <= 4095; diff++){
   // write_value (405) ; // 0 --->4095 12 bits  405=1.00v 
   write_value (diff) ; // 0 --->4095 12 bits  405=1.00v 
      //delay(1); run ok avec voltmetre ana et num , signal à tester à l'oscillo
      delaymicroseconds(200); //run ok mais met les voltmetres ana et digital dans les choux, pas etonnant = oscillo faire
   }


}
//void noteoff()
//{
//  write_value(0);
//}
int incomingbyte = 0;

void loop()
{
 
         playnote(incomingbyte);
   
}




bonjour,

la clock spi sur la pin 13 est active à partir du moment où le spi control register le bit mstr à 1, c'est à dire là :

code: [select]
spcr = (1<<spe)|(1<<mstr);



Arduino Forum > International > Français (Moderators: jfs, Snootlab) > MCP4922 arduino et signal clock


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial