Autres articles / Other articles

Horloge temps réel logicielle

publication: 10 juillet 2022 / mis à jour 11 juillet 2022

Read this page in english

 

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