Vous êtes sur la page 1sur 25

Mini projet

Thème :
Horloge, calendrier et thermomètre numérique
 Affichage sur un module LCD alphanumérique
 de la date (format dd jj/mm/aaaa)
 de l'heure (format hh:mm)
 de la température (résolution 0,5 °C)
 Mise en oeuvre du bus I2C

Présenté par :
BOUFAID LYES
BOUMRAH MORAD
BOUCHEWAREB MADJIDE

1
SOMAIRE

 Introduction générale

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
 4- Principe de fonctionnement d'un afficheur LCD
alphanumérique
 6- Principe de fonctionnement de la carte

CHAPITRE II :

 1- Le circuit imprimé
 2- Liste du matériel
 3- Code source du microcontrôleur PIC 16F876A
 4-Conclusion
 5-Annexe

2
Introduction Générale :

Le développement des applications à base des microcontrôleurs PIC est devenu de plus enplus
courant, ceci est dû à plusieurs causes : beaucoup de ressources internes (périphériques intégrés), mémoires
embarquées de plus en plus grande, vitesse de calcul accrue…
En effet, un microcontrôleur est un composant parfaitement adapté à des applications embarquées, il permet, en
le programmant, d’effectuer et de contrôler une tâche tout en comparant son état à des conditions préfixées par
l’utilisateur.

L’utilisation des microcontrôleurs fait appel tout d’abord à


leur programmation. Il existe plusieurs méthodes de programmation selon le langage utilisé, par exemple en
assembleur on peut écrire un programme où on va tirer le maximum des performances du microcontrôleur mais
ce programme nécessite beaucoup de travail et surtout beaucoup de temps. Heureusement, avec la montée en
puissance des microcontrôleurs, on voit apparaitre des compilateurs en langage C qui permettent de gagner un
temps considérable pour le développement des programmes. Dans ce travail notre choix est porté vers le PIC
16F876A. Dans le premier chapitre nous allons étudier d’une manière générale ce microcontrôleur et
ses différentes ressources internes, ensuite un deuxième chapitre destiné à la programmation de ce
microcontrôleur en langage assembleur en utilisant le compilateur MPLAB.
.
 La température constitue une information importante dans plusieurs processus industriels et
delaboratoire. Elle intervient comme une grandeur principale dont la valeur doit être connue avec
précision ou comme paramètre
 influant sur la qualité d’autres mesures.
 Sa valeur sera utilisée pour la correction ou la compensation. Certains procèdes industriels ou
biologiques favorisent des environnements de températures spécifiques, ainsi la régulation de
température s’impose. Cette régulation passe par la mesure de température de manière continue. Les
possibilités offertes par l’utilisation de système à base de microprocesseur ont permis de traiter les
signaux issus des capteurs numériquement (linéarisation et conversion). Ceci à conduit à des appareils
précis et bon marché. Les systèmes à base de microcontrôleurs constituent la solution la plus attractive.
 Dans ce travail nous avons fait la conception d’un thermomètre et d’un calendrier à base de PIC
16F876A de Microchip. Notre horloge, calendrier et thermomètre numérique utilise un capteur intégré
DS1620 pour la mesure de température et DS1307 pour la date et l’heure. Les calculs sont confiés au
microcontrôleur et l’affichage sur un écran alphanumérique 2*16.

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

4
N.B. Si vous n'utilisez pas de pile de sauvegarde, il faut relier la broche 3 (VBAT) du DS1307 directement à la
masse.

 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

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

5
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

 6- Principe de fonctionnement d'un afficheur LCD alphanumérique :


Ci-dessous, un exemple d'afficheur LCD alphanumérique 16 x 2 (2 lignes de 16 caractères) :

 6-1- Le connecteur :

Le connecteur possède 16 broches :

6
 6-2 Alimentation du module LCD :

R = 10 k

P = 2,2 k

R' = quelques dizaines d'ohms

Le potentiomètre P règle la tension d'alimentation (V0) du panneau LCD : on agit ainsi sur le contraste.

R' règle le courant du système de rétroéclairage (de l'ordre de 100 mA). Consulter la documentation du
constructeur pour déterminer sa valeur exacte.

7
 6-3- Interface 4 bits :

Si vous êtes limité par le nombre de broches disponibles de votre microcontrôleur, vous pouvez utiliser
l'interface 4 bits.

