Vous êtes sur la page 1sur 6

Les Timers

Qu’est-ce qu’un timer ?

C’est un périphérique qui a pour rôle de compter :

✓ Des évènements externes qui peuvent être non périodiques (fonction compteur)
✓ Des évènements internes périodiques (impulsions d’horloge) (fonction temporisateur :
mesure de temps)

Généralement lorsque le compteur arrive en fin de comtage (débordement : overflow) il


reprend le comptage à 0.

On utilise un compteur pour :

✓ Mesurer des durées de temps


✓ Déclencher périodiquement des interruptions
✓ Générer des signaux PWM (Pulse Width Modulation)

Un timer est composé de :

1. Des broches :
✓ D’entrée : pour compter les changements d’états d’un évènement externe
✓ De sortie pour signaler que le compteur a atteint une valeur particulière
2. Un sélecteur : sélectionne l'entrée dont les changements d'états (évènements) seront
comptés, en général :
✓ L’horloge interne
✓ Une broche externe
3. Un prédiviseur : dont le rôle est de diviser la fréquence d’horloge par une valeur (n) qui est
une puissance de 2(1 , 16 , 64 , 256). Le but est de ralentir l’horloge qui attaque l’entrée du
compteur.
4. Un registre de comptage : il contient simplement la valeur de comptage du compteur
5. Des unités de comparaison : chaque unité est munie d’un registre de comparaison qui
contient une valeur destinée à être comparée à celle du compteur, le but étant de changer l’état
d’un e broche de sortie de l’unité en question ou de déclencher une interruption.
6. Des registres de contrôle pour configurer le mode de fonctionnement du Timer.
Les Timers de l’Atmega328P :
L’Atmega328P dispose de trois Timers : Timer0, Timer1 et Timer2

31
Les Timers

Timer0 :

On dispose de deux principaux modes de fonctionnement :

1. Mode normal :
• Le timer compte (s'incrémente) à chaque « évènement » détecté, qui peut être au choix :
✓ les tops d'horloge prédivisés, en mode temporisateur,
✓ les changements d'état de sa broche d'entrée, en mode compteur ;
• le Timer reprend à 0 en fin de comptage (overflow).
• Il peut déclencher une interruption de débordement :

• Lorsque le timer compte les tops d'horloge prédivisés (fonction temporisateur), la durée
(période) de ses cycles est définie par : T_cycle_normal = prédiviseur/fcpu * 256

32
Les Timers

2. Mode remise à zéro sur comparaison : (CTC : Clear Timer On compare Match)
• Le compteur compte à partir de 0, la valeur de comptage est comparée une valeur spécifique
(stockée dans le registre de comparaison A), lorsque cette valeur est atteinte le compteur
reprend à o.
• En plus de la réinitialisation à 0 du compteur, la comparaison précédente peut déclencher :
✓ Une interruption de comparaison A
✓ Un changement d’état sur la broche de sortie OC0A

• La durée de cycle dans ce mode est : T_cycle_CTC = préd./fcpu * (OCR0A+1)

Génération de signal carré en mode CTC :

La broche de sortie OC0A (= broche du timer 0 associée à la comparaison A) peut s'inverser à


chaque comparaison :

La fréquence du signal obtenu est : T_signal_sortie_CTC = 2*préd./fcpu * (OCR0A+1)

33
Les Timers

Programmation du Timer 0 : ce Timer dispose de deux unités identiques (A, B)

La programmation du Timer se fait par le biais de ses registres qui sont :

✓ TCNT0 : registre de comptage du Timer 0


✓ OCR0A : registre de comparaison de l’unité A du Timer 0
✓ OCR0B : registre de comparaison de l’unité B du Timer 0
✓ TCCR0A : registre de contrôle de l’unité A du Timer 0
✓ TCCR0B : Registre de contrôle de l’unité B du Timer 0
✓ TIMSK0 : registre d’interruption du Timer 0

TCNT0 : registre de comptage sur 8 bits, le Timer0 compte donc de 0 à 255

Il est important d’initialiser ce registre à 0 pour que le premier cycle de comptage soit complet
( 0 à 255).

OCR0A : registre de comparaison A du Timer 0

C’est un registre de 8 bits, la valeur stockée dans ce registre sera comparée à celle du registre
pécédent (TCNT0), lorsque les deux valeurs sont égales une interruption pourra ètre
demandée et la sortie de la broche OCR0A pourra ètre inversée.

TCCR0A :

TCCR0B :

Les deux premiers bits du TCCR0A (WGM0[0),WGM0[1]) et le quatrième bit du TCCR0B


(WGM0[2]) définissent les différents modes de fonctionnement du Timer0 :

34
Les Timers

A noter que parmi ces 6 modes, seuls les modes : normal et CTC ont été expliqués dans ce
cours. (mode 0 et mode 2 dans le tableau plus haut).

Les bits COM0A0 et COM0A1 (les 2 bits de poids fort du TCCR0A) sont utilisées pour
émettre un signal sur la broche de sortie OC0A (sortie de comparaison unité A). La forme e ce
signal évolue lorsque le compteur prend la valeur du registre de comparaison A.

Pour les deux modes expliqués dans ce cours (normal et CTC), ces deux bits permettent les
configurations suivantes :

Les bits COM0B0 et COM0B1 concernent la comparaison avec le second registre de


comparaison B (voir document Datasheet mis sur la plateforme)

Les 3 premiers bits du TCCR0B permettent de sélectionner les signaux d’horloge à prendre
en compte (signal d’entrée sur la broche T0, horloge interne avec ou sans prédiviseur).

Les différentes configurations sont données dans le tableau suivant :

35
Les Timers

Registre de masques d’interruption du Timer0 :

Les trois bits de ce registre permettent d’activer ou de désactiver chacune des sources
d’interruption suivantes :

✓ TOIE0 : Timer0 Overflow Interrupt Enable


✓ OCIE0A : Output Compare Interrupt Enable Unit A
✓ OCIE0B : Output Compare Interrupt Enable Unit B

En résumé, pour programmer le Timer 0 il faut suivre les étapes suivantes :

• Choisir le mode de fonctionnement du timer selon votre besoin (les modes expliqués
dans ce cours sont les modes normal et CTC) (registres : TCCRA et TCCR0B)
• Définir le mode temporisateur avec la période d’interruption souhaitée :
✓ Choix du prédiviseur (registre TCCR0B)
✓ Calcul de la valeur de comparaison si mode CTC (OCR0A)
• Autoriser l’interruption souhaitée (registre TIMSK0)
✓ Soit celle de débordement lorsqu’on est on mode normal
✓ Soit celle de comparaison lorsqu’on en mode CTC
• Réinitialiser le registre de comptage (registre TCNT0=0) : rappelez-vous, si le
compteur ne démarre pas de 0 le premier cycle de comptage sera incomplet.

36

Vous aimerez peut-être aussi