Horloge temps réel logicielle
publication: 10 juillet 2022 / mis à jour 11 juillet 2022
Appel à collaboration
Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.
Partagez-les ici sur ce site.
ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.
Vos montages peuvent aider d'autres développeurs.
Les montages des autres développeurs peuvent vous aider.
Pour proposer un article ou un montage, cliquez ici
Le mot MS-TICKS
Le mot MS-TICKS
est utilisé dans la définition du mot ms
:
DEFINED? ms-ticks [IF]
: ms ( n -- )
ms-ticks >r
begin
pause ms-ticks r@ - over
>= until
rdrop drop
;
[THEN]
Ce mot MS-TICKS
est au coeur de nos investigations. Si on met en route la carte ESP32,
son exécution restitue le nombre de millisecondes écoulées depuis la mise en route
de la carte ESP32. Cette valeur croit toujours. La valeur de saturation de ce
comptage est de 232-1, soit 4294967295 millisecondes, soit 49 jours environ...
A chaque redémarrage de la carte ESP32, cette valeur redémarre à zéro.
Gestion d'une horloge logicielle
A partir des données HH MM SS (Heures, minutes, secondes), il est aisé de reconstituer
une valeur entière, en millisecondes, correspondant au temps écolué depuis 00:00:00.
Si à ce temps on soustrait la valeur de MS-TICKS
, on a une valeur horaire
de départ pour déterminer l'hure réelle. On initialise donc un compteur de base currentTime
à partir du mot RTC.set-time
:
0 value currentTime
\ store current time
: RTC.set-time { hh mm ss -- }
hh 3600 *
mm 60 *
ss + + 1000 *
MS-TICKS - to currentTime
;
Exemple d'initialisation: 22 52 00 RTC.set-time
initise la base de temps pour 22:52:00...
Pour bien initiliser, préparez les trois valeurs HH MM SS suivies du mot RTC.set-time
,
surveillez votre montre. Quand l'heure attendue arrive, exécuter la séquence d'initialisation.
L'opération inverse récupère les valeurs HH MM et SS de l'heure courante, ceci grâce à ce mot:
\ fetch current time in seconds : RTC.get-time ( -- hh mm ss ) currentTime MS-TICKS + 1000 / 3600 /mod swap 60 /mod swap ;
Enfin, on définit le mot RTC.display-time
qui vous permet d'afficher l'heure courante
après initialisation de notre horloge logicielle:
\ used for SS and MM part of time display : :## ( n -- n' ) # 6 base ! # decimal [char] : hold ; \ display current time : RTC.display-time ( -- ) currentTime MS-TICKS + 1000 / <# :## :## 24 MOD #S #> type ;
L'étape suivante serait de se connecter à un serveur de temps, avec le protocole NTP, pour initialiser automatiquement notre horloge logicielle. Mais ça, ce sera pour une autre fois...
Legal: site web personnel sans commerce / personal site without seling