Dernière mise à jour :
08/03/2026
Présentation
Non, cette horloge n'a pas de chiffre. Et non, malgré son grand cercle
de 60 points lumineux, ce n'est pas une Gorgy...
Je
dois reconnaître que ce projet est le fruit d'une pensée rapide,
incongrue, inattendue et sans doute un poil surnaturelle, en tout cas
peu adapté à l'apprentissage de l'heure aux jeunes enfants.
Contrairement
à la célèbre Gorgy qui équipe nombre de studios d'enregistrement,
hopitaux, gares ou
écoles (mais pas que), on ne
trouve pas dans mon horloge 005 les 12 LED marquant les heures
associées aux 60 LED indiquant les minutes. Bizarre non ? Alors comment
indiquer les heures ? Tout simplement par un changement de couleur et
de luminosité des
LED ! Le petit plus ? L'utilisateur peut choisir
l'apparence générale : mode point (
point),
mode ruban (
bar)
ou mode plein (
full),
avec ou sans marquage des
12 divisions horaires et avec ou sans marquage des secondes. Choix
également de la manière dont apparaîssent les points
lumineux
pour les secondes, les minutes et les
heures... Envie d'en savoir plus ?
Avertissement
Ce projet a fait l'objet d'un dépôt de paternité auprès de Copyright
France.
Principe de fonctionnement
Avant
de foncer tête baissée sur le schéma, essayons de "visualiser" la
manière dont fonctionne cette horloge. Chacune des soixante LED peut
prendre
plusieurs couleurs (mais une seule à la fois s'il vous plaît, c'est
déjà assez compliqué comme ça) :
- couleur #1 (cl_H) : LED des heures (une ou
plusieurs LED, selon mode d'affichage choisi)
- couleur #2 (cl_M) : LED des
minutes (une ou plusieurs LED, selon mode d'affichage choisi)
- couleur #3 (cl_S) : LED des
secondes (une seule LED)
- couleur #4 (cl_HM) : LED
coincidence heures / minutes (une ou plusieurs LED, selon mode
d'affichage choisi) - Nota
1
- couleur #5 (cl_HS) : LED coincidence heures /
secondes (une seule LED)
- couleur #6 (cl_MS) : LED coincidence minutes / secondes
(une seule LED)
- couleur #7 (cl_MK) : LED marqueur d'heure (12 LED)
- couleur #8 (cl_BG) : LED "inactives" (couleur de
fond)
Nota 1
: la durée de coincidence heures/minutes étant longue (1 minute) la LED
qui affiche en même temps l'heure et les minutes peut (au choix de
l'utilisateur) rester fixe avec une couleur particulière,
ou clignoter alternativement entre "couleur heures" et
"couleur
minutes".
Quatre modes d'affichage sont possibles :
- Mode
Point (Point)
: 3 LED au maximum peuvent être allumées à un
instant donné : une
pour les heures, une pour les minutes et une pour les secondes (je suis
sûr qu'avant de lire ce dernier mot, vous l'aviez déjà deviné)
- Mode
Ruban 1 (Bar
1) : le nombre de LED allumées simultanément
dépend de l'heure
et des minutes en cours. Affichage ruban pour les minutes et
affichage point pour les heures.
- Mode Ruban 2
(Bar 2) :
le nombre de LED allumées simultanément
dépend de l'heure
et des minutes en cours. Affichage ruban pour les minutes et
affichage ruban pour les heures.
- Mode
Ruban plein
(Full) :
les 60 LED sont toujours allumées, les moins représentatives étant
moins lumineuses. Ce mode permet de faciliter la lecture de nuit
(repérage plus aisé par référence aux 12 quartiers de minutes).
Pour
un affichage en mode "nuit", il est possible de désactiver le mouvement
des secondes. Le mode nuit peut être activé manuellement avec
un
interrupteur ou de manière automatique avec une LDR (résistance dont la
valeur ohmique dépend de la luminosité qui la frappe).
Schéma
Le circuit est piloté par un
"petit" PIC 8 bits de type 18F26K22, bon rapport qualité/prix et même
un poil luxueux dans cette application. Mais je l'aime bien ce circuit,
et puis il faut bien utiliser mon stock... de 1 pièce.
Choix des LED
J'ai
fait le choix d'utiliser 60 LED programmables WS2812 au détriment
de LED tricolores. Pour ces dernières, il
m'aurait fallu
ajouter de nombreux registres à décalage ou expandeurs
de ports. Gérer 180 sorties individuelles (avec tous les
fils que cela impliquait) me fatiguait d'avance ! Avec les LED
programmables, 3 fils suffisent entre le circuit de commande et le
panneau de LED. Enfin... 4 fils en fait, car j'ai rencontré quelques
problèmes pour piloter la chaîne de 60 LED intelligentes en une seule
passe
et j'ai du me résoudre à piloter de manière séparée 2 groupes de 30
LED. Cela est d'autant plus étrange que le fabricant des WS2812 précise
dans son document technique (
datasheet)
qu'on peut chaîner jusqu'à 512 voire 1024 LED et que je pense avoir
respecté les délais du protocole (vérifications faite à l'oscilloscope
numérique). Serais-je tombé sur une mauvaise
série de LED ? Qu'importe, le surplus de travail que m'a
imposé la
gestion d'une seconde sortie de commande était supportable (pour
preuve, je suis encore en mesure de vous écrire).
Transmission des données aux LED WS2812
Les
LED "intelligentes" WS2812 ne requièrent qu'un seul fil pour la
transmission des données. En l'absence d'un fil supplémentaire pour la
synchronisation des données, il n'existe qu'une seule possibilité pour
permettre de
faire la distinction entre bits 0 et 1 : jouer sur la durée des niveaux
logiques haut (1) et bas (0). Avec cette LED WS2812, la distinction se
fait ainsi :
-
bit "0"
: durée niveau haut entre 0,20 us (200 ns) et 0,50 us (500 ns),
durée niveau bas entre 0,65 ms (650 ns) et 0,95 ms (950 ns)
-
bit "1"
: durée niveau haut entre 0,55 us (550 ns) et 0,85 us (850 ns),
durée niveau bas entre 0,45 ms (450 ns) et 0,75 ms (750 ns)
En prenant les valeurs extrêmes, nous avons une durée totale
pour un bit :
durée minimale bit "0" = 0,20 us (200 ns) + 0,65 ms (650 ns) =
0,85 ms (850 ns)
durée maximale bit "0" = 0,50 us (500 ns) + 0,95 ms (950 ns) = 1,45 ms
(1450 ns)
durée minimale bit "1" = 0,55 us (550 ns) + 0,45 ms (450 ns) = 1,00 ms
(1000 ns)
durée maximale bit "1" = 0,85 us (850 ns) + 0,75 ms
(750 ns) = 1,60 ms (1600 ns)
Le
bon sens impose d'utiliser une durée médiane entre valeurs minimum et
maximum spécifiées par le fabricant, j'ai pour cette raison adopté les
valeurs suivantes :
-
T0H
= première partie du bit "0" à l'état haut : durée
0,35 us (±150 ns,
soit 200 ns min et 500 ns max) - valeur effective
0,375 us /
375 ns
-
T0L
= seconde partie du bit "0" à l'état bas : durée
0,80 us (±150 ns,
soit 650 ns min et 950 ns max) - valeur effective
0,812 us /
812 ns
-
T0 =
durée totale du bit "0" = 0,35 us (350 ns) + 0,80 us (800 ns) =
1,15 us (1150
ns)
-
T1H =
première partie du bit "1" à l'état haut : durée
0,70 us (±150 ns,
soit 550 ns min et 850 ns max) - valeur effective
0,688 us /
688 ns
-
T1L
= seconde partie du bit "1" à l'état bas : durée
0,60 us (±150 ns,
soit 450 ns min et 750 ns max) - valeur effective
0,562 us /
562 ns
-
T1 =
durée totale du bit "1" = 0,70 us (700 ns) + 0,60 us (600 ns) =
1,30 us (1300 ns)
Remarque
: les valeurs effectives sont celles pouvant être obtenues dans la
pratique. Pour une fréquence d'horloge Fosc de 64 MHz (période
d'horloge Tosc de 15,625 ns). Le temps minimal d'une
instruction
(nop) est en effet de 62,5 ns (Tosc * 4) et pour cette raison, il est
impossible d'obtenir une précision temporelle inférieure à 62 ns.
Sur mon prototype, le
temps requis pour transmettre les données aux 60 LED (soit 60
* 24 bits) est de 1,7 ms. L'opération
de mise à jour complète des 60 LED étant effectuée toutes les secondes
et nécessitant moins de 2 ms, le temps restant pour
gérer sans stress les autres tâches confiées au
microcontrôleur (environ 998 ms) est très amplement suffisant.
Sauvegarde de l'heure en cas d'absence secteur
Le circuit consommant une intensité de courant trop élevée
(principalement à cause des LED intelligentes) on peut
difficilement envisager une alimentation par pile, raison pour
laquelle une alimentation secteur a été prévue. Le problème
est celui qu'on connait bien avec tous les radio-réveils de base sans
pile de sauvegarde (ou pile présente, mais usée) : quand le secteur
disparaît, l'heure en cours disparaît aussi et on doit la régler à
nouveau quand le secteur revient.
Pour contrer ce problème et éviter une reconfiguration
manuelle, il existe plusieurs solutions :
- sauvegarder l'heure dans une horloge temps réel (RTC =
Real Time Clock)
externe ou interne au PIC
- récupérer l'heure par Internet (protocole NTP,
Network Time Protocol)
Ici, la première solution a été retenue, avec une horloge RTC
externe de type PCF8583 avec alimentation de sauvegarde individuelle
(pile bouton CR2032). Cette option résulte du choix du PIC
18F, qui ne possède pas de module RTC interne ni assez de ressources
mémoire pour y intégrer une couche réseau. Une version avec couche
réseau et NTP pourrait apparaître dans un futur proche (horloge 005b ?).
Réglages / configuration
Cette horloge offre de multiples réglages, comme indiqué
ci-après :
- réglage initial de l'heure - c'est la moindre des choses !
- mode d'affichage : point, ruban ou plein
- affichage ou non des marqueurs (toutes les 5 minutes)
- affichage ou non du mouvement des secondes
- choix des couleurs pour chaque mode d'affichage (3 x 9 couleurs)
- activation/désactivation du mode Nuit
Pour
choisir un paramètre à modifier, presser le bouton SetNext ou SetPrev
autant de fois que nécessaire jusqu'à l'affichage du paramètre en
question. Presser ensuite la touche Up ou la touche Down pour modifier
la valeur du paramère sélectionné. Après modification de la valeur d'un
paramètre, sa sauvegarde est automatique si on presse le bouton
SetNext. Pour annuler une modification et rappeler la précédente
valeur, presser le bouton SetPrev.
Réglage date / heure (Date / Time)
La date n'est affichée que sur l'écran LCD, qui reste optionnel.
Réglage du mode d'affichage
Réglage des couleurs de LED
Ajustable individuellement pour chaque mode d'affichage. Les copies
d'écran qui suivent se réfèrent au mode d'affichage "Point".
h = heures ; m = minutes ; s = secondes ; hm = heures/minutes
coincidentes ; hs = heures/secondes coincidentes ;
ms = minutes/secondes coincidentes ; bg = inactivité ; mk =
marqueur
En
cas de coincidence heures/minutes (par exemple 01h05, 03h15 ou
encore 07h35), la couleur de la LED concernée peut être d'une couleur
différente ou alterner entre couleur heures et couleur minutes. Si la
couleur choisie est le noir (RVB = 000-000-000), alors le mode
alternance est automatiquement activé pendant toute la durée de la
minute en cours. Si la couleur choisie est différente du noir (RVB
<> 000-000-000) alors l'affichage se fait avec la couleur
sélectionnée pendant toute la durée de la minute en cours.
D'une
manière générale, la couleur de la LED coincidence heures /
secondes sera la même que celle adoptée pour les
secondes. Il
en sera de même pour la couleur de la LED coincidence minutes /
secondes. Le fait de pouvoir choisir une couleur différente durant une
seconde est une forme de luxe qu'on peut se permettre. Par les temps
qui courent, cela peut faire du bien.
Ecran LCD : visible ou caché ?
Dans
la mesure où l'écran LCD permet la configuration de l'horloge, on
imagine mal pouvoir s'en passer. Mais cet écran peut très bien
être caché et ne servir à rien d'autre qu'à la configuration générale.
En d'autres termes, à vous de décider si cet écran doit ou non être
placé au centre des 60 LED.
Prototype
En cours de réalisation, avec utilisation de 4 quarts de cercles
équipés de LED WS2812.
Les
quatre quarts de cercles disposent de points de connexion à
l'arrière, entrée des données d'un côté et sortie des données de
l'autre :
Circuit imprimé
Pas encore réalisé.
Logiciel du PIC
Pro - Version complète non
disponible en libre service.
Free - Une version allégée
(LE) sera prochainement mise à disposition en libre service.
Historique
08/03/2026
- Première mise à disposition