Projet à microcontrôleur PIC 16F84A / 16F628A

Horloge à quartz

 

 

Il s'agit d'une horloge à quartz parfaitement classique, avec un bouton poussoir qui règle les minutes, et un autre les heures.

 

 

 

Le microcontrôleur PIC utilise une seule source d'interruption (module TMR0 en mode compteur).

Cette interruption est générée toutes les 1/256 seconde exactement (27 =128 périodes du quartz 32,768 kHz).

La routine d'interruption assume la gestion de l'affichage et la gestion des deux boutons poussoir de réglage des heures et minutes.

 

Le module d'affichage 4 digits est de type HDSP-B08G (Agilent), à commande multiplexée.

Le multiplexage permet de commander les 4 digits avec seulement 7 + 4 = 11 fils (autrement, il faut 7 x 4 = 28 fils).

Cela consiste à alimenter un seul digit à la fois : le premier pendant 1/256 s, le second pendant 1/256 s etc ...

En fait, les digits clignotent (à une fréquence de 64 Hz) mais le phénomène est trop rapide pour l'oeil, ce qui donne l'illusion d'un éclairage continu (c'est le même principe utilisé par l'écran d'un téléviseur ...).

Je vous recommande d'observer le phénomène au ralenti en injectant un signal logique d'environ 1 kHz sur la broche RA4/T0CKI (en ayant au préalable débranché la sortie 4 de la porte NAND).

Le décodeur BCD / 7 segments (74LS47) permet de libérer 3 broches au niveau du microcontrôleur.

En définitive, 12 entrées / sorties (sur 13, ce qui justifie la présence du 74LS47) du PIC 16F84A sont utilisées :

La mise en oscillation du quartz 32,768 kHz est délicate : il faut jouer sur les valeurs de R13, R14, C5 et C6 ...

Pour corser le tout, il arrive que l'oscillateur se désynchronise quand on débranche l'oscilloscope ! (C'est comme la radio ou le téléviseur qui se dérègle si on s'en éloigne). Le condensateur C10 devrait résoudre ce problème.

La porte B associée à R15 et C7 réalise une temporisation d'environ 6 secondes : à la mise sous tension, cela laisse le temps à l'oscillateur de 32,768 kHz de se stabiliser.

 

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

 

© Fabrice Sincère ; Révision 1.4.1