Electronique > Réalisations > Affichage / Mesure > Horloge 002

Dernière mise à jour : 09/07/2017

Présentation

Cette horloge permet l'affichage de l'heure sous deux/trois formes :
- soit en clair sur un écran LCD de 2 x 16 caractères;
- soit sur un écran mural composé de LED disposées en cercle, façon "Gorgy";
- soit les deux.

horloge_002_leds_001a horloge_00b2_leds_001a

Le montage est architecturé autour d'un PIC 18F2420 associé à une horloge temps réelle (RTC), selon une configuration identique à celle adoptée pour mon séquenceur 002. Le nombre de LED allumées pour les heures et pour les minutes dépend du mode d'affichage :
- Mode affichage plein : ruban lumineux, LED allumées entre valeur "0" et valeur en cours. Visuel plus clair mais consommation d'énergie plus élevée.
- Mode affichage ponctuel : point lumineux, seulement LED de la valeur en cours allumée.

Avertissements

Conception terminée et fonctionnement correct en simulation. Je n'ai pas réalisé moi-même cette horloge, mais plusieurs versions fonctionnelles ont été réalisées par Guy L., voir photos de son prototype.

Schéma 002 (version 12h)

Pour une meilleure lisibilité, le schéma a été scindé en deux parties, une première pour le PIC et l'affichage LCD, et une seconde pour l'affichage LED circulaire style analogique.

horloge_002
Coeur du montage avec PIC, horloge RTC et affichage LCD

horloge_002_cmde_leds
Interface série / parallèle pour affichage LED en cercles (12h)

La seconde portion du schéma ne montre pas les LED, ces dernières sont reliées directement sur les sorties des CD4094 au travers d'une résistance de limitation de courant de 680 ohms. Par exemple la LED correspondant à "5 heures" est reliée entre la broche 13 de U3 (fil appelé Hrs05 sur le schéma) et la masse (anode LED vers le CI et cathode à la masse), et la LED correspondant à "37 minutes" est reliée entre la broche 5 de U9 (fil appelé Min37) et la masse (toujours avec anode LED vers CI et cathode à la masse).

Horloge temps réel externe
Un circuit spécifique RTC (Real Time Clock) de type PCF8583 est mis en oeuvre pour la fonction "fourniture données horaires". Ce circuit est constitué d'un oscillateur travaillant sur une base de temps 1 Hz à partir d'un quartz 32,768 kHz et d'une circuiterie interne qui s'appuie sur cette base de temps 1 Hz pour incrémenter de façon "intelligente" les information heure et date, lesquelles sont fournies à la demande via une liaison série deux fils I2C. Les deux boutons poussoirs SW1/Set et SW2/Val permettent respectivement de sélectionner le paramètre à ajuster (date ou heure) et d'en modifier la valeur courante. Au premier démarrage du système, la date et l'heure doivent être mises à jour, cette opération n'ayant plus besoin d'être effectuée par la suite si une pile assure le maintien des informations horaires en cas de coupure secteur. Ce qui est le cas ici.

Horloge PIC ?
Mais dites-moi mon cher ami, est-il vraiment indispensable d'utiliser un circuit RTC externe ? Ne pourrait-on pas se passer du PCF8583 et ajouter un quartz au PIC qui serait quant à lui basé sur des interruptions pour générer la base de temps 1 Hz ? Mais bien sûr qu'il est possible de procéder ainsi ! D'ailleurs c'est un secret et je vous demande de le divulguer le plus largement possible, je travaille sur le code logiciel qui devrait à terme permettre de choisir entre les deux modes de fonctionnement : horloge interne ou horloge externe. Notez bien que sur le schéma actuel les deux broches du PIC dédiées à l'oscillateur quartz sont encore libres...

Affichage LCD
Rien de particulier à dire, j'utilise les routines mises à disposition dans l'outil de développement MikroPascal. Pas de complication particulière puisque le PIC choisi dispose d'un nombre suffisant de lignes d'entrée / sortie et que l'écran LCD y est raccordé de façon directe (pas de multiplexage nécessaire pour économiser le nombre de lignes de commande). L'écran LCD est entièrement facultatif, si vous n'en voulez pas ignorez-le, tout simplement !

Affichage LED
Il existe plusieurs solutions pour allumer les 72 LED qui composent les deux cercles lumineux. Affichage direct de chaque LED, affichage multiplexé ou affichage au travers de registres à décalage. Dans le premier cas il faudrait que le PIC dispose d'un nombre bien plus conséquent de sorties (il en faudrait 72, une par LED), ce n'est pas le cas ici. Pour le multiplexage, pas assez de broches disponibles sur le PIC, même s'il en faut déjà beaucoup moins (il en faudrait 17). Avec des registres à décalage on a plus de lattitude car on peut se contenter de troix broches au niveau du PIC. Mais en contrepartie il faut ajouter des circuits intégrés qui font la transformation série / parallèle (données envoyées en mode série en sortie du PIC, puis transformées en mode parallèle pour piloter individuellement chaque LED). Pour cette fonction de conversion série / parallèle, on peut utiliser des circuits intégrés expandeurs de port PCF8574 ou des registres à décalage de type CD4094. J'ai choisi ces derniers tout simplement car ils sont très simples à mettre en oeuvre et aussi parce qu'ils coûtent moins cher que les PCFxxxx. Dans notre cas il nous faut 9 circuits intégrés CD4094 pour (re)constituer nos 72 lignes de commande, puisqu'un seul CD4094 met à disposition 8 lignes séparées. Bien que je trouve que ce serait dommage, la section affichage LED peut ne pas être implantée si vous vous contentez de l'affichage LCD. Mais de grâce, gardez-en au moins un des deux, que ce doux montage puisse avoir un minimum d'utilité dans son coin. La sortie RB3 du PIC est activée (et peut allumer une LED) quand l'heure en cours est comprise entre 12h00m00s et 23h59m59s (affichage tranche AM ou PM).

Broches curieuses ?
- La broches RB7 du PIC (Debug) ne me sert qu'au moment de la mise au point, ignorez la simplement.
- Les broches de sortie Ext01 à Ext22 des registres à décalage U12 à U14 sont actuellement inutilisées.
 . Si vous n'utilisez pas les deux infos AM et PM de U12, vous pouvez supprimer ce CI.
 . U13 et U14 sont prévus pour des extensions et ne servent à rien dans cette version (U12 et U13 sont utilisés dans la version 002b).

Affichage heures, minutes et secondes ?
On pourrait fort bien constituer un cercle pour chaque type d'infos :
- 12 LED pour les heures;
- 60 LED pour les minutes;
- 60 LED pour les secondes.
Mais entre nous, ça commence à faire... Aussi ai-je décidé d'utiliser le cercle des minutes pour visualiser les secondes, en faisant clignotant la LED des minutes correspondant au nombre de secondes. Par exemple pour l'affichage 17h23'15", les 23 premières LED des minutes restent allumées en permanence, sauf la quinzième LED qui clignote pendant une durée de une seconde, avant que ce ne soit la seizième LED qui se mettent à clignoter à son tour pendant une seconde, etc. Mais si votre envie est de constituer un troisième cercle lumineux dédié aux secondes, rien ne vous en empêche, il suffit d'ajouter 8 circuits CD4094 (le programme doit être modifié en conséquence mais c'est facile et je peux le faire si demande il y a). Pour que le clignotement de la LED des secondes ne soit pas trop désagréable à l'oeil, j'ai opté pour une fréquence de clignotement de l'ordre de 3 Hz. Il aurait également été possible d'utiliser des LED bicolores et d'afficher une couleur pour les minutes et une autre couleur pour la seconde en cours. Mais là encore ça conduisait à ajouter 8 CD4094. Pour le moment donc on s'en tient aux 12 LED pour l'affichage des heures et aux 60 LED pour l'affichage des minutes et secondes.
Remarque : j'ai opté pour des LED 5 mm pour les heures et pour les minutes multiples de cinq (5, 10, 15, 20, etc) et LED 3 mm pour les autres.

Mode affichage LED
- Mode affichage plein : ruban lumineux, LED allumées entre valeur "0" et valeur en cours. A mon avis plus visuel mais plus consommateur d'énergie puisque quand toutes les LEDs sont allumées elles le sont réellement en même temps. Si 5 mA dans chaque LED, courant max absorbé = 360 mA. Si 1 mA dans chaque LED, courant max absorbé = 72 mA.
- Mode affichage ponctuel : point lumineux, seulement LED de la valeur en cours allumée. Dans ce mode la consommation reste toujours la même, il n'y a à chaque instant que deux LED allumées en même temps. Mais perso je trouve que la lecture de l'heure est moins aisée dans ce mode, on a moins l'indication du temps déjà écoulé.
Remarque : rien n'empêche de découper des chiffres dans le support, avec les LED juste derrière. Quand une LED s'allume, le chiffre apparait en lumineux, ce qui à priori conviendrait mieux pour le mode d'affichage ponctuel.

Choix des LED
Pour avoir vu plusieurs horloges de ce type dans des studios radio ou régies TV, je peux dire qu'il y en a que je trouve très agréables à voir et d'autres que je n'aime pas du tout. Certains modèles utilisent des LED bleues très lumineuses qui éblouissent quand on regarde l'horloge en face et qu'on ne voit que de façon irrégulière quand on regarde de côté. Cela est lié à l'angle d'ouverture des LED utilisées, qui a mon humble avis ne devrait pas être trop étroit. Il me semble que l'idéal est d'utiliser des LED présentant une luminosité de quelques centaines de mcd à leur courant nominal (souvent de 20 mA) et de les faire fonctionner sous un courant de 1 ou 2 mA.

Schéma 002b (version 24h)

Cette fois, 24 LED pour représenter les heures. Pas beaucoup de différences par rapport au schéma initial, juste quelques lignes décalées en sorties des registres à décalage.

horloge_002b
Coeur du montage avec PIC, horloge RTC et affichage LCD

horloge_002b_cmde_leds
Interface série / parallèle pour affichage LED en cercles (24h)

Bien entendu, le logiciel du PIC a du subir quelques modifications pour prendre en compte les 12 nouvelles LED des heures...

Simulation

J'ai eu recours à la simulation dans Proteus, la mise au point s'en est trouvée grandement facilitée et bien plus rapide. Pour le rendu général, je me suis dessiné à la louche deux cercles de LED tels qu'ils seront réalisés en vrai plus tard.

Version LED 12 heures

horloge_002_simul_leds_001a

Comme on peut le constater, cette copie d'écran est faite avec configuration "Mode affichage plein", plusieurs LED sont allumées en même temps aussi bien pour les heures que pour les minutes.

Version LED 24 heures

horloge_002b_simul_leds_001a

Extension NTP ?

Mise à jour automatique de l'heure via protocole horaire internet (Network Time Protocol) ? Pour l'instant je ne sais pas faire, mais oui, un peu plus tard, pourquoi pas... 

Logiciel du PIC

Les fichiers de code source (MikroPascal V3.80 Pro) et binaire compilé (*.hex) sont disponibles dans l'archive suivante.
Horloge 002 - PIC 18F2420 - 09/07/2017
Fichiers *002*.* pour horloge version "12 heures"
Fichiers *002b*.* pour horloge version "24 heures"
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Prototype

Aucun réalisé par mes soins, mais une version fonctionnelle de Guy L. que je remercie pour ces retours.

Prototype Horloge 002 de Guy L.
Belle réalisation, et très originale, bravo !

horloge_002_proto_gl_001c horloge_002_proto_gl_001b horloge_002_proto_gl_001a

Guy m'a fait remarquer que la sauvegarde de l'heure et de la date n'était pas assurée lors des coupures secteur. En réalité elle l'est mais la version précédente de mon soft envoyait systématiquement une heure fixe et une date fixe à chaque réinitialisation du PIC. Ce point est corrigé dans la version du 07/08/2016.

Prototype Horloge 002b de Guy L.
Encore un bel exemple de réalisation originale... peu de personnes doivent possèder ce genre d'horloge dans leur salon !

horloge_002b_proto_gl_001c

horloge_002b_proto_gl_001a  horloge_002b_proto_gl_001b

Bravo Guy, et encore merci pour les retours et photos !

Prototype Horloge 002 (bis) de Guy L.
Et une de plus ! Encore une fois, très belle réalisation !

horloge_002b_proto_gl_002a horloge_002b_proto_gl_002b_tn horloge_002b_proto_gl_002c horloge_002b_proto_gl_002d

Prototype Horloge 002b (ter) de Guy L.
Je crois comprendre que Guy à une passion pour le temps qui passe ;-)

horloge_002b_proto_gl_003a horloge_002b_proto_gl_003b

Commentaire de Guy : Bonjour Rémy, cette horloge est vraiment très stable ! Ce serait drôlement bien si tu pouvais ajouter un mode d'auto-incrémentation pour les réglages...
Ajouté le 09/07/2017 ;-)

Circuit imprimé

Non réalisé pa mes soins.

Historique

09/07/2017
- Ajout mode d'auto-incrémentation des valeurs lors de l'étape de réglage.
10/06/2017
- Ajout photos réalisation Horloge 002b (bis et ter) de Guy L., que je remercie une fois de plus pour ses retours.
15/01/2017
- Ajout photos réalisation Horloge 002b de Guy L., que je remercie une fois encore pour ses retours.
08/01/2017
- Ajout d'une version "24 heures" pour la section d'affichage LED (schéma 002b).
- Ajout d'une sortie "LED" pour signaler la tranche 12h/24h (LED allumée quand l'heure est comprise entre 12h00m00s et 23h59m59s).
- Ajout cavalier mode d'affichage oublié sur le schéma 002 (version 12 heures).
14/08/2016
- Correction bug mineur affichage date lors du démarrage, format "xx:xx:20xx" au lieu du format "xx/xx/20xx".
07/08/2016
- Correction bug réinit systématique date et heure à chaque démarrage du PIC, annulant l'effet de la sauvegarde par batterie.
- Ajout photos réalisation de Guy L. que je remercie pour ses retours.
05/02/2012
- Amélioration de la partie RTC avec PCF8583 (suppression d'un condensateur) et schéma complété. Bien que fonctionnel, le schéma précédent ne faisait pas paraître le câblage de l'accu de sauvegarde de l'heure.