Présentation :
Un Timer est une circuiterie logique qui permet d'effectuer du comptage de temps, d'évenements, de base de temps pour la génération de signaux...
Les Timers représentes sans doute la partie la plus difficile à maitriser, certainement due aux nombres de registres, c'est pourquoi il faut vraiment prendre le temps de bien s'imprégner du fonctionnement général et de la signification de chacun des ces registres.
Le mode de fonctionnement en PWM sera présenté en fin de chapitre dans le but de ne pas compliquer la compréhension d'utilisation des Timers.
Le AT90S8535 est doté de 3 Timers :
___________________________________________________________________________________
TIMER 0
C'est le plus simple des timers, il est composé d'un compteur 8 Bits.
On constate que son architecture est mise en commun avec le TIMER 1, et oui, généralement le timer 0 et 1 sont présents sur la famille AT90S85XX, le Timer 2 lui étant indépendant et optionnel
Architecture générale du Timer 0 et 1

ARCHITECTURE DU TIMER 0

Les registres :
TIFR : Registre d'etat partagé avec le TIMER 1 et 2
- TOV0 : Bit d'indication de débordement du Timer 0 (255 --->0). il est remis à 0 automatiquement lors du traitement de l'interruption correspondante, ou par écriture d'un 1 logique à la meme adresse.
TIMSK : Registre de validation des interruptions partagé avec le TIMER 1 et 2
- TOIE0 : Validation de l'interruption TIM0_OVF au débordement du Timer 0.
TCNT0 : Compteur du Timer 0 accessible en lecture / écriture
TCCR0 : Registre de controle du Timer 0 : séléction du facteur de pré-division de l'horloge de comptage ou incrémentation par signaux externe pin T0
Tableau de multiplexage :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pin T0, active sur front descendant
|
|
|
|
Pin T0, active sur front montant
|
Application :
Paramétrage du TIMER 0 :
1 - Si interruption penser à mettre l'instruction SEI
2 - Dans le meme cas, mettre à 1 le drapeau TOIE0 du registre TIMSK
3 - Inscription de la valeur du compteur avec TCNT0
4 - Sélection de la source d'horloge du compteur dans TCCR0, qui à ce meme met le compteur en fonctionnement
5 - Execution de la routine d'interruption et rechargement du compteur
Exemple :
Déclanchement d'une interruption toute les 3,2 ms, signalé par un créneau sur la broche PB0
Premier élement à prendre en compte : la fréquence de résonance du Quartz; Dans le cas présent 8 Mhz, ce qui donne une période d'horloge de 125 nano-secondes ( T=1/F --> T = 1 / 8 000 000). Vient à cela s'ajouter le choix de la pré-division (CS02...CS00) et ensuite la valeur du compteur (TCNT0)
On atribura les valeurs suivantes : Division d'horloge de 256 et valeur du compteur : 100
Ce qui finalement donne : 0,000000125 x 256 x 100 = 3,2 ms
Mais attention, on souhaite faire débordé le compteur pour 100 pas d'incrémentation, la valeur chargée réellement correspondras à 256-100 soit 156, et oui notre compteur ne décrémente pas de 255 à 0, il incrémente !
Listing :
___________________________________________________________________________________
TIMER 1
Présentation :
Le TIMER 1 est beaucoup plus évolué que le TIMER 0, pour cause il est constitué de :
- Un compteur de 16 Bits
- 2 registres de comparaison liées sur 2 sorties (OC1A = PD5 et OC1B = PD4)
- Génération de PWM
- Un registre de capture avec une entrée externe (ICP = PD6)
ARCHITECTURE DU TIMER 1

Les registres :
Revoila nos deux registres partagé :
TIFR : Registre d'etat
- ICF1 : Passe à 1 lors de la copie du registre TCNT1 vers ICR1, déclanché par un changement de front sur l'entrée ICP (PD6).
A noter que cette entrée dispose d'un réducteur de bruit, efficace contre tout parasite !
- OCF1A : comparaison réussie de TCNT1 = OCR1A.
- OCF1B : comparaison réussie de TCNT1 = OCR1B.
- TOV1 : débordement du registre de comptage TCNT1.
Tous ces drapeaux sont remis à 0 lors du traitement de l'interruption correspondante, ou en écrivant un 1.
TIMSK : Registre de validation des interruptions
- TICIE1 : Valide l'interruption TIM1_CAPT lors de la détection d'un front actif sur l'entrée ICP.
- OCIE1A : Valide l'interruption TIM1_COMPA si comparaison réussie de TCNT1 = OCR1A.
- OCIE1A : Valide l'interruption TIM1_COMPB si comparaison réussie de TCNT1 = OCR1B.
- TOIE1 : Validation de l'interruption TIM1_OVF au débordement du Timer 1, TCNT1.
TCCR1A : Registre de controle du timer 1
- COM1A1 & COM1A0 : Définissent l'action à réaliser sur la sortie OC1A quand la comparaison de OCR1A et TCNT1 est vérifié.
- COM1B1 & COM1B0 : Définissent l'action à réaliser sur la sortie OC1B quand la comparaison de OCR1B et TCNT1 est vérifié.
- PWM11 & PWM10 : Selection du mode de fonctionnement PWM.
Tableaux correspondants :
|
|
|
|
|
|
|
Timer 1 déconnecté
PWM non connecté
|
|
|
|
|
Changement d'etat
PWM non connecté
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TCCR1B : Registre de controle du timer 1
- ICNC1 : Mise en service du réducteur de bruit de l'entrée ICP
- ICNS1 : Sélection du type de front de l'entrée ICP : 0 = Front descendant, 1 = Front Montant. A cet instant le contenu du registre du compteur TCNT1 est transféré dans IRC1.
- CTC1 : Mode de fonctionnement du compteur TCNT1 : 0 = comptage en continu, débordement et retour à 0 , 1 = comptage j'usqu'a ce que TCNT1 = OCR1A, puis le cycle recommence.
- CS12...CS10 : Sélection de la source d'horloge du compteur TCNT1
Tableau de multiplexage :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pin T1, active sur front descendant
|
|
|
|
Pin T1, active sur front montant
|
ICR1 : Registre de capture du timer 1en lecture seule
TCNT1 : Registre du compteur Timer 1
OCR1A : Registre de comparaison A
OCR1B : Registre de comparaison B
Application :
Les différentes utilisations du timer sont tellement nombreuse que je ne peut tout développer. néanmoins je reste à votre disposition pour toutes demandes d'aide.
Exemple :
Ici nous allons décider de faire clignoter une Led branché sur PB0, et ce de manière cyclique toute les secondes.
Pour cela nous utiliserons le compteur TCNT1 avec le comparateur OCR1A ; dès que les contenus seront identiques, le drapeau d'interruption sera levée et l'interruption correspondante traitée.
on choisira une valeur arbitraire de division d'horloge par 1024, ce qui nous donne une incrémentation de :
pour faire une secondes reste à calculer le coéfficient multiplicateur :
Le compte n'etant pas juste, reste à choisir 7812 ou 7813 !
Dans l'ordre on ecrit :
1 -Validation de l'interruption générale SEI, puis mis à 1 du drapeau OCIE1A ( interruption quand TCNT1 =OCR1A )
2 - Chargement de la valeur de comparaison dans OCR1A (7813)
3 - Remise à 0 du compteur TCNT1 , bien que pas indispensable, ceci permet de fonctionner correctement au tout début du comptage
4 - Selection du facteur de division de l'horloge, et par conséquent mis en marche du timer
AVERTISSEMENT : il semble que pour entrer la valeur dans OCR1A, il soit préférable de rentrer d'abord le poids fort, puis le poids faible, sous peine de ne voir prendre en compte que le poids faible !
Listing :
___________________________________________________________________________________
TIMER 2
Présentation :
Le TIMER 2 comporte un compteur 8 Bit et comme le timer 1 un registre de comparaison qui agit sur OC2(PD7) et aussi un générateur de PWM
Architecture du Timer 2

Les registres :
Toujours les deux registres partagé :
TIFR : Registre d'etat
- OCF2 : Bit d'indication de débordement du compteur 2 (TCNT2).
- TOV2 : Comparaison réussie de TCNT2 = OCR2.
drapeau remis à 0 lors du traitement de l'interruption correspondante, ou en écrivant un 1.
TIMSK : Registre de validation des interruptions
- OCIE2 : Valide l'interruption TIM2_COMP si comparaison réussie de TCNT2 = OCR2.
- TOIE2 : Validation de l'interruption TIM2_OVF au débordement du Timer 2, TCNT2.
TCCR2 : Registre de controle du Timer 2
- PWM2 : Valide le mode de fonctionnement du Timer en PWM.
- COM20 & COM21 : Définissent l'action à réaliser sur la sortie OC2 quand la comparaison de OCR2 et TCNT2 est vérifié.
- CTC2 : Mode de fonctionnement du compteur TCNT2 : 0 = comptage en continu, débordement et retour à 0 , 1 = comptage j'usqu'a ce que TCNT2 = OCR2, puis le cycle recommence.
- CS22...CS20 : Sélection de la source d'horloge du compteur TCNT2
Tableaux correspondants :
|
|
|
|
|
Timer 2 déconnecté
PWM non connecté
|
|
|
Changement d'etat
PWM non connecté
|
|
|
|
|
|
|
|
|
ASSR : Registre de controle et statut du Timer 2
- AS2 : Sélection de la source d'horloge du compteur timer 2 : 0 = Horloge interne ; 1 = Horloge externe connectée entre les broches PC6 et PC7 , à l'aide d'un quartz .
Le reste des registres ne seront pas décrits car ils servent uniquement pour le mode asynchrone, qui ne sera pas développé ici.
Ce mode à été créer dans le but de mettre en oeuvre une horloge temps réel.
TCNT2 : Registre du timer 2
OCR2: Registre de compaison du Timer 2
___________________________________________________________________________________
Mode PWM du Timmer 1
Présentation :
Le mode PWM (pusle wave modulator, en francais modulation en largeur d'impulsion) sert à générer un train d'onde de fréquence constante, mais de rapport cyclique variable. ( a noter que l'on puisse très bien faire les 2 en meme temps).
Les applications pratiques vont de la régulation de vitesse pour les moteurs à courant continu, à la variation de l'intensité lumineuse en passant par tout ce qui vous passe par la tete !
Fonctionnement :
En mode PWM, le timer et configuré pour sortir le signal sur une broche de sortie (OC1A par exemple).
Le registre TCCR1A est principalement utilisé.
Le compteur TCNT1 compte de 0 à sa valeur maximale, puis décompte et ainsi de suite...
La valeur du compteur est définit par sa résolution de 8, 9 , et 10 bits ce qui correspond aux valeurs respective 255, 511, et 1023.
Dès que TCNT1 est égale au contenu de la valeur de comparaison, la sortie correspondante est activée.
On peut donc conclure que la Valeur de TCNT1 fixe la fréquence et OCRx le rapport cyclique.
Ci dessous le chronogramme illustré du mode de fonctionnement avec OC1A :

Application :
Paramétrage :
1 - Choisir la résolution du compteur TCNT1 avec les drapeaux PWM11 et PWM10 du registre TCCR1A.
2 - Chargement de la valeur de comparaison dans OCR1x.
3 - Sélectionner la polarité su signal à l'aide de COM1X1 et COM1X0.
4 - Selection du facteur de division de l'horloge si necessaire.
Exemple :
Nous allons produire un signal PWM sur la sortie OC1A (PD5) de fréquence égale à 15 686 Hz, et de rapport cyclique variable à l'aide d'un potentiomètre branché sur AIN0 (PA0).
Tout d'abord on configure le mode PWM normal, COM1A1 = 0 et COM1A0 = 0
Reste à définir la résolution du PWM, ce qui revient aussi à appliquer un facteur de pré-division car n'oubliez pas que TCNT1 compte j'usqu'a sa valeur maximum, puis décrémente et ainsi de suite. La valeur de la résolution sera fixée à 8 bits.
on peut donc calculer la fréquence centrale :
soit
510 correspond au facteur de pré-division par defaut pour le mode 8 bits (voir registre TCCR1A).
Ensuite on charge la valeur 128 dans le registres OCR1A, ce qui correspond à un rapport cyclique de 50 %
Et voila, il reste à faire varier la valeur OCR1A qui sera issue de la valeur du signal analogique échantillonné sur PA0.
Listing :
|