Bonjour je suis sur l'étude d'un DS18B20 et j'aimerais lire la température avec un arduino .
D'après le datasheet , le maitre doit mettre le bus a l'état bas pendant quelque micro seconde, ensuite les ou l'esclave doit répondre au maitre en forçant le bus à l'état bas . c'est son qu'on appelle le pulse d'initialisation .
Ensuite le maitre doit envoyé le code ROM pour choisir l'esclave avec qui il veut communiquer , ou si il y a un seul esclave il peut envoyer la commande d'appel général "SKIP ROM" .
Une fois l'esclave sélectionner , le maitre envoie une commande "CONVERT T" pour une conversion de temperature . Le résultat est obtenue dans les 2 octets de la mémoire , et la conversion dure 750ms pour une résolution 12 bits .
Si je prend le code exemple sur le site de Arduino
Pouvez -vous m'éclaircir sur certain points que je n'ai pas très bien compris à propos de ce code .Code:#include <OneWire.h> // DS18S20 Temperature chip i/o OneWire ds(10); // on pin 10 // Cette fonction détermine que le bus est rélié sur la patte 10. void setup(void) { // initialize inputs/outputs // start serial port Serial.begin(9600); // Le sérial monitor est initialisé à 9600 baud/s } void loop(void) { byte i; byte present = 0; byte data[12]; byte addr[8]; ds.reset_search(); // Je sais pas à quoi correspond cette fonction if ( !ds.search(addr)) { // Ce code compare la variable addr initialisé en byte (correspond au code ROM du ds18b20) si il est différent , Serial.print("No more addresses.\n"); le message "no more adresses " est envoyé au Sérial monitor . ds.reset_search(); Par contre je sais pas comment le maitre à pue lire le code ROM de l'esclave . return; } Serial.print("R="); // Ce bout de code envoie au Sérial monitor le code ROM de l'esclave . for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); } if ( OneWire::crc8( addr, 7) != addr[7]) { // Je pense que cette partie permet d'identifier l'octet CRC du code ROM . Serial.print("CRC is not valid!\n"); return; } if ( addr[0] == 0x10) { // Ce bout de code détermine le composant grâce à la 1er octet du code ROM qui correspond Serial.print("Device is a DS18S20 family device.\n"); à la famille du composant . } else if ( addr[0] == 0x28) { Serial.print("Device is a DS18B20 family device.\n"); } else { Serial.print("Device family is not recognized: 0x"); Serial.println(addr[0],HEX); return; } ds.reset(); // correspond au pulse d'initialisation ds.select(addr); //on sélectionne l'esclave grâce à son adresse . ds.write(0x44,1); // start conversion, with parasite power on at the end // le maitre envoie la commande "CONVERT T" delay(1000); // maybe 750ms is enough, maybe not // la convertion dure 750ms // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); // je comprend pas à quoi cette partie . ds.select(addr); // le maitre sélectionne l'esclave ( Encore , on l'avais sélectionnais un peu plus haut) ds.write(0xBE); // Read Scratchpad // le maitre lit les 9 octets de la mémoire . Serial.print("P="); // je comprend pas le débuts de ce bout de code mais je sais qu'il affiche les Serial.print(present,HEX); 9 octets de la mémoire sur le Sérial Print . Serial.print(" "); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); // je comprend pas non plus à quoi correspond ce code Serial.print( OneWire::crc8( data, 8), HEX); Serial.println(); }
merci .
-----