Les principales caractéristiques de ce timer sont les suivantes :
- Deux sorties après comparaison indépendantes ;
- Registres de sortie bufferisés (lecture stable pendant le comptage) ;
- Réinitialisation du timer à la détection de l’égalité ;
- PWM sans déphasage ;
- PWM à période variable ;
- Générateur de fréquence ;
- 3 sources de d’interruption indépendantes.
Pour rappel, ci-dessous, le schéma des fonctions du TIMER0
; il faut évidemment remplacer le n
par 0.
Modulation en largeur d’impulsion (PWM rapide)
C’est l’usage le plus courant de ce timer, c’est donc la configuration qui est proposée en premier ici.
Dans ce mode de fonctionnement, le timer compte de manière incrémentale de 0 (BOTTOM
) à une valeur TOP
, puis se réinitialise à la valeur BOTTOM
. Lorsqu’une des valeurs de comparaison est franchie (OCR0A
ou OCR0B
), la sortie associée change d’état ; de même lorsque la valeur du compteur atteint BOTTOM
. Ainsi les sorties produisent des signaux de fréquence fixe et de rapport cyclique proportionnel à la valeur de comparaison (OCR0x
).
Valeur maximum (TOP
) du compteur
Pour contrôler le fonctionnement du timer, il faut d’abord choisir la valeur maximum (TOP
) que peut atteindre le compteur au moyen des modes indiqués ci-dessous ; cela donne aussi la précision de la modulation :
Mode | Fonctionnement | Description | WGM02,01,00 |
---|---|---|---|
3 | Fast PWM | Compte de 0 à 0xFF | 011 |
7 | Fast PWM | Compte de 0 à OCRA | 111 |
Le numéro du mode doit être indiqué dans les registres TCCR0A
et TCCR0B
:
Registre TCCR0A
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | COM0A1 | COM0A0 | COM0B1 | COM0B0 | - | - | WGM01 | WGM00 |
Registre TCCR0B
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | FOC0A | FOC0B | - | - | WGM02 | CS02 | CS01 | CS00 |
Horloge du compteur
Il faut ensuite paramétrer la source de l’horloge qui produit l’incrément du timer. En effet, le timer peut être cadencé, soit sur l’horloge interne, directe ou divisée, soit par une source externe appliquée à la broche T0
. Le tableau suivant précise les valeurs à appliquer aux bits du registre TCCR0B
en fonction de la source choisie :
CS02 | CS01 | CS00 | Description |
---|---|---|---|
0 | 0 | 0 | Pas de source (compteur arrêté) |
0 | 0 | 1 | clkI/O (pas de division) |
0 | 1 | 0 | clkI/O / 8 (pré-division) |
0 | 1 | 1 | clkI/O / 64 (pré-division) |
1 | 0 | 0 | clkI/O / 256 (pré-division) |
1 | 0 | 1 | clkI/O / 1024 (pré-division) |
1 | 1 | 0 | Source sur broche T0 ; sur front descendant |
1 | 1 | 1 | Source sur broche T0 ; sur front montant |
Registre TCCR0B
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | FOC0A | FOC0B | - | - | WGM02 | CS02 | CS01 | CS00 |
Comportement des sorties
Enfin, il faut préciser le comportement attendu des broches de sortie (OC0A
& OC0B
) lors des changements d’état, à savoir :
COM0A1 | COM0A0 | Description |
---|---|---|
0 | 0 | Fonctionnement normal du port ; OC0A déconnectée |
0 | 1 | WGM02 = 0 : fonctionnement normal du port ; OC0A déconnectée WGM02 = 1 : bascule de OC0A lors de la détection d’égalité ; |
1 | 0 | OC0A = 0 : lors de la détection d’égalité ;OC0A = 1 : lorsque le compteur passe à 0 (BOTTOM )(mode non-inversé) |
1 | 1 | OC0A = 1 lors de la détection d’égalité ;OC0A = 0 lorsque le compteur passe à 0 (BOTTOM )(mode inversé) |
COM0B1 | COM0B0 | Description |
---|---|---|
0 | 0 | Fonctionnement normal du port ; OC0B déconnectée |
0 | 1 | Réservé |
1 | 0 | OC0B = 0 lors de la détection d’égalité ;OC0B = 1 lorsque le compteur passe à 0 (BOTTOM )(mode non-inversé) |
1 | 1 | OC0B = 1 lors de la détection d’égalité ;OC0B = 0 lorsque le compteur passe à 0 (BOTTOM )(mode inversé) |
Les modes de fonctionnement des broches de sortie doivent être indiqués dans le registre TCCR0A
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | COM0A1 | COM0A0 | COM0B1 | COM0B0 | - | - | WGM01 | WGM00 |
Interruptions
Il est aussi possible d’utiliser des interruptions qui sont déclenchées lors des phases d’égalité du compteur avec les registres de comparaison (OCR0A
& OCR0B
) ou lorsque le compteur se réinitialise de TOP
à BOTTOM
(overflow).
Modulation en largeur d’impulsion sans déphasage
Dans ces modes, le compteur compte, puis décompte et les changements d’état des sorties n’ont lieu qu’à légalité entre le compteur et la valeur de référence. Ainsi la modulation reste symétrique et phasée quelque soit la valeur de référence retenue. Le contre-partie de ces modes et que la fréquence de modulation est 2 fois plus faible que pour une modulation PWM « rapide ». Pour le reste, le comportement du timer0 dans ces modes est identique au fonctionnement en PWM rapide.
Valeur maximum (TOP
) du compteur
Pour contrôler le fonctionnement du timer, il faut d’abord choisir la valeur maximum (TOP
) que peut atteindre le compteur au moyen des modes indiqués ci-dessous ; cela donne aussi la précision de la modulation :
Mode | Fonctionnement | Description | WGM02,01,00 |
---|---|---|---|
1 | PWM sans déphasage | Compte de 0 à 0xFF | 001 |
5 | PWM sans déphasage | Compte de 0 à OCRA | 101 |
Le numéro du mode doit être indiqué dans les registres TCCR0A
et TCCR0B
:
Registre TCCR0A
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | COM0A1 | COM0A0 | COM0B1 | COM0B0 | - | - | WGM01 | WGM00 |
Registre TCCR0B
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | FOC0A | FOC0B | - | - | WGM02 | CS02 | CS01 | CS00 |
Horloge du compteur
Il faut ensuite paramétrer la source de l’horloge qui produit l’incrément du timer. En effet, le timer peut être cadencé, soit sur l’horloge interne, directe ou divisée, soit par une source externe appliquée à la broche T0
. Le tableau suivant précise les valeurs à appliquer aux bits du registre TCCR0B
en fonction de la source choisie :
CS02 | CS01 | CS00 | Description |
---|---|---|---|
0 | 0 | 0 | Pas de source (compteur arrêté) |
0 | 0 | 1 | clkI/O (pas de division) |
0 | 1 | 0 | clkI/O / 8 (pré-division) |
0 | 1 | 1 | clkI/O / 64 (pré-division) |
1 | 0 | 0 | clkI/O / 256 (pré-division) |
1 | 0 | 1 | clkI/O / 1024 (pré-division) |
1 | 1 | 0 | Source sur broche T0 ; sur front descendant |
1 | 1 | 1 | Source sur broche T0 ; sur front montant |
Registre TCCR0B
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | FOC0A | FOC0B | - | - | WGM02 | CS02 | CS01 | CS00 |
Comportement des sorties
Enfin, il faut préciser le comportement attendu des broches de sortie (OC0A
& OC0B
) lors des changements d’état, à savoir :
COM0A1 | COM0A0 | Description |
---|---|---|
0 | 0 | Fonctionnement normal du port ; OC0A déconnectée |
0 | 1 | WGM02 = 0 : fonctionnement normal du port ; OC0A déconnectée WGM02 = 1 : bascule de OC0A lors de la détection d’égalité ; |
1 | 0 | OC0A = 0 : lors de la détection d’égalité en incrémentant ;OC0A = 1 : lors de la détection d’égalité en décrémentant. |
1 | 1 | OC0A = 0 : lors de la détection d’égalité en décrémentant ;OC0A = 1 : lors de la détection d’égalité en incrémentant. |
COM0B1 | COM0B0 | Description |
---|---|---|
0 | 0 | Fonctionnement normal du port ; OC0B déconnectée |
0 | 1 | Réservé |
1 | 0 | OC0B = 0 : lors de la détection d’égalité en incrémentant ;OC0B = 1 : lors de la détection d’égalité en décrémentant. |
1 | 1 | OC0B = 0 : lors de la détection d’égalité en décrémentant ;OC0B = 1 : lors de la détection d’égalité en incrémentant. |
Les modes de fonctionnement des broches de sortie doivent être indiqués dans le registre TCCR0A
:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nom | COM0A1 | COM0A0 | COM0B1 | COM0B0 | - | - | WGM01 | WGM00 |
Interruptions
Il est aussi possible d’utiliser des interruptions qui sont déclenchées lors des phases d’égalité du compteur avec les registres de comparaison (OCR0A
& OCR0B
) ou lorsque le compteur se réinitialise de TOP
à BOTTOM
(overflow).