Projet à microcontrôleur PIC 16F876A

Horloge, calendrier et thermomètre numérique

 

 

Vidéo réalisée par Marc Paradis :
http://www.youtube.com/watch?v=3bMHjwgXglo



 

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.

 

 

 

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

 

 

 

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 :

 

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

 

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 :

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

 

 

7-1- Initialisation

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

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.

 

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

 

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




Télécharger le typon
Télécharger le schéma d'implantation


photo : Constant VEBOBE


photo : Constant VEBOBE


photo : Constant VEBOBE


photo : Constant VEBOBE


photo : Constant VEBOBE


photo : Constant VEBOBE


 

 

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 1.2.10