Projet à microcontrôleur PIC 16F876A

Horloge et calendrier numérique

 

(merci à Constant VEBOBE pour cette réalisation)

 

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





 

Il s'agit d'une horloge et d'un calendrier 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).

 

 

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

 

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

Si tout se passe bien, une seconde plus tard on a :

Di 01/01/2000

00:00:01

etc ...

 

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 et dernière é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 met ensuite l'affichage du module LCD à jour.

 

 

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