Atmega328 timers

De The Linux Craftsman
Révision datée du 2 novembre 2018 à 01:59 par Jc.forton (discussion | contributions) (Page créée avec « = 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 just... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

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

  • delay(), millis(), micros()
  • analogWrite() sur les broches 5 et 6 (PWM)
  • Compare Match
  • Overflow

Timer1

16 bits

  • Servo
  • analogWrite() sur les broches 9 et 10 (PWM)
  • Compare Match
  • Overflow
  • Input Capture

Timer2

8 bits

  • Tone()
  • analogWrite() sur les broches 3 et 11 (PWM)
  • Compare Match
  • Overflow

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.

Les interruptions