Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
1
Principe de fonctionnement
Rle : Raliser une temporisation
lment essentiel : Compteur qui s'incrmente
chaque front montant du signal qui lui est
appliqu :
2
Principe de fonctionnement
Lorsque le compteur dpasse la valeur
maximale qu'il peut contenir (par exemple : 256
pour un compteur sur 8 bits), un drapeau (flag
en anglais) se lve.
3
Principe de fonctionnement
R-initialisation du drapeau
4
Mthodes de configuration
Un Timer doit pouvoir compter un temps dfini
par le programme (par exemple 1ms, 10ms,
50ms, etc).
Pour cela, 2 paramtres peuvent tre modifis :
La frquence du signal appliqu au compteur
Le compteur s'incrmentera ainsi plus ou moins vite.
Le nombre d'impulsions compter
Le drapeau se lve toujours lorsqu'il y a dbordement,
on peut donc faire partir le compteur d'une valeur
non nulle pour rduire le temps de comptage.
5
Mthodes de configuration
Modification de la frquence du signal appliqu
au compteur : le pr-diviseur (prescaler en
anglais)
Exemple : pour compter 4 fois moins vite
6
Mthodes de configuration
Modification du nombre d'impulsions compter
Si le compteur dmarre 0, il mettra beaucoup
de temps atteindre sa valeur maximale.
Pour rduire le temps de comptage, on peut
donc charger une valeur initiale non nulle
dans le compteur.
Exemple : Valeur initiale gale 250
Chargement du compteur une valeur initiale de 250
6 impulsions
7
Les Timers du PIC 16F887
Composition gnrale d'un Timer sur un
microcontrleur PIC :
T =T quartz Valeur du pr-compteur fixe Valeur du pr-compteur rglable Nombre d'impulsions compter
8
Les Timers du PIC 16F887
Les Timers sont internes au microcontrleur.
Le 16F887 en compte 3 :
Timer0 et Timer2 sur 8 bits
Timer1 sur 16 bits
9
Le Timer0 du 16F887
Composition du Timer0
Le pr-diviseur peut prendre une valeur parmi la
liste suivante : 1, 2, 4, 8, 16, 32, 64, 128 ou
256
La valeur initiale peut prendre n'importe quelle
valeur entire comprise entre 0 et 255.
10
Le Timer0 du 16F887
Calcul du temps maximum :
Pour que le drapeau se lve le plus tard possible, il faut
que la frquence du signal appliqu au compteur soit
la plus faible possible. Il faut donc configurer le
pr-diviseur le plus grand : 256
Il faut galement faire dmarrer le compteur avec la
valeur la plus petite possible pour qu'il compte le
nombre d'impulsion le plus grand : valeur initiale = 0
T MAX =T quartz Valeur du pr-compteur fixe Valeur du pr-compteur rglable max Nombre d'impulsions compter max
1
T MAX = 6
4256( 2560)=65,536 ms
4.10
11
Le Timer0 du 16F887
Calcul d'un temps de 10 ms :
3 1 X = valeur du pr-compteur
T =10.10 = 6
4 X Y
4.10 avec Y = valeur compter= 256 - valeur initiale
13
Le Timer0 du 16F887
Registre de configuration du Timer0 : OPTION_REG
/RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
? ? ? ? ? ? ? ?
14
Le Timer0 du 16F887
Registre de configuration du Timer0 : OPTION_REG
/RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
X (1) X (0) 0 X (0) 0 1 0 1
Pr-diviseur = 64
16
Le Timer0 du 16F887
Exemple de programme :
void tempo_timer0 ( void ); // tempo de 10ms avec le timer0
void init ( void ); // initialisation des priphriques
18
Le Timer0 du 16F887
Exercice 1 : Temporisation de 1 ms avec le timer 0.
Question 1 : Quels sont les registres du TIMER0 qu'il
est ncessaire de configurer ?
Question 2 : Calculer les valeurs du prescaler et du
compteur ncessaire pour obtenir une temporisation
de 1 ms.
Question 3 : Donner la configuration des registres du
TIMER0.
Question 4 :
Ecrivez la fonction void Tempo_Timer0_1ms (void) qui
permet d'utiliser le Timer 0.
19
Le Timer0 du 16F887
Exercice 2 : Temporisation de 8 ms avec le timer 0.
Question 1 : Re-calculer les valeurs du prescaler et du
compteur ncessaires pour obtenir cette fois une
temporisation de 8 ms.
Question 2 : Donner la configuration des registres du
TIMER0.
20
Le Timer0 du 16F887
Exercice 3 : Temporisations variables avec le timer 0.
La temporisation maximale avec le Timer 0 est de 65
536 s. Pour raliser des temporisations plus
longues nous allons faire des boucles.
Pour cela, nous allons crire une fonction appele
TempoX10 qui lance X fois une temporisation de 10
ms. X sera une valeur passe en paramtre.
Par exemple, pour faire une temporisation de 1,5s,
nous crierons tempoX10(150).
Question : crire la fonction void tempoX10('X') en
n'oubliant pas de configurer correctement le passage
de paramtre qui lancera X fois une temporisation de
10ms.
21
Le Timer2 du 16F887
Il est lgrement diffrent du Timer 0 puisque le
dbut de comptage est en principe 0x00 et que la fin
de comptage est la valeur entrer.
Il possde comme le Timer 0 un pr-compteur fixe et
un pr-compteur variable (3 valeurs possibles : 1, 4
et 16). C'est aussi un compteur 8 bits.
22
Le Timer2 du 16F887
Calcul de la dure de comptage
T MAX =T quartz Valeur du pr-compteur fixe Valeur du pr-compteur rglable max (Valeur dfinie + 1)
1
T MAX = 6
416256=4,096 ms
4.10
23
Le Timer2 du 16F887
Originalit de ce Timer :
Le flag ne se lve pas systmatiquement
chaque fin de comptage.
Existance d'un post-compteur.
Ce post-compteur peut prendre chaque
24
Le Timer2 du 16F887
La temporisation max de ce Timer est donc :
TMAX = 16 * 4,096 ms soit 65,536 ms
25
Le Timer2 du 16F887
26
Le Timer2 du 16F887
27
Le Timer2 du 16F887
28
Le Timer2 du 16F887
void tempo_timer2 ( void ); // tempo avec le timer2 void tempo_timer2 ( void ); // tempo avec le timer2
void init ( void ); // initialisation des priphriques void init ( void ); // initialisation des priphriques
void tempo_timer2 ( void ) // tempo de 50ms avec le void tempo_timer2 ( void ) // tempo avec le timer2
timer2 {
{ TMR2IF = 0; // initialisation du drapeau li au timer2
PR2 = 239; // Valeur dfinie de fin de comptage while ( TMR2IF == 0 ); // attente de la leve du drapeau
T2CON = 0x66; // configuration du timer2 }
TMR2IF = 0; // initialisation du drapeau li au timer2
while ( TMR2IF == 0 ); // attente de la leve du drapeau void init ( void ) // initialisation des priphriques
} {
TRISB.1 = 0; // RB1 configur en sortie
void init ( void ) // initialisation des priphriques PR2 = 239; // Valeur dfinie de fin de comptage
{ T2CON = 0x66; // configuration du timer2
TRISB.1 = 0; // RB1 configur en sortie }
}
Particularits de ce Timer 1 :
Principe de fonctionnement similaire au Timer0
Le pr-compteur ne peut prendre que quatre
valeurs : 1, 2, 4 ou 8.
Le compteur est un compteur 16 bits :
Registre de comptage compos de deux
registres de 8 bits : TMR1H et TMR1L
30
Fonctions particulires des Timers
Les Timers 0 et 1 peuvent tre utiliss en compteur dvnements
extrieurs.
Exemples :
Compteur de pices dans une machine industrielle
Affichage de la vitesse dun vhicule
Timer 0 :
Signal appliquer sur la broche RA4/T0CKl
31
Timer 0 en compteur d'vnements
T0SE = 0 : les fronts montants attaquant le Timer0
correspondent aux fronts montants de RA4 / T0CKI
T0SE = 1 : les fronts montants attaquant le Timer0
correspondent aux fronts descendants de RA4 / T0CKI
32
Timer 1 en compteur d'vnements
La broche du PIC associe au Timer 1 est la ligne RC0/T1OSO/T13CKI :
La ligne RC1 / T1OSI est aussi associe au Timer 1, mais ne joue pas
de rle dans le comptage d'vnements extrieurs.
bit T1OSCEN = 0
33
Timer 1 associ un quartz
Il est possible de connecter un quartz sur le Timer 1 et de compter les
impulsions de celui-ci pour gnrer des temps plus prcis comme par
exemple pour crer une horloge de secondes, minutes, heures ou un
chronomtre.
Trs utile pour grer le mode sommeil du micro-controleur.
En gnral, on prend un quartz dit d'horloger de 32768 Hz (on divise
ensuite par 215 pour avoir 1s)
T1OSCEN = 1
34