![]() |
![]() |
![]() |
|
Mise à l'heure des horloges RTC |
|
Maj : 18/08/19
|
Nous sommes entourés d’horloges dans la vie, et dans l’environnement Arduino, il existe de multiples.
Quand on s’amuse à en mettre quelques-unes, différentes ou non, sur le même automate en les calant initialement simultanément sur la même heure et que l’on relève les écarts dans le temps sur des courbes, on s’aperçoit qu’elles vivent leur vie et partent dans tous les sens (bien évidemment, chaque chip est strictement dans le même environnement à la même température pour le test).
La question est alors « quelle est celle qui donne la bonne heure ? »
La réponse est aucune, mais avec quelques précautions on peut arriver à gérer un parc de manière à peu près cohérente avec une heure relativement identique pour chaque automate.
Il faut toutefois garder son calme, si l’on ne gère que quelques automates pour enregistrer divers paramètres (par exemple météorologiques en domotique), la précision de l’horloge n’est pas très importante, car les événements sont lents et ne sont enregistrés que toutes les quelques minutes, il n’y a pas vraiment de problème de synchronisation.
Pour mettre à l’heure une horloge temps réel, nous disposons de bien des manières ! |
![]() |
Quelques moyens de mise à l’heure
La liste n’est pas exhaustive, ce ne sont que les techniques les plus courantes.
Mise à l’heure en dur dans la compilation
Chaque fois que l’on appui sur <RESET> sur une carte Arduino ou sur <EN> avec un ESP32, la ligne en tout début de programme s’exécute.
// Exemple avec bibliothèque : www . jarzebski. pl
rtc.setDateTime (2019, 07, 10, 20, 53, 0) ; // Set the date to YYYY, MM, DD, HH, MM, SS
Il faut corriger la ligne, recompiler et recharger si l’on a trop d’écart (Correction précise par la méthode du <Top>).
Une fois satisfait par l’heure lue, il faut commenter la ligne et recompiler et recharger.
C’est une méthode lourde, peu pratique si l’on a beaucoup d’automates à régler.
Mise à l’heure automatique très approximative par l’heure du PC au moment de la compilation
rtc.setDateTime(__DATE__, __TIME__); // Set sketch compiling time
Idem, commenter, recompiler…
Cette méthode a un défaut, l’heure indiquée par la suite a environ systématiquement 13 secondes de retard sur la pendule du PC, car _TIME_ est calculé en début du processus de compilation bien avant le transfert du programme puis le Reset.
Méthode pitoyable pour corriger : Avant la compilation, avancer l’heure du PC de 13 s, puis rétablir après transfert (j’ai honte…).
Suivant les équipements dont dispose l’automate, tout est possible !
Mise à l’heure par le port série
En faisant reconnaître une commande comportant tous les paramètres de temps ou individuellement pour ajuster un registre pour peu que l’horloge soit déjà lancée.
Mise à l’heure par le GPS
Via la chaîne texte en NMEA183, mais c'est long en série.
Mise à l’heure par un serveur de temps en WiFi + Ethernet
Le très bon exemple « simple time » du ESP32 montre comment se connecter à un serveur de temps.
Mise à l’heure par balise Bluetooth depuis une application smartphone
L’heure du smartphone est maintenue précisément par le réseau, mais le dialogue est délicat à gérer pour maîtriser les temps de réponses, peu utilisé.
Mise à l’heure par un module récepteur DCF77
Il y a beaucoup de documentation sur le sujet de l’émetteur Allemand <DCF77> (proche de Francfort) et son décodage est très intéressant pour débuter en Arduino.
Des petits modules avec barreau de ferrite sortent directement les trames à exploiter.
C’est le système utilisé dans les montres et les pendules de table à une dizaine d’Euros.
Mise à l’heure manuelle par tops radio en décamétrique ou sur France Inter en FM
Méthode très ancienne, bien avant l’Internet, mais toujours efficace bien que soumise aux aléas de la propagation.
Du temps de la navigation au sextant, les tops décamétriques nous permettaient d’aligner la pendule du bord pour les calculs astronomiques dans toutes les mers du monde.
Cela reste parfaitement exploitable.
Etc..
Les méthodes de synchronisation par modules de réception Aurel en 432 MHz ou par infra-rouge ont posé trop de problèmes pour être validées.
Je n’ai pas trouvé mieux simplement.
Il faut avoir prévu sur chaque carte un poussoir qui active une ligne d’interruption dédié au recalage horaire.
Un premier appui arme un timer qui autorise pendant 30 secondes l’interprétation d’un deuxième appui pour réaligner le temps.
Il ne faut pas se recaler sur la seconde zéro, cela complique inutilement le programme s’il faut avancer, passer par exemple de la seconde 59 à la seconde zéro suivante, implique de gérer les minutes, heures, jour, mois, an, ce qui est pénible.
Le top sera pris sur la seconde <30>, en effet, il n’y aura que les secondes à gérer, on lit l’heure actuelle, on remplace les secondes par 30 et on écrit la nouvelle chaîne, puis on relit plusieurs fois en boucle la RTC en affichant l’heure avec un bip aux 10 secondes entières pour vérifier.
On recommence jusqu’au résultat parfait.
Avec un peu d’entraînement, le calage se fait à mieux que le dixième de seconde.
Connection physique
Si plusieurs automates sont proches, il est tentant de relier ensembles toutes les lignes d’interruptions, mais attention aux effets d’antenne !
Il faut blinder le fil et découpler avec des filtres pour éviter de ramasser tous les parasites secteur qui provoqueront des déclenchements intempestifs à chaque manœuvre d’un interrupteur dans la maison. Cela ne marche évidemment pas pour les automates isolés.
J’ai fini par renoncer à cette méthode trop incertaine avec une liaison permanente.
Jouer au maître du temps n’est pas simple quand on doit gérer un nombre important d’automates.
Il faut se choisir une référence de temps fiable et s’y tenir pour harmoniser son parc de RTC.
Toutes les références sont calées à l’identique avec une précision extraordinaire sur des horloges atomiques, mais suivant la méthode utilisée, l’heure récupérée ne sera pas exactement la même en fonction des retards que nous amènerons dans l’exploitation du signal.
Il faut donc aussi bien fixer une méthode commune pour tous, cela peut demander une petite correction négative du résultat qui sera constante pour tous.
Plus ou recherchera une grande précision et homogénéité des valeurs, plus les problèmes seront délicats à régler.
La connaissance du temps a préoccupé les savants depuis l’antiquité, à terre, le cadran solaire était très précis, mais les cierges gradués, les sabliers et clepsydres étaient bien trop imprécis pour connaître l’heure en mer, indispensable pour calculer sa position.
Les remarquables horloges de marine ont apporté un début de solution, puis le quartz et les formidables horloges atomiques ont maintenant parfaitement résolu ce problème majeur.