fonctionnement et programmation d'un ds18b20
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

fonctionnement et programmation d'un ds18b20



  1. #1
    hagi

    fonctionnement et programmation d'un ds18b20


    ------

    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

    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();
    }
    Pouvez -vous m'éclaircir sur certain points que je n'ai pas très bien compris à propos de ce code .
    merci .

    -----

  2. #2
    antek

    Re : fonctionnement et programmation d'un ds18b20

    Toujours mettre le lien de la doc !
    Quels points ?

  3. #3
    hagi

    Re : fonctionnement et programmation d'un ds18b20

    les commentaires que j'ai écrit à coté du programme .

  4. #4
    hagi

    Re : fonctionnement et programmation d'un ds18b20

    Citation Envoyé par hagi Voir le message
    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

    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 conversion 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();
    }
    Pouvez -vous m'éclaircir sur certain points que je n'ai pas très bien compris à propos de ce code .
    merci .
    Personne ?

  5. A voir en vidéo sur Futura
  6. #5
    JPL
    Responsable des forums

    Re : fonctionnement et programmation d'un ds18b20

    Citation Envoyé par hagi Voir le message
    Pouvez -vous m'éclaircir
    Phrase attribuée à Mickael Jackson
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

Discussions similaires

  1. DS18B20 et Pic 18F458
    Par invitedb84cd39 dans le forum Électronique
    Réponses: 9
    Dernier message: 09/08/2012, 17h32
  2. DS18B20 Cubloc
    Par invitee16c22a7 dans le forum Électronique
    Réponses: 10
    Dernier message: 02/02/2011, 18h04
  3. ds18b20 toujours 0°c
    Par sinatra dans le forum Électronique
    Réponses: 7
    Dernier message: 29/01/2010, 10h27
  4. Fonctionnement programmation radio fil pilote
    Par totoche38 dans le forum Bricolage et décoration
    Réponses: 10
    Dernier message: 05/09/2009, 22h54
  5. ds18b20
    Par invite74119562 dans le forum Électronique
    Réponses: 7
    Dernier message: 06/06/2008, 14h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.