Atmega328 timers
Introduction
Lorsque l'on veut qu'un événement se produise à un intervalle régulier, il est tentant d'utiliser la fonction delay() mais cette dernière va juste mettre en pause le programme. Cela revient à gâcher la puissance de calcul de l'ATmega328 qui passe la plupart de son temps à ne rien faire !
Fonctionnement
Les différents timers
Il existe 3 timers dans l'ATmega328:
Nom |
Taille |
Utilisation |
Interruptions |
Timer0 |
8 bits |
|
|
Timer1 |
16 bits |
|
|
Timer2 |
8 bits |
|
|
Chaque timer s'incrémente à chaque fois que l'on à une impulsion du quartz. Sur un ATmega328, le quartz est cadencé à 16mHz, ce qui nous fait un incrément toutes les 62,5ns (1/16.000.000).
Faites attention, en modifiant un timer, à ne pas utiliser des librairies ou sortie PWM dépendantes du même timer.
Le prescaler
Si on fait le calcul en l'état:
- les timers 0 et 2 ne pourrons compter qu'un temps de 16µs (62,5ns * 256);
- le timer 1 ne pourra compter qu'un temps de 4,096ms (62,5ns * 65536);
Cela n'est pas très pratique surtout si l'on veut compter des valeurs plus grande que 4ms ! Pour pouvoir attendre un temps plus long il suffit de diviser la base de temps, c'est à dire, de ne pas incrémenter le timer à tous les ticks d'horloge mais tous les 8 ou 16 ticks par exemple. La modification de la base de temps de l'incrément est rendu possible grâce au prescaler.