Bonjour à tous,
Aller c'est parti, 2ème tuto, cette fois je fais l'inverse de la dernière fois, à savoir comment passer du digital à l'analogique
Digital à analogique, Késako ??
Vous connaissez surement le PWM, mais le PWM n'est pas réellement une tension continue. La bestiole que je vous propose, elle, fournit une réelle tension continue :
http://radiospares-fr.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&R=0402756
Datasheet :
http://docs-europe.origin.electrocomponents.com/webdocs/0a88/0900766b80a88143.pdf
Les applications sont divers, celà permet dans beaucoup de cas d'obtenir un "potentiomètre" controlé par l'arduino.
Hardware
Rien de bien compliqué :
1 : +5V
2, 3, 4 : à relier à 3 pins digital de l'arduino.
5 : au GND pour la plupart des applications.
6 : c'est la tension de référence (la tension maxi qu'on retrouvera en sortie. Sur ce convertisseur c'est au maximum la tension d'alimentation, donc la plupart du temps on la mettre au +5V.
7 : GND.
8 : la sortie !
Software
J'ai concocté un ptit programme qui permet d'envoyer par port série une valeur de 0 à 100 (comme 0-100% ), 0 donnant 0V et 100 donnant 5V. Le dialoque avec l'engin est assez simple, il suffit de lui envoyer un mot de 16 bits, les 5 premiers étant des bits de configuration (cf. datasheet pour savoir à quoi ils correspondent), les 11 autres, la valeurs souhaitée.
Comme d'habitude pensez à adapter les numéros de pins aux votres
int CS=44;
int SCK=46;
int SDI=48;
char buffer[3];
void setup(){
Serial.begin(9600);
pinMode(CS,OUTPUT);
pinMode(SDI,OUTPUT);
pinMode(SCK,OUTPUT);
digitalWrite(SCK,LOW);
digitalWrite(SDI,LOW);
digitalWrite(CS,LOW);
}
void loop(){
if (Serial.available()) {
for (int z=0;z<4;z++) buffer[z]='\0'; // on efface le buffer série
int x=0;
delay(20);
while (Serial.available()) { // réception des données série
buffer[x++] = Serial.read();
}
int temp = strtol(buffer,NULL,10); // on passe le tableau en int
constrain(temp,0,100); // on vérifie qu'on est bien entre 0 et 100%
temp= map (temp,0,100,0,4095); // on convertit à l'échelle du convertisseur (12 bits)
int command[]={0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // le mot à envoyer, les 5 premiers bits étant la partie "configuration"
for(int y=15;y>3;y--){ // on fait passer la valeur temp en binaire et on l'écrit dans le mot
command[y]=temp & 1;
temp = temp >> 1;
}
digitalWrite(CS,LOW); // c'est parti on envoi le mot !!
for (int z=0;z<16;z++){
if (command[z]==0) {
digitalWrite(SDI,LOW);
} else {
digitalWrite(SDI,HIGH);
}
delay(1);
digitalWrite (SCK,HIGH);
delay(1);
digitalWrite(SCK,LOW);
delay(1);
}
digitalWrite(SDI,LOW);
digitalWrite(CS,HIGH);
}
}
Joyeux arduinage à tous !