Cela fait gagner 4 broches et seules 7 broches sont nécessaires à la commande du module LCD.

Vu du côté du microcontrôleur, cela donne :

3 sorties (reliées aux 3 entrées RS, R/W et E du module LCD)

4 broches (reliées aux 4 bits du bus de données DB7~DB4) :

 configurées en sortie en mode écriture (R/W = 0)


 configurées en entrée en mode lecture (R/W = 1)

L'interface 4 bits est plus lente que l'interface 8 bits.

En effet, le transfert des 8 bits de données se fait en 2 fois. On commence par transmettre les 4 bits de poids
forts (DB7~DB4) puis les 4 bits de poids faibles (DB3~DB0).

8
Remarque : On peut gagner une broche en reliant R/W à la masse (R/W = 0 : mode écriture).

Le drapeau BUSY n'est donc plus accessible.

On contourne l'obstacle avec une temporisation suffisamment longue, à l'issue de laquelle on pourra
transmettre une nouvelle instruction.

 6-4- Protocole de communication en mode écriture (R/W = 0) dans le cas d'une interface 4 bits :

Le microcontrôleur commence par établir RS et R/W (R/W = 0), puis les 4 bits DB7-DB4.

Les niveaux de RS et R/W sont pris en compte par le module LCD sur le front montant de E.

Les niveaux des 4 bits DB7-DB4 sont pris en compte par le module LCD sur le front descendant de E.

Le microcontrôleur établit ensuite les 4 bits de poids faibles DB3-DB0, qui sont pris en compte par le
module LCD sur le deuxième front descendant de E.

9
 6-5- Protocole de communication en mode lecture (R/W = 1) dans le cas d'une interface 4 bits :

Le microcontrôleur commence par établir RS et R/W (R/W = 1).

Les niveaux de RS et R/W sont pris en compte par le module LCD sur le front montant de E.

Le module LCD fournit alors les 4 bits DB7-DB4 (au plus tard 120 ns après le front montant de E).

Le module LCD fournit ensuite les 4 bits de poids faibles DB3-DB0, après le deuxième front montant de E.

N.B. Au niveau du module LCD, les 4 broches DB7-DB4 sont configurées en sortie (mode lecture oblige).
Au niveau du microcontrôleur, cela veut dire configuration en entrées.

Il faut donc un microcontrôleur avec 4 broches individuellement configurables :

 en sortie en mode écriture (dans le module LCD), transfert d'information du microcontrôleur vers le
module LCD
 en entrée en mode lecture (du module LCD), transfert d'information du module LCD vers le
microcontrôleur

10
 6-6- Exemple de chronogramme complet dans le cas d'une interface 4 bits :

Le chronogramme qui suit est valable pour les instructions où RS = 0 et R/W = 0 (Display Clear, Return
Home, Entry Mode Set ...).

Au départ, nous sommes en mode écriture (R/W = 0).

On passe ensuite en mode lecture (R/W = 1) : le microcontrôleur peut alors lire le drapeau BF (Busy flag)
pour savoir si l'instruction est terminée.

11
 6-7- Quelques fabriquants de module LCD :

o Batron
o Everbouquet
o Powertip
o Varitronix

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

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

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

14
Chapitre 2 :

 1- Le circuit imprimé :

le typon et le schéma d'implantation

15
16
17
 2- 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)

 3- Code source du PIC 16F876A :

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

19
Conclusion :

Conclusion Générale :

L’élaboration de ce modeste travail nous a permis de comprendre un peu le fonctionnement


du microcontrôleur PIC 16F876A à travers une étude théorique de ces différentes ressources internes,
ensuite de s’initier à sa programmation en langage assembleur, pour cela nous avons utilisé le compilateur
MPLAB et comme nous l’avons vu il est d’une grande simplicité. Cela nous a permis aussi d’élaborer une
application pour mettre en œuvre toutes les notions théoriques.
A la fin nous espérons avoir apporté une contribution au domaine des microcontrôleurs PIC et à leur utilisation
dans le domaine pratique.
Le DS1620 utilisé pour la mesure de température, et DS1307 pour la date et l’heure.

Ce travail nous a permet aussi d’apprendre le logiciel ISIS pour la simulation.

Nous espérons avoir apporté une contribution au domaine de la programmation du PIC 16F876A

ANNEXES :

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

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

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

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

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

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

25