Un horloge avec un PIC16F84 et un PCF8573, partie I
Introduction
En démontant un vieux magnétoscope hors service, cadeau d'une amie qui connaît bien mes intérêts, j'ai commencé à rechercher sur Internet les fiches techniques des circuits intégrés qui y étaient présents. Parmi les autres, j'en ai trouvé un que j'ai considéré particulièrement intéressant et il s'agit du PCF8573, de chez Philips (maintenant NXP). Il s'agit d'un système complet capable de fournir l'heure et la date actuelle, contrôlé par une communication par bus I2C (voir Le bus série I2C avec un PIC pour plus d'informations sur ce protocole). La chose la plus intéressante était que ce circuit intégré avait besoin de fort peu de composants annexes pour fonctionner correctement. C'était donc une bonne occasion pour réaliser un horloge un peu différent.
Juste un détail : ici j'utilise un circuit PCF8573 et un PIC 16F84, mais le pic est contrôlé avec un oscillateur à quartz et peut être programmé pour fonctionner comme horloge sans avoir besoin du PCF8573 (je laisse la modification aux lecteurs intéressés). Les caractéristiques du PCF8573 permettent d'utiliser comme tampon une petite pile rechargeable de 1,2 V, qui est suffisante pour plusieurs semaines.
Dans ce projet, il y a deux points que je considère particulièrement intéressants :
- la réalisation d'une communication sur bus I2C
- la gestion en multiplexage de 8 afficheurs à diodes électroluminescents à 7 segments.
Pour ce qui concerne le premier point, une description approfondie est présentée dans cette page. Le deuxième point constitue un défi intéressant, pour faire en sorte d'utiliser seulement 6 lignes I/O du microcontrôleur pour piloter 8 afficheurs.
Dans la deuxième partie de ce projet, je vais décrire la réalisation d'une couronne de 60 diodes électroluminescentes adaptées à représenter les secondes.
Description du circuit
Le circuit électrique est plutôt simple 4 circuits intégrés, quelques résistances et des transistors NPN et les afficheurs sont suffisants. Nous allons commencer notre description par la partie la plus intéressante, c'est à dire celle composée par le microcontrôleur PIC 16F84, le CD4511 et le CD4017. Dans la technique de multiplexage, on utilise le phénomène de persistance rétinienne pour optimiser le nombre de lignes I/O nécessaires pour contrôler les afficheurs. Le principe est simple : seul un afficheur est allumé à la fois et tous les afficheurs sont activés en séquence pour donner l'impression qu'ils sont allumés tous ensemble.
Si la fréquence est suffisante (50 Hz c'est assez), l'illusion fonctionne très bien. Le CD4017 est un compteur décimal de type Johnson. À chaque impulsion qu'il reçoit sur la broche 14 (CK), il s'occupe de transférer un niveau logique haut sur les broches de sortie selon la séquence suivante : 3, 2, 4, 7, 10, 1, 5, 6, 9, 11 pour ensuite recommencer à nouveau par la broche 3. Dans ce circuit, ce compteur s'occupe d'activer en séquence un afficheur à la fois, grâce aux transistors qui sont reliés aux cathodes des afficheurs. Une impulsion sur la broche 15 (remise à zéro) du CD4017 permet de faire recommencer le comptage.
Le circuit intégré CD4511 s'occupe par contre de réaliser la fonction de piloter les afficheurs avec un code BCD, c'est è dire s'occuper de décider quels segments allumer pour représenter le code binaire qui est représenté dans les entrées 2, 7, 6 et 1. Dans notre cas, il a la fonction de diminuer le nombre de broches d'entrée/sortie qui sont nécessaires au PIC pour réaliser cette fonction.
En gros, ce qui se passe est que juste après la remise à zéro du CD4017, le premier afficheur sera actif et montrera le code présent sur les lignes de contrôle du CD4511 jusqu'à quand le CD4017 recevra une impulsion qui activera le deuxième afficheur. Le processus se répétant pour tous les afficheurs, le microcontrôleur s'occupant de faire en sorte que le CD4511 reçoive toujours le bon code pour le bon afficheur. Si l'on répète cette séquence à une vitesse suffisante, tous les afficheurs apparaîtront allumés au même temps.
Comme la luminosité des afficheurs est quelque peu réduite par le fait qu'ils ne sont pas tout le temps allumés, il faut choisir des afficheurs à cathode commune à haute luminosité, tels que les TFK644, qui sont construits exprès pour cette fonction.
Les sorties du CD4017 qui sont utilisées pour activer les afficheurs à travers les transistors peuvent aussi être utilement exploitées pour gérer des boutons poussoir (P1 et P2 dans notre cas), en utilisant seulement une entrée du microcontrôleur. Exactement comme il y a seulement un afficheur activé à chaque moment, le microcontrôleur contrôlera l'état d'un bouton à la fois. Avec seulement six sorties et une entrée, notre microcontrôleur peut afficher de cette façon une donnée sur 10 afficheurs au max et peut contrôler l'état de 10 boutons ou interrupteurs : pas mal, en utilisant seulement des dispositifs très communs !
Pendant que le CD4017 et le CD4511 s'occupent des afficheurs et des boutons, le circuit intégré PCF8573 constitue le vrai coeur du circuit. Il s'agit d'un horloge tout à fait complet, capable de tenir compte aussi de la date et est entièrement contrôlé par bus I2C. Ce système permet de mettre en communication plusieurs dispositifs en utilisant seulement deux lignes plus la masse. Le microcontrôleur s'occupe de lire périodiquement la date et l'heure à travers le bus et l'afficher, permettant à l'opérateur de la modifier avec les boutons pendant les réglages.
Les composants qui entourent le PCF8573 sont seulement le quartz miniature de 32768 Hz qui est utilisé pour fournir la base des temps pour le comptage, un compensateur pour régler avec précision le cadencement si l'horloge avance trop vite ou retarde, une pile NiCd utilisée comme tampon. Un transistor NPN BC547 est utilisé pour faire clignoter un ou deux diodes électroluminescentes une fois par seconde, à monter entre les minutes et les heures. La résistance de 10 kΩ s'occupe de maintenir toujours légèrement sous charge la batterie lorsque la tension secteur est présente.
Une dernière note sur la programmation du PIC : en haut on trouve un connecteur denominé ICSP. Cet acronyme (qui veut dire In Circuit Serial Programming) permet de mettre à disposition toutes les lignes nécessaires pour la programmation du microcontrôleur. Cette opération permet donc de programmer ce dernier sans devoir le sortir du circuit, opération qui est très genante lors de la phase de conception du code.
Le logiciel pour le PIC16F84
Le code qui est exécuté par le microcontrôleur se divise en général en deux parties assez differentes. La première s'occupe de la communication avec le circuit PCF8573 avec le bus I2C, grâce aux fonctions décrites dans cette page. La deuxième est gérée par des interruptions et s'occupe de la gestion des afficheurs en multiplexage. A l'intérieur du PIC16F84 il y a un compteur qui peut être synchronisée avec l'horloge, de façon à lancer une interruption à des intervalles précis. Lorsque l'unité de contrôle reçoit une interruption, elle arrête temporairement l'execution du code courant et saute à une fonction (le gestionnaire d'interruption), qui s'occupe de mettre à jour les afficheurs de façon cyclique. L'execution normale reprend ensuite du point où l'interruption a eu lieu.
Dans le code, une location de mémoire (un file dans le jargon PIC) est associée à chaque afficheur et est utilisée pour représenter le contenu utilisé par les routines d'affichage. Le logiciel, lors de la lecture des données depuis le PCF8573, s'occupe de maintenir à jour ces valeurs.
Télécharger le fichier source asm
L'alimentation
License:
--------
Copyright (C) 2004 Davide Bucci davbucciPleasenospamherE@tiscali.it
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.