Projet à microcontrôleur PIC 16F628A

Thermomètre numérique à capteur numérique DS1620

 

Il s'agit d'une carte qui se branche sur un ordinateur (via une liaison RS232).

La carte permet la mesure de la température ambiante (avec un capteur numérique DS1620, de la société Dallas Semiconductor).

La température est transférée vers l'ordinateur (un microcontrôleur 16F628A gère les communications côté carte).

1 : MAX233A (interface RS232C <-> TTL/CMOS)

2 : PIC 16F628A (microcontrôleur)

3 : DS1620 (capteur numérique de température)

 

Une application Windows affiche la température en temps réel et fournit un graphe déroulant de la température.

D'autre part, l'application Windows permet de programmer les deux températures de seuil de la fonction thermostat du DS1620.

 

 

3-1- Description

Le capteur de température DS1620 (Dallas Semiconductor) fait parti de la famille des capteurs "intelligents" : sur la même puce, il y a un capteur de température classique associé à une électronique d'interface (convertisseur analogique - numérique, contrôleur avec son jeu d'instructions, EEPROM, port série synchrone 3 fils).

 

Numéro de broche
Nom
Type
Description
1
DQ
Entrée ou sortie
Data Input/Ouput : broche de données du port série
2
CLK
Entrée
Clock input : horloge du port série
3
/RST
Entrée
Reset input : broche Reset du port série
4
GND
Alimentation
Masse (0 V)
5
TCOM
Sortie
High/Low Combination Trigger : fonction thermostat
6
TLOW
Sortie
Low Temperature Trigger : fonction thermostat
7
THIGH
Sortie
High Temperature Trigger : fonction thermostat
8
VDD
Alimentation
Alimentation (2,7 à 5,5 V)

 

Le DS1620 communique avec l'extérieur (généralement avec un microcontrôleur) à travers un port série synchrone 3 fils (broches DQ, CLK et /RST).

Le DS1620 est un thermomètre numérique : plage de mesure - 55,0 °C à + 125,0° C avec une résolution de 0,5°C.

La température est fournie sous la forme d'un nombre de 9 bits en complément à deux. La durée de la conversion est de 750 ms.

 

Le DS1620 peut être utilisé comme thermostat (avec les 3 sorties : THIGH, TLOW et TCOM).

TL et TH sont les deux températures de seuil. Elles sont programmables à travers le port série synchrone 3 fils.

N.B. TL et TH sont stockées dans l'EEPROM interne du DS1620 (mémoire non volatile).

 

3-2- Les instructions

Nous ne verrons que les instructions utilisées dans ce projet.

 

3-2-1- Instructions d'initialisation

A la mise sous tension, on commence par configurer le DS1620 avec l'instruction Write Config (code instruction de 8 bits : 0x0C).

L'instruction Write Config donne accés au registre STATUS (8 bits), situé en mémoire non volatile (EEPROM).

2 bits du registre STATUS nous intéressent :

Chronogrammes :

Le code de l'instruction (0x0C) est suivi des 8 bits du registre STATUS (0x02 pour avoir CPU = 1 et 1SHOT = 0).

Cette instruction est longue (car le registre STATUS se trouve en EEPROM) : 10 ms (max).

 

On lance ensuite le processus de conversion avec l'instruction Start Convert T (code instruction d'un octet : 0xEE).

Chronogrammes :

N.B. Il n'y a pas de données pour cette instruction.

 

3-2-2- Instructions d'usage courant

 

Cette instruction permet la lecture de la température obtenue lors de la dernière conversion.

Pour un suivi en température, il faut exécuter cette instruction de manière régulière.

 

N.B. Le transfert de données change de sens en cours d'instruction :

Au début de l'instruction, DQ est configurée en entrée (pour l'écriture du code instruction), donc le PIC doit être configuré en sortie (broche RB0).

Puis, DQ est configurée en sortie (pour la lecture des données), donc le PIC doit être configuré en entrée (broche RB0).

Comme la broche RB0 du PIC est bidirectionnelle, cela ne pose pas de problèmes.

 

Les chronogrammes sont similaires à ceux de l'instruction Read Temperature.

 

Les chronogrammes sont similaires à ceux de l'instruction Read Temperature.

 

