Mesure température avec le circuit DS18B20
DS18B20 : Présentation
Ce circuit de chez "Maxim" est disponible pour un prix très bas et offre de bonnes caractéristiques dans un boitier TO92 avec trois pattes.
On peut récupérer le datasheet de ce circuit sur le net par ex ICI
Certaine figures sont extraites de ce datasheet et sont la propriété de la société Maxim.
Ces principales caractéristiques sont :
- interface 1 wire,
- plage de fonctionnement : -55°C à +125°C,
- résolution programmable de 9 à 12 bits soit de 0.5°C à 0.0625°C,
- alarmes programmables
- mémoire EEPROM et mémoire SRAM (Scratchpad)
Chaque circuit est identifiable par un code de 64 bits ce qui permet de mettre plusieurs circuits sur le même bus.
Ce code est :
Les différents registres des mémoires SRAM et EEPROM sont :
Les bytes 0 et 1 du "Scratchpad" représente les valeurs basse et haute de la température mesurée.
Les bits notés "S" indiquent à 0 une température positive et à 1 une température négative, donc le test de ces bits permet de différencier une température positive et négative.
Dans le cas d'une température négative il est nécessaire d'effectuer :
pour une température de - 26,0625 °C :
MS_temp = 11111110 et LS_temp = 01101111
~MS_temp = 00000001 et ~LS_temp + 1 = 10010001
la variable 16 bits obtenues est : valtemp = 0000000110010001 soit 191 en hex ou 401 en décimal et en divisant par 16 nous obtenons la valeur de 26,0625.
Voir page 4 du datasheet pour d'autres exemples.
Pour le mode 12 bits tous les bits sont significatifs, mode 11 bits le bit 0 n'est pas significatif, mode 10 bits les bits 0 et 1 ne sont pas significatifs et dans le mode 9 bits les bits 0 à 2 ne sont pas significatifs.
La fonction Read_ds18b20() lit les valeurs contenu dans le "Scratchpad", après un reset les valeurs sont lues de l'adresse 0 à l'adresse 8.
La fonction Ecr_ds18b20 (unsigned char data) écrit dans le "Scratchpad" la valeur de data, après un reset les valeurs sont écrites de l'adresse 2 à l'adresse 4.
Pour gérer le circuit il existe deux types de commandes :
Les bits notés "S" indiquent à 0 une température positive et à 1 une température négative, donc le test de ces bits permet de différencier une température positive et négative.
Dans le cas d'une température négative il est nécessaire d'effectuer :
- une inversion de chaque bit du MS byte (NON ou NOT) en utilisant l'opérateur ~
- une inversion de chaque bit du LS byte (NON ou NOT) en utilisant l'opérateur ~ et d'ajouter 1
pour une température de - 26,0625 °C :
MS_temp = 11111110 et LS_temp = 01101111
~MS_temp = 00000001 et ~LS_temp + 1 = 10010001
la variable 16 bits obtenues est : valtemp = 0000000110010001 soit 191 en hex ou 401 en décimal et en divisant par 16 nous obtenons la valeur de 26,0625.
Voir page 4 du datasheet pour d'autres exemples.
Pour le mode 12 bits tous les bits sont significatifs, mode 11 bits le bit 0 n'est pas significatif, mode 10 bits les bits 0 et 1 ne sont pas significatifs et dans le mode 9 bits les bits 0 à 2 ne sont pas significatifs.
MPLAB X et XC8 : Les fonctions en C
Pour utiliser ce circuit nous serons amenés à écrire trois fonctions :
- Reset_ds18b20 : nécessaire avant chaque communication
- Read_ds18b20 : lit le contenu de la SRAM
- Ecr_ds18b20 : écrit une valeur.
Le microcontrôleur impose un niveau zéro pendant 480µS puis relâche le bus et attend 70µS avant de lire le niveau présent sur le bus :
- si niveau VDD il n'y a pas de circuit sur le bus
- si niveau 0V le circuit DS18B20 est présent
La fonction Read_ds18b20() lit les valeurs contenu dans le "Scratchpad", après un reset les valeurs sont lues de l'adresse 0 à l'adresse 8.
Pour cela le microcontrôleur impose un niveau zéro pendant 6µS puis attend 9µS avant de lire le niveau 0 ou 1 sur le bus, cette opération est effectuée 8 fois.
La fonction Ecr_ds18b20 (unsigned char data) écrit dans le "Scratchpad" la valeur de data, après un reset les valeurs sont écrites de l'adresse 2 à l'adresse 4.
Pour cela le microcontrôleur impose un niveau zéro pendant un temps de 60µS pour écrire un 0 ou pendant un temps de 6µS pour un niveau 1.
Diagramme des temps :
DS18B20 : Commandes
Pour gérer le circuit il existe deux types de commandes :
- "Rom commands" pour la recherche, la lecture, ...... des circuits présents sur le bus.
- "Function commands" pour déclencher la conversion, pour la lecture ou l'écriture dans le "Scratchpad" ou pour modifier le mode de fonctionnement.
- 44 : déclenche la conversion,
- BE : pour lire le "Scratchpad",
- 4E : pour écrire dans le "Scratchpad",
- 48 : pour copier le "Scratchpad" dans la mémoire EEPROM,
- B8 : pour copier la mémoire EEPROM dans le "Scratchpad".
- Test présence circuit : "Reset_ds18b20", test si 1 = présent si 0 = absent,
- Lecture rom 64 bits : "Reset_ds18b20", commande 0x33, lecture 8 octets de la Rom,
- Déclenchement et lecture température : "Reset_ds18b20",commande 0xCC, commande 0x44, attente fin conversion, "Reset_ds18b20", commande 0xCC, commande 0xBE, lecture poids faible, lecture poids fort.
- Écriture dans le "Scratchpad" : "Reset_ds18b20", commande 0xCC, commande 0x4E, écriture des trois byte (TH, TL et configuration),
- Copie du "Scratchpad" dans l'EEPROM : "Reset_ds18b20", commande 0xCC, commande 0x48,
- Copie de l'EEPROM dans le "Scratchpad": "Reset_ds18b20", commande 0xCC, commande 0xB8,
- Lecture du "Scratchpad" : "Reset_ds18b20", commande 0xCC, commande 0xBE, lecture des neuf byte.
Aucun commentaire:
Enregistrer un commentaire