Bonjour à tous,
Ca fait un moment que je voulais transmettre le fruit mon dur labeur ! Alors je vais donc vous parler de cette bestiole :
Datasheet :
http://docs-europe.origin.electrocomponents.com/webdocs/05ad/0900766b805ad384.pdf
Alors il y avait déja des choses ici :
Mais je n'ai jamais réussi à faire marcher ce qui était expliqué ...
Comme expliqué dans le titre, il s'agit d'un convertisseur analogique/numérique 24 bits (entre nous, 24 bits c'est un petit peu abusé, mais la précision est quand même nettement supérieure à ce qu'offre l'arduino en standard).
Pour les débutants ou ceux qui sont assez peu familiers de ces histoire de bits (sans mauvais jeu de mots), 24 bits cela signifie que la puce va être capable de dicerner 2^24 paliers de tension. A comparer avec les 10 bits de l'arduino si on veut traduire cela encore plus concretement, si la tension de référence est de 5V, cela nous donne une sensibilité de 0,3 µV (attention comme dit précedement, on tape dans du très sensible la, le moindre parasite a un impact énorme), alors que sur l'arduino on est à 5 mV. Donc cette petite puce permet assez simplement d'améliorer grandement la sensibilité d'une arduino.
Hardware
Bon comme j'ai appris l'électronique un peu sur le tas, si il y a des experts qui veulent rajouter des choses ils sont les bienvenues !!
Si vous regardez la datasheet, elle est très bien fichue, il y a plein de schémas. Moi j'ai réduit le montage au plus simple, donc au niveau connectique cela donne :
1 : 5V
2 : 5V
3 : tension à mesurer. Important : mettait une résistance de 5K entre le point de mesure et la patte, sinon ça fait n'importe quoi dans les basses tensions.
4 : GND
5 : à relier soit au 5V soit au GND, je n'ai pas pris le temps de tester l'influence sur la qualité de la mesure, la seule chose qui apparait dans la datasheet c'est que relié au GND elle va plus vite. Donc pour ma part, GND
6 : a relier à un pin digital de l'arduino.
7 : a relier à un pin digital de l'arduino.
8 : GND
Après il faut bien penser à mettre des condos pour stabiliser les tensions un peu partout
Software
Pour le software, si vous voulez tout comprendre il faut regarder les pages 10 à 12 de la datasheet : en fait je génère les cycles d'horloge sur le port digital relié au SCK, et les données sortent sur le SDO. Comme l'acquisition ici est beaucoup plus lente que sur l'arduino (100-200 ms), le programme "guette" l'état du SDO qui passe à l'état bas une fois que la conversion est terminée, et lance les cycles d'horloge pour récupérer les données.
#define SDO 50 //SDO
#define SCK 52 //SCK
int Buffer[31];
boolean State;
float Mesure;
float Vref = 5;
void setup()
{
Serial.begin(9600);
pinMode(SDO,INPUT);
pinMode(SCK,OUTPUT);
digitalWrite(SCK,LOW);
}
void loop() {
delay(20);
State1=digitalRead(SDO);
if (State==LOW){ //test si la conversion est terminée
for(int x=0;x<=31;x++) {
Buffer[x]='\o'; //mise à zero de la variable
}
for (int i=31;i>=0;i--){
if (State==HIGH){
Buffer [i]=1 ;
} else {
Buffer [i]=0;
}
digitalWrite(SCK,HIGH); //cycle horloge
digitalWrite(SCK,LOW);
State=digitalRead(SDO);
}
digitalWrite(SCK,HIGH); //cycle d'horloge pour relancer conversion
digitalWrite(SCK,LOW);
Mesure=0;
for (int x=27;x>=4;x--) {
Mesure=Mesure+Buffer[x]*pow(2,x-4); //conversion binaire ==> décimal
}
if (Buffer[28]==1 || Buffer [29]==0) Mesure=0; //si la mesure est <0 ou au-dessus de Vref
Mesure=Mesure*Vref*1000000;
Mesure=Mesure/16777215;
Serial.println(Mesure);
}
}
Pensez bien sûr à adapter les numéros de pin aux votres