Cette instruction permet de définir la température de seuil haut (fonction thermostat).

Comme pour l'instruction Write Config, cette instruction est longue : elle nécessite jusqu'à 10 ms (car il y a écriture dans l'EEPROM interne du DS1620).

 

Cette instruction permet de définir la température de seuil bas (fonction thermostat).

Les chronogrammes sont similaires à ceux de l'instruction Write TH.

 

Il faut bien sûr un ordinateur qui possède un port COM, reconnaissable par son connecteur SubD 9 broches mâle.

Il faut brancher un câble "null-modem" (câble croisé) entre l'ordinateur et la carte.

Si vous n'en avez pas, vous pouvez facilement en faire un (il faut 3 fils et 2 connecteurs SubD 9 broches femelle).

 

Seul l'ordinateur prend la parole. Le microcontrôleur PIC 16F628A se contente de répondre.

 

L'ordinateur envoie 3 octets (via la liaison RS232) :

Instruction
1er octet (code instruction)
2ème octet (données)
3ème octet (données)
Read Temperature
0xAA
0x00 (non utilisé)
0x00 (non utilisé)
Read TH
0xA1
0x00 (non utilisé)
0x00 (non utilisé)
Read TL
0xA2
0x00 (non utilisé)
0x00 (non utilisé)
Write TH
0x01
(0000000 D8)
(D7 ... D0)
Write TL
0x02
(0000000 D8)
(D7 ... D0)

 

Une fois reçus, le PIC transmet l'instruction vers le DS1620 (via les 3 fils du port série synchrone).

Dans le cas d'une instruction de lecture (Read Temperature, Read TH, Read TL) le thermomètre DS1620 renvoie les données vers le PIC (température sous la forme d'un nombre binaire 9 bits, codé en complément à 2).

Ce nombre est envoyé tel quel vers l'ordinateur sous la forme de 2 octets :

D0 = bit de poids faible

Pour les autres instructions, le PIC envoie deux octets 0x00 à l'ordinateur (via la liaison RS232).

Instruction
1er octet (données)
2ème octet (données)
Read Temperature
(0000000 D8)
(D7 ... D0)
Read TH
(0000000 D8)
(D7 ... D0)
Read TL
(0000000 D8)
(D7 ... D0)
Write TH
0x00 (non utilisé)
0x00 (non utilisé)
Write TL
0x00 (non utilisé)
0x00 (non utilisé)

 

0xAA = code de l'instruction Read Temperature

0x00 0x2D = 0 0010 1101 = 45 = +22,5 °C

10101010 = 0xAA = code de l'instruction Read Temperature

0 00101101 = 0x2D = 45 = +22,5 °C

 

L'ordinateur n'a pas la possibilité de donner l'ordre d'exécuter les instructions d'initialisation du DS1620 (c'est un choix de programmation).

C'est donc le PIC qui s'occupe seul de l'initialisation du DS1620 :

Une fois fait, le PIC se place en position d'attente d'un ordre provenant de l'ordinateur (instructions Read Temperature, Read TH, Read TL, Write TH ou Write TL, avec le protocole défini ci-dessus).

 

 

Avant-propos

Cette application a été écrite en C++ Borland Builder 5.

L'application fonctionne sous Windows NT4 et Windows XP (non testée sous Windows Vista, merci de me dire ce qu'il en est ...).

N.B. La gestion de la liaison RS232 nécessite l'installation du composant TComPort (la version 2.64 est suffisante) :

 

Procédure d'utilisation :

-> Brancher le câble "null-modem" entre l'ordinateur et la carte (hors tension)

-> Mettre la carte sous tension

-> Ouvrir l'application

-> Configurer les paramètres de la liaison RS232C :

-> Ouvrir le port

La température actuelle doit s'afficher (avec une mise à jour toutes les 1000 ms).

 

Il y a la possibilité de sauvegarder les données dans un fichier texte :

Ce fichier peut ensuite être exploité avec Excel, Matlab ...

 

 

Voici deux VI que j'ai écrit avec LabVIEW 5 :

Notez que ces VI fonctionnent également avec la version 6 de LabVIEW.

 

 

 

Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.

(C) Fabrice Sincère ; Révision 01