Vous êtes sur la page 1sur 29

Projet à microcontrôleur PIC 16F876A

Horloge, calendrier et thermomètre numérique

 Affichage sur un module LCD alphanumérique


o de la date (format dd jj/mm/aaaa)

o de l'heure (format hh:mm)

o de la température (résolution 0,5 °C)

 Mise en oeuvre du bus I2C


CHAPITRE I :

 1- Présentation
 2- Schéma électrique de la carte
 3- Présentation du DS1307 (Real Time Clock)
 4- Présentation du DS1621 / DS1631 / DS1731
 5- Principe de fonctionnement d'un afficheur LCD alphanumérique
 6- Principe de fonctionnement de la carte

CHAPITRE II :

 7- Le circuit imprimé
 8- Liste du matériel
 9- Code source du microcontrôleur PIC 16F876A
CHAPITRE I

1- Présentation
Il s'agit d'une horloge / calendrier / thermomètre numérique, avec affichage sur un module LCD
alphanumérique.

Deux boutons poussoirs permettent le réglage de l'heure et de la date.

Une pile de sauvegarde (en option) permet de conserver la date et l'heure en cas de coupure de
l'alimentation principale.

La date et l'heure sont ainsi restaurées à la reprise de fonctionnement de l'alimentation principale.

2- Schéma électrique de la carte

N.B. Si vous n'utilisez pas de pile de sauvegarde, il faut relier la broche 3 (VBAT) du DS1307
directement à la mass
 3- Présentation du DS1307 (Real Time Clock)

Le circuit Dallas DS1307 est une horloge temps réel (Real Time Clock), qui fournit secondes,
minutes, heures, jours, dates, mois et années.

Le Dallas DS1307 est associé (entre les broches 1 et 2) à un quartz d'horlogerie de fréquence
nominale 32,768 kHz.

Les années bissextiles sont prises en compte (jusqu'en 2100).

Le DS1307 s'interface avec un bus I2C, en configuration esclave :

 Le DS1307 travaille dans le mode standard (fréquence d'horloge f SCL de 100 kHz)
 L'adresse I2C (7 bits) du DS1307 est : 1 1 0 1 0 0 0

Plus plus d'informations sur l'utilisation du DS1307 avec le bus I2C

En option, on peut brancher une pile de sauvegarde entre la broche 3 et la masse.

Avec une pile au lithium 3 V / 48 mAh, la date et l'heure sont conservées pendant plus de 10 ans en
l'absence de l'alimentation principale (interrupteur SW3 en position OFF).

 4- Présentation du DS1621 / DS1631 / DS1731 (thermomètre


numérique)
Le capteur de température DS1631 (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 : bus I2C).

Le DS1631 est un thermomètre numérique : plage de mesure - 55,0 °C à + 125,0° C avec une
résolution que l'on peut choisir de 9 bits (0,5 °C) à 12 bits (0,0625 °C).

La température est fournie sous la forme d'un nombre binaire en complément à deux.

La durée de la conversion dépend de la résolution : 93,75 ms avec 9 bits, 750 ms avec 12 bits.
Le DS1631 s'interface avec un bus I2C (broches SDA et SCL), en configuration esclave :

 Le DS1631 travaille en Fast mode (fréquence d'horloge f SCL de 400 kHz)


 L'adresse I2C (7 bits) du DS1631 est : 1 0 0 1 A2 A1 A0
o A2, A1 et A0 correspondent aux niveaux logiques appliqués à ces 3 entrées
o On peut donc connecter jusqu'à 8 boîtiers DS1631 sur un bus I2C

La différence entre le DS1631 et le DS1731 se fait uniquement sur la précision de la mesure (à ne


pas confondre avec la résolution !) :

 0,5 °C dans la plage 0 °C à +70 °C pour le DS1631


 1 °C dans la plage -10 °C à +85 °C pour le DS1731

 5- Principe de fonctionnement d'un afficheur LCD


alphanumérique

 6- Principe de fonctionnement de la carte


 LE MONTAGE SUR UN LAB D’ESSAI

6-1- Initialisation

A la mise sous tension, le microcontrôleur 16F876A configure :

 son module MSSP en mode I2C maître, et la fréquence d'horloge (f SCL) à 100
kHz (mode standard du DS1307)
 l'horloge temps réel DS1307 :
o en mode 24 heures (00 à 23 heures)
o avec la fréquence du signal de sortie SQW/OUT (broche 7) à 1,000 000
Hz
 le thermomètre numérique DS1621 / DS1631 / DS1731 :
o commande Access Config :
 résolution 9 bits (0,5 °C)
 conversion en continu
o puis commande Start Convert T :
 lancement de la conversion en continu (avec période
d'échantillonnage de la température de 93,75 ms)
 le module LCD alphanumérique (instruction Set Function pour une utilisation
en mode d'interface 4 bits)

Le module Timer1 (16 bits) du microcontrôleur 16F876A est activé, ce qui donne lieu à une
interruption toutes les 105 ms environ (104,858 ms exactement).

La broche 7 (sortie SQW/OUT) du DS1307 est reliée à l'entrée RB0/INT du PIC 16F876A.

L'interruption RB0/INT est activée, ce qui provoque une interruption toutes les 1000,000 ms.

6-2- Réglage de l'heure et de la date

A la première utilisation, l'affichage à la mise sous tension est :

Di 01/01/2000

00:00 +xxx,x °C

Deux boutons poussoirs ont été prévus pour le réglage de l'heure et de la date.

A chaque interruption du Timer1 (toutes les 105 ms environ), la routine de l'interruption


du Timer1 teste l'état du bouton poussoir SELECTION et du bouton poussoir REGLAGE.

La routine de l'interruption du Timer1 gère également toutes les étapes du réglage de l'heure et de
la date :

On entre dans le mode réglage en appuyant sur le bouton poussoir SELECTION.

Les deux lettres Di se mettent alors à clignoter.

Il faut ensuite appuyer sur le bouton poussoir REGLAGE pour faire défiler le jour (1ère étape) :
Lu -> Ma -> Me -> Je -> Ve -> Sa -> Di ...

On valide en appuyant sur le bouton poussoir SELECTION, et on passe automatiquement au


réglage du chiffre des dizaines du numéro de jour (2ème étape) :

0 -> 1 -> 2 -> 3 -> 0 ...

On finit par le réglage du chiffre des unités des minutes (11 ème étape).

On valide avec le bouton poussoir SELECTION, et on retourne alors au mode de fonctionnement


normal.

6-3- Fonctionnement normal

Toutes les 1000,000 ms la routine de l'interruption RB0/INT est appelée :

Le PIC 16F876A lit l'heure et la date courante dans le DS1307, la communication se fait par le bus
I2C :

Dans cet exemple de chronogramme, il est 9 heures 56 minutes 6 secondes, le mardi 20 mai 2008.

Le PIC 16F876A lit la température dans le DS1621 / DS1631 / DS1731 (commande Read
Temperature), la communication se fait par le bus I2C :
Dans cet exemple de chronogramme, il fait + 28,0 °C :

00011100 0(0000000) = +56 <=> +28,0 °C

Le PIC 16F876A met ensuite l'affichage du module LCD à jour.

 7- Le circuit imprimé (réalisé par Constant VEBOBE)

Télécharger le typon
Télécharger le schéma d'implantation
 9- Liste du matériel

o 1 programmateur pour flasher le programme du microcontrôleur PIC 16F876A

o 1 afficheur LCD alphanumérique 2 x 16 à interface parallèle


o 1 résistance de 39 ohms (rétroéclairage de l'afficheur LCD)
o 1 résistance 8,2 k
o 2 résistance 4,7 k
o 1 résistance 10 k
o 1 potentiomètre 2,2 k (réglage du contraste de l'afficheur)
o 1 horloge temps réel RTC DS1307 (boîtier PDIP)
 Remarque : Vous pouvez demander des échantillons gratuits chez Dallas :-)
o 1 thermomètre numérique DS1621 ou DS1631 ou DS1731 (boîtier PDIP)
 Remarque : Vous pouvez demander des échantillons gratuits chez Dallas :-)
o 1 microcontrôleur PIC 16F876A (boîtier PDIP)
 Remarque : Vous pouvez demander des échantillons gratuits chez Microchip :-
)
o 1 quartz 20 MHz
o 1 quartz 32,768 kHz
o 1 condensateur électrochimique de 100 µF (filtrage)
o 1 condensateur électrochimique de 10 µF (filtrage)
o 6 condensateurs de 100 nF (filtrage)
o 2 condensateurs de 22 pF
o 1 source d'alimentation continue +12 V (ou une pile de 9 V)
o 1 régulateur 7805 (boîtier TO220)
o 2 boutons poussoirs (ouverts au repos)
o 1 interrupteur marche / arrêt
o 1 pile de sauvegarde (3 volts)

 10- Code source du PIC 16F876A


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

Projet à microcontrôleur PIC 16F628A


Thermomètre numérique à capteur numérique
DS1620
 Thermostat programmable
 Suivi de température
 Communication avec un ordinateur (liaison RS232C)

 1- Présentation
 2- Schéma électrique de la carte
 3- Présentation du capteur numérique de température DS1620
 4- Communication entre l'ordinateur et la carte
 5- L'application DS1620_104.exe pour Windows
 6- Applications de communication avec LabVIEW
 7- Liste du matériel
 8- Code source du microcontrôleur PIC 16F628A

 1- Présentation
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.
 2- Schéma électrique de la carte
 3 - Présentation du capteur de température 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 Nom Type Description
broche
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)
High/Low Combination Trigger : fonction
5 TCOM Sortie
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 :

 CPU (bit 1 du registre STATUS) : avec CPU = 1, le port série synchrone est
activé.
 1SHOT (bit 0 du registre STATUS) : avec 1SHOT = 0, le processus de
conversion est ininterrompu (mise à jour de la température toutes les 750 ms).

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

 Instruction Read Temperature (code instruction d'un octet : 0xAA)

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.

 Instruction Read TH (code instruction d'un octet : 0xA1)

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

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

 Instruction Read TL (code instruction d'un octet : 0xA2)


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

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

 Instruction Write TH (code instruction d'un octet : 0x01)

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).

 Instruction Write TL (code instruction d'un octet : 0x02)

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

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


 4- Communication entre l'ordinateur et la carte
 4-1- Le câble

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).

 4-2- Protocole de communication entre l'ordinateur et la carte

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) :

1er octet
2ème octet
Instruction (code 3ème octet (données)
(données)
instruction)
Read
0xAA 0x00 (non utilisé) 0x00 (non utilisé)
Temperature
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 :
 1er octet : (0000000 D8)
 2ème octet : (D7 ... D0)

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é)

 Exemple d'oscillogrammes : instruction Read Temperature


 Communication entre l'ordinateur et le PIC (liaison RS232) :

0xAA = code de l'instruction Read Temperature

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

 Communication entre le PIC et le DS1620 (port série synchrone) :


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

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

 4-3- A propos de l'initialisation du DS1620

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 :

 Instruction Write Config (avec CPU = 1 et 1SHOT = 0)


 Instruction Start Convert T

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).

 5- L'application DS1620_104.exe pour Windows


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) :

 Téléchargement : http://sourceforge.net/projects/comport/
 Procédure d'installation : http://petit.developpez.com/serie/install_tcomport/
 Tutorial : http://petit.developpez.com/serie/cours_tcomport/

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 :

 9600 bauds/s
 8 bits de données
 Pas de bit de parité
 1 bit de STOP
 Pas de contrôle de flux

-> 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 ...

 Télécharger l'application DS1620_104.exe pour Windows 797 ko

 Télécharger le code source de l'application DS1620_104.exe 224 ko

 6- Applications de communication avec LabVIEW

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

 ds1620_011.vi
 ds1620_thermostat_004.vi

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


 Télécharger ds1620_011.vi 223 ko

 Télécharger ds1620_thermostat_004.vi 223 ko

 7- Liste du matériel
o 1 capteur de température numérique DS1620 (Dallas Semiconductor)
 Remarque : Vous pouvez demander des échantillons gratuits chez Dallas :-)
o 1 microcontrôleur PIC 16F628A (boîtier PDIP)
 Remarque : Vous pouvez demander des échantillons gratuits chez Microchip :-
)
o 1 quartz 20 MHz (nécessairement, car il règle le taux de transmission de la liaison
RS232C)
o 1 circuit intégré MAX233A (interface RS232C <-> TTL/CMOS)
 Remarque : Vous pouvez demander des échantillons gratuits chez Maxim :-)
o 1 condensateur électrochimique de 100 µF (filtrage)
o 1 condensateur électrochimique de 10 µF (filtrage)
o 1 condensateur électrochimique de 1 µF (filtrage)
o 5 condensateurs de 100 nF (filtrage)
o 2 condensateurs de 22 pF
o 1 source d'alimentation continue +12 V (ou une pile de 9 V)
o 1 régulateur 7805 (boîtier TO220)
o 1 connecteur SubD 9 broches mâle

 1 câble null-modem (femelle/femelle)


 1 ordinateur avec port COM

 1 programmateur pour flasher le programme du microcontrôleur PIC 16F628A

 8- Code source du PIC 16F628A


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

o Télécharger le code source en assembleur (.asm)


o Télécharger le code objet (.HEX)

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