Qu'est-ce qu'un superviseur de fonctionnement ? Qu'est-ce qu'un Prescaler ?

Introduction

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.

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.

a)  Prescaler  1: 1

Pour le prescaler 1:1, avec une fréquence d’horloge de 1 mhz ça fait un temps de :

  • Le timer 8 bits contient déjà 255 valeurs pour le comptage. Il nous reste juste à additionner la valeur précédemment calculée. Notre timer a donc une valeur maximum de 255 μs + 1 μs = 256 μs.
  • Si on a un timer de 16 bits, il contient lui 65535 valeurs. Il faudra donc 65535+1 = 65536 μs ou 0.065536 seconde pour que le timer déborde.

b) Prescaler 2:1

Pour le prescaler 2:1, avec une fréquence d’horloge de 1 mhz ça fait un temps de :

  • Le timer 8 bits contient déjà 255 valeurs pour le comptage. Il a donc une valeur maximum de 255 μs + 1 μs = 256 μs. Comme c’est un prescaler 1:2, on multiplie le temps par deux, 2*256 = 512 μs. Il faut donc 512 μs pour que le timer déborde.
  • Si on a un timer de 16 bits, il contient lui 65535 valeurs. Il faudra donc 65535+1 = 65536 μs ou 0.065536 seconde. Comme c’est un prescaler 1:2, il faut 2*65536 μs = 131072 μs.

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.

Les superviseurs de fonctionnement

a) Le watch dog

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 :

  • en mode Runnning quand le timer déborde on a le reset du microsystème.
  • en mode Sleep : on a le réveil du microsystème

b) Le Brown out reset

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.

c) Low voltage detect

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.