Un superviseur de fonctionnement ou timer est un compteur de temps indépendant de votre microsystème et permettant de vérifier le bon fonctionnement du système. C’est souvent un compteur cadencé par l’horloge interne du microsystème.
Ce compteur a pour but de réinitialiser le microsystème lorsqu’il bug, notamment lorsque le programme est dans une boucle infinie par exemple.
Le timer fonctionne donc séparément de votre programme, et une fois qu’il sera arrivé au chiffre maximum qu’il peut compter, il va déborder et donc réinitialiser le système.
Un timer peut avoir différente valeurs : [0;255] si 8 bits, [0; 65535] si 16 bits, et [0; 2^32 -1] si 32 bits. Ces valeurs vont nous servir pour calculer la valeur maximum de notre timer.
Enfin, on peut calculer la valeur pour laquelle le timer va déborder en multipliant la fréquence d’horloge du microsystème par un prescaler.
Prennons l’exemple d’un microsystème ayant une fréquence d’horloge de 1 mhz et possèdant des timers de 8 bits et de 16 bits.
On va voir comment calculer la valeur de débordement de ces deux timers si le prescaler est de 1:1 et de 2:1.
Pour le prescaler 1:1, avec une fréquence d’horloge de 1 mhz ça fait un temps de :
Pour le prescaler 2:1, avec une fréquence d’horloge de 1 mhz ça fait un temps de :
Maintenant que l’on sait comment calculer la valeur d’un timer, on va vous en présenter quelques un et voir leurs utilités.
Le watch dog est un timer qui fait en sorte que le microsystème ne plante pas. Concrètement, cela signifie que lorsque ce timer déborde, le microsystème redémarre.
Le timer fonctionne indépendamment du système, pour ne pas que le microsystème se réinitialise indéfiniment il faut que dans le programme on remette à 0 le watch dog avant qu’il déborde afin de ne pas brusquement arrêter le microsystème.
Néanmoins si le programme est bloqué dans une boucle, comme lors d’un bug alors le timer va continuer de s’incrémenter et donc va déborder et réinitialiser le système.
Ce timer est donc indépendant du processeur du microsystème et fonctionne avec sa propre horloge.
Si le timer déborde, il peut se passer différente action selon si le microsystème est en mode running ou sleep :
Ce timer permet de détecter les chutes d’alimentations du microsystème. En effet, si le microsystème est relié à un composant nécessitant beaucoup d’énergie comme un moteur, le démarrage de celui peut entraîner une chute de tension et endommager le microsystème.
Pour éviter cela, le but de ce timer est de réinitialiser le microsystème si le seuil bas de tension est atteint.
Ce timer est assez proche du brown out reset car il permet aussi de détecter une baisse d’alimentation du microsystème dû à un démarrage d’une charge comme un moteur pour reprendre le même exemple.
Néanmoins, la différence avec le brown out reset c’est que sans le seuil de tension bas est atteint, le low voltage detect va interrompre le microsystème plutôt que le faire redémarrer. Ceci permet de le protéger tout en ne perdant pas la tâche actuellement effectuée.
Le low voltage detect est très utilisé pour détecter que la batterie est faible. Elle va stopper le système lorsque que la batterie ne fournit plus assez d’énergie pour le bon fonctionnement du microsystème.