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.
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.
Coeur du montage avec PIC, horloge RTC et affichage LCDInterface 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.
Coeur du montage avec PIC, horloge RTC et affichage LCDInterface 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
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
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 !
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 !
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 !
Prototype Horloge 002b (ter) de Guy L.
Je crois comprendre que Guy à une passion pour le temps qui passe ;-)
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.