Outils pour utilisateurs

Outils du site


start:arduino:esp32:les_timers

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:arduino:esp32:les_timers [2022/04/24 08:54] – [Main loop] gerardadminstart:arduino:esp32:les_timers [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 ======== Les Timers ======== ======== Les Timers ========
  
-Timers sur ESP32+=== Timers === 
 + 
 +Les SoC ESP32 contiennent de 2 à 4 minuteries matérielles. Ce sont tous des temporisateurs génériques 64 bits (54 bits pour ESP32-C3) basés sur des pré-scalers 16 bits et des compteurs croissants/décroissants 64 bits (54 bits pour ESP32-C3) capables d'être rechargés automatiquement. 
 + 
 +^SoC ESP32^Nombre de minuteries^ 
 +|ESP32|4| 
 +|ESP32-S2|4| 
 +|ESP32-C3|2| 
 +|ESP32-S3|4| 
 + 
 + 
 +[[https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/api/timer.html|Arduino-ESP32 Timer API¶]] 
 + 
 + 
 + 
 +===Timers sur ESP32===
  
 Fondamentalement, un Timer (minuterie)  est une horloge, qui est utilisée pour mesurer et contrôler les événements temporels. offrant une temporisation précise.  Fondamentalement, un Timer (minuterie)  est une horloge, qui est utilisée pour mesurer et contrôler les événements temporels. offrant une temporisation précise. 
Ligne 83: Ligne 98:
  
 {{ :start:arduino:esp32:timer_serial.png?direct&400 |}} {{ :start:arduino:esp32:timer_serial.png?direct&400 |}}
 +
 +
 +
 +===== ESP32TimerInterrupt Library ======
 +
 +[[https://github.com/khoih-prog/ESP32TimerInterrupt|ESP32TimerInterrupt Library]]
 +
 +
 +==== Pourquoi avons-nous besoin de cette bibliothèque ESP32TimerInterrupt====
 +
 +
 +===  Caractéristiques===
 +
 +Cette bibliothèque vous permet d'utiliser "Interrupt from Hardware Timers" sur une carte basée sur ESP32.
 +
 +Comme les temporisateurs matériels sont des atouts rares et très précieux de n'importe quelle carte, cette bibliothèque vous permet désormais d'utiliser jusqu'à 16 temporisateurs basés sur ISR, tout en ne consommant qu'un seul temporisateur matériel . L'intervalle des temporisateurs est très long ( ulong millisecs ).
 +
 +Désormais, avec ces nouveaux temporisateurs basés sur 16 ISR , l'intervalle maximal est pratiquement illimité (limité uniquement par de longues millisecondes non signées) tandis que la précision est presque parfaite par rapport aux temporisateurs logiciels.
 +
 +La caractéristique la plus importante est qu'il s'agit de minuteries basées sur ISR. Par conséquent, leurs exécutions ne sont pas bloquées par des fonctions/tâches au mauvais comportement . Cette fonctionnalité importante est absolument nécessaire pour les tâches critiques.
 +
 +L' exemple ISR_Timer_Complex démontrera la précision presque parfaite par rapport aux temporisateurs logiciels en imprimant les millisecondes écoulées réelles de chaque type de temporisateurs.
 +
 +Étant des minuteries basées sur ISR, leurs exécutions ne sont pas bloquées par des fonctions/tâches qui se comportent mal, telles que la connexion aux services WiFi, Internet et Blynk. Vous pouvez également avoir plusieurs (up to 16)minuteries à utiliser.
 +
 +Cette fonctionnalité importante non bloquée est absolument nécessaire pour les tâches critiques.
 +
 +Vous verrez que le logiciel blynkTimer est bloqué pendant que le système se connecte au WiFi / Internet / Blynk, ainsi qu'en bloquant la tâche dans loop(), en utilisant la fonction delay() comme exemple. Le temps écoulé est alors très imprécis
 +Pourquoi l'utilisation d'une interruption de minuterie matérielle basée sur ISR est préférable
 +
 +Imaginez que vous ayez un système avec une fonction critique , mesurant le niveau d'eau et contrôlant la pompe de puisard ou faisant quelque chose de beaucoup plus important. Vous utilisez normalement une minuterie logicielle pour interroger, ou même placer la fonction dans loop(). Mais que se passe-t-il si une autre fonction bloque la boucle() ou la configuration().
 +
 +Ainsi, votre fonction pourrait ne pas être exécutée et le résultat serait désastreux.
 +
 +Vous préféreriez que votre fonction soit appelée, quoi qu'il arrive avec d'autres fonctions (boucle occupée, bogue, etc.).
 +
 +Le bon choix consiste à utiliser une minuterie matérielle avec interruption pour appeler votre fonction.
 +
 +Ces temporisateurs matériels, utilisant l'interruption, fonctionnent toujours même si d'autres fonctions bloquent. De plus, ils sont beaucoup plus précis (certainement en fonction de la précision de la fréquence d'horloge) que les autres temporisateurs logiciels utilisant millis() ou micros(). Cela est nécessaire si vous avez besoin de mesurer certaines données nécessitant une meilleure précision.
 +
 +Les fonctions utilisant des minuteries logicielles normales, reposant sur loop() et appelant millis(), ne fonctionneront pas si loop() ou setup() est bloqué par certaines opérations. Par exemple, certaines fonctions se bloquent lors de la connexion au WiFi ou à certains services.
 +
 +Le hic, c'est que votre fonction fait maintenant partie d'un ISR (Interrupt Service Routine), et doit être courte et  rapide , et suivre certaines règles. Plus à lire sur :
 +
 +
 +[[https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/| HOWTO Attach Interrupt]]
 +
 +
 +===== Minuterie à usage général (GPTimer) =====
 +
 +[[https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/gptimer.html?highlight=timers|Minuterie à usage général (GPTimer)]]
 +
 +
 +===== Minuterie haute résolution =====
 +
 +[[https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/esp_timer.html?highlight=timers|Minuterie haute résolution]]
 +
 +
/home/chanteri/www/fablab37110/data/attic/start/arduino/esp32/les_timers.1650783293.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)