LES TIMERS
 

Hugues ANGELIS

page  01

            

 

 

Le Timer est un des éléments primordiaux des microcontrôleurs. Mais pour mieux comprendre les timers, commençons par nous poser la question de leur utilisation, à quoi servent ils ? Et essayons d'y répondre par quelques exemples.

Exemples de fonctions nécessitant un timer.

Une note de musique, c'est une onde, à une fréquence donnée. Par exemple le "la" moderne est à une fréquence de 440 Hz. Le "la"  aiguë (c'est-à-dire avec une octave de plus) est à 880 Hz (monter d'une octave équivaut à multiplier par deux la fréquence du signal), tandis que le la grave (avec une octave de moins) est à 220 Hz. Posons nous maintenant la question suivante :

Comment fabriquer un signal carré dont la fréquence serait de 440 Hz à partir d'un quartz à 16 MHz ?

Le rapport de division entre ces 2 fréquences n'étant pas un entier, en utilisant un système logique, cela va être particulièrement difficile. Avec un timer, ce problème est trivial !

Autre exemple, supposons maintenant que nous souhaitons réaliser un système d' "homme-mort", c'est-à-dire un système qui déclenche une alarme si il n'y a pas eu de pression sur un bouton pendant un temps supérieur à 5 minutes.

Sans timer, il faudrait donc alors mobiliser toute la puissance de calcul du microcontrôleur simplement pour compter le temps qui s'est écoulé depuis que le bouton a été enfoncé pour la dernière fois. Un timer fait exactement la même chose, mais en laissant le microcontrôleur libre...

Pour être plus synthétique, à partir de nos 2 exemples, un timer peut servir à dater des événements extérieurs (on parle alors d'horodatage ou du mode Input Capture) ou alors à générer des signaux (on parle dans ce cas de mode Output Compare).

Comment fonctionne un Timer ?

Un timer est composé d'un ensemble d'éléments assez simple.

Le premier de ces éléments, par ordre d'importance, est un compteur (le Free Running Counter), qui compte de façon "perpétuelle" +1 (on dit aussi qu'il s'incrémente) à chaque front actif de son entrée d'horloge.

Comme ce compteur a une taille (un nombre de bits de comptage) limitée, si l'on souhaite traiter des phénomènes lents, il est indispensable de pouvoir modifier la fréquence de son entrée d'horloge. Pour cela, on place entre l'horloge du microcontrôleur et l'horloge du Free Running Counter un prédiviseur d'horloge, programmable (prescaler en anglais).

On a donc maintenant un compteur qui peut travailler sur une très vaste gamme de fréquence. Ceci est le point commun entre les modes Input Capture et Output Compare.

Mode Input Compare
Dans le mode Output Compare, le timer compare la valeur du Free Running Counter avec celle d'un registre, et lorsqu'il y a égalité, il modifie l'état de la sortie associée au registre. Dans la plus part des cas, le compteur se remet à 0 et le comptage recommence et ainsi de suite. Si l'on regarde la sortie associée à ce registre, le temps de comptage pour parvenir à l'égalité donnera la demi période du signal de sortie

Ce sera par exemple la possibilité de créer un signal musicale par le chargement de valeurs dans le registre correspondant à la fréquence des notes à réaliser. Un second compteur pilotera le chargement du registre en fonction de la durée de la note . Une note de musique sera caractérisée par deux nombres: un pour la fréquence dans un timer l'autre pour la durée dans un second.

On pourra aussi utiliser un timer en mode compare pour effectuer une base de temps,  "battre" le centième de seconde pour un chronomètre ou une horloge etc

Mode Input Capture
 

Dans le mode Input Capture, le timer doit stocker la valeur du Free Running Counter dans un registre lorsque l'entrée qui lui est associée passe à l'état actif.

Ce sera la possibilité de mesurer un temps par exemple