0% ont trouvé ce document utile (0 vote)
26 vues10 pages

Cours - 2 - Timer 0

Le document traite des fonctionnalités du temporisateur et compteur zéro, en particulier des interruptions sur changement d'état sur PORTB et du module TIMER 0. Il décrit les caractéristiques, les registres impliqués, et fournit des exemples d'application pour générer des signaux et compter des événements. Les configurations nécessaires pour le fonctionnement du TIMER 0 et des interruptions sont également détaillées.

Transféré par

rouss.thomas1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues10 pages

Cours - 2 - Timer 0

Le document traite des fonctionnalités du temporisateur et compteur zéro, en particulier des interruptions sur changement d'état sur PORTB et du module TIMER 0. Il décrit les caractéristiques, les registres impliqués, et fournit des exemples d'application pour générer des signaux et compter des événements. Les configurations nécessaires pour le fonctionnement du TIMER 0 et des interruptions sont également détaillées.

Transféré par

rouss.thomas1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Cours 2 Temporisateur/Compteur Zéro Section 5

Interruption sur changement d’état (Interrupt On Change)


Section 3.4.3
Caractéristiques générales
 Disponible sur PORTB uniquement.
 Broches doivent être configurées en entrée. (TRISB + ANSELH)
 Possibilité de générer des interruptions sur les changements de niveaux.
 Possibilité de sélectionner l’interruption individuellement sur les broches désirées. (IOCB)
 Possibilité de configurer des résistances de rappel internes « pull-up ».(WPUB + !RBPU)

Registres impliqués
 Bits à configurer pour interfacer le port PORTB :

 Bits à initialiser pour générer les interruptions :

Schéma de l’interruption RBIF

Page 1 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

Schéma des broches « RB0 … RB4 » et « RB4 … RB7 »


 Changement de l’état de la broche est actualisé au cycle d’horloge Q3.
 Le nouvel état de la broche est actualisé à la lecture du port B.

Page 2 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

Module du TIMER 0 « Timer / Counter 0 »


 Compteur / Temporisateur à 8 bits.
 Quatre registres d’impliqués :

 Incrémentations du registre du TMR0 à partir de :


 L’oscillateur interne « FOSC/4 » :  Mode temporisateur interne.
 La broche « RA4/ TOCKI /C1OUT » :  Mode compteur externe.
 Possède un circuit de diviseur programmable, « Pre-Scaler », de:
 « Pre-Scaler » de 1:1 avec le bit « PSA » à « 1 ».
 « Pre-Scaler » de 1:2 à 1:256 avec le bit « PSA » à « 0 ».
 Voir les bits « OPTION_REG [2:0] ».
 Diviseur programmable, partagé entre le module du TIMER0 et le module du WDT.

 Peut être utilisé comme « compteur » si :


 Le bit « T0CS » est initialisé à « 1 ».
 La broche « RA4/T0CKI/C1OUT » doit être configurée en entrée.
 Le bit « T0SE » détermine le font d’incrémentation de l’horloge externe :
 Le « TMR0 » s’incrémentes sur les fronts montant appliqués à la broche « T0CKI » si le bit
« T0SE » est initialisé à « 0 ».
 Le TMR0 s’incrémentes sur les fronts descendant appliqués à la broche « T0CKI » si le bit
« T0SE » est initialisé à « 1 ».
 Peut être utilisé comme « temporisateur » si :
 Le bit « T0CS » est initialisé à « 0 ».
 La broche « RA4/T0CKI/C1OUT » n’est plus utilisée comme broche d’horloge par le « TMR0 »
et cette broche peut être récupérée comme « IO » ou comme sortie du comparateur
« C1OUT ».
 Le bit T0SE n’a pas d’utilité en mode temporisateur:
 TMR0 s’incrémentes sur les fronts montant de l’horloge.

Page 3 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

 Interruption du « TMR0 »:
 Le « T0IF » indique que le registre du TMR0 a débordé.
 Le « T0IF » monte à « 1 » lorsque la valeur du TMR0 passe de « 255 » à « 0 ».
 Le « T0IF » doit être remis à « 0 » dans la routine d’interruption.

 Les bits « T0IE » et « GIE » doivent être tous les deux mis à « 1 ».

Schéma interne de l’interruption T0IF

Schéma interne du « TMR0 »

Page 4 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

Circuit « pre-scaler »

Schéma interne de la broche RA4/T0CKI/C1OUT

Page 5 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

Exemple 1
Créer une onde carrée de 10 KHz à 50% sur la broche « RA0 » avec interruption à partir de l’oscillateur
interne de 2MHz.

Fosc = 2MHz  Le « TMR0 » s’incrément de l’interne à partir de « Fosc/4 »  500KHz.

1 1
1 1 4 ∙T OSC =4 ∙0.5 µs=2 µs= = =2 µs
T OSC = = =0.5 µ s F OSC 500 KHz
F OSC 2 MHz
4
FRA0  10KHz à 50% TRA0  1/ FRA0  1 /10KHz  100µs.
50%  50µs au « Niveau haut » et 50µs au « Niveau bas ».
Pour changer l’état de RA0, combien de comptes le « TMR0 » doit il effectuer pour écouler le délai de 50µs?

50 µs
NombreDeComptes= =25 comptes
2 µs
Doit-on utiliser un « Pre-Scaler »?
Quelles sont les valeurs admissibles pour le registre du « TMR0 »?
 TMR0 est un registre de 8 bits.
 Valeurs acceptées sont {0 … 255}.
 25 comptes à effectuer.
 Pas besoin de pre-scaler.

Valeur de départ du « TMR0 » afin que celui-ci déborde après 25 comptes TMR0 = 256 – 25 = 231

Chaque fois que le TMR0 va déborder, il faut dans la sous-routine d’interruption :


 Tester si c’est le bit « T0IF » qui a interrompu.
 Changer l’état de RA0.
 Réinitialiser le TMR0 à 231.
 Remettre le « T0IF » à « 0 ».

Codes à initialiser :
« user.c » « system.c » « interrupt.c »
ANS0 = 0; //RA0 Digital OSCCON = 0x51; if (T0IF)
TRISA0 = 0; //RA0 Output {
« system.h »
PSA = 1; //Pre 1:1 RA0 =!RA0;
2000000L
T0CS = 0; //FOCS/4 TMR0 =231;
TMR0 =_231; //Initial Value « main.c » TMR0IF =0;
T0IE = 1; //Enable Timer 0 //Rien à faire
GIE = 1; //Interrupt }
INTCON = 0xA0;

Autre méthode pour calculer le nombre de comptes


La fréquence du temps haut recherchée à la broche « RA0 » est de 10KHz et la fréquence qui incrémente le
« TMR0 » est « Fosc/4 » est de 500KHz.

Page 6 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

500 000 Hz
NombreDeComptes= =25 comptes
« user.c » 10 000 Hz « system.c »
« interrupt.c »
TRISA__ = ___; // OSCCON = 0x____;
Exemple 2 //
ANS__ = ___;
if(________)
{
Un système
TRISB__ à infrarouge
= ___; // détecte le passage des caisses de bières sur un convoyeur d’une micro-brasserie.
« system.h » RB1 = __;
TRISB__ ceux
Comme installés sur la maquette __________L
du train. Lorsqu’aucun objet n’est résent entreTMR0 le
= capteur et
= ___; //
__;
RB1 = 1; //
l’émetteur de l’infrarouge le faisceau infrarouge n’est pas coupé. Cela crée un niveau bas=sur
______ __;les broches
INTEDG = __; //
« » et « » toutes deux connectées ensemble au capteur infrarouge. Si le FIN commande
faisceau infrarouge est
RA4
T0CS = __; RB0 // « main.c »
}
T0SE = cela
coupé, __; crée//un front montant sur //
les Afficher
2 [Link] la console if(________)
PSA = __; // // les caisses actuelles
{
PS2 = __; le module du « TMR0 » du PIC16F886 pour changer l’état de « RB1 » à chaque 1000 caisses de
Configurer Caisse++;
PS1
bières produites. Une alarme visuelle//
= __; estAfficher sur la console
alors activée pour
la // fin de la commande
indiquer qu’une production
______ de 1000 caisses est
= __;
PS0 = __;
terminée et prêtre à être chargée dans un camion de livraison. Les fronts descendants sur
}

« RA4/T0CKI/C1OUT
OPTION_REG = 0x____;» incrémentent le « TMR0 » et chaque caisse est comptabilisée sur les fronts montants de
« RB0=».___;
TMR0 À chaque
// passage d’une caisse le compte cumulatif est affiché sur la console. À chaque passage
TMR0IE = __; //
d’une caisse le compte cumulatif est affiché sur la console. Utiliser un oscillateur interne de 8MHz.
INTE = __; //
GIE = __;

INTCON = 0x____;

Solution :
Exemple 3
Créer
Nombreunedefréquence de 1 Hz
comptes pour quesur
le la broche
« TMR0 « TMR0 »
» déborde à partir
______d’interruption
. et de l’oscillateur interne de 8MHz.

Pour
1000 une grande
caisses précision
nécessitent on doit éviter
_________ le nombre
impulsions d’interruptions
à l’entrée de brochecar le temps d’exécution
« RA4/T0CKI/C1OUT » dubesoin
code n’est
d’un
pas considéré»et
« _________ ainsilelaisser
sinon « TMR0le»matériel agir pour écouler le maximum de temps.
va déborder.

Pour que le « TMR0 » déborde après 1000 impulsions, il faut que le « pre-scaler » et le « TMR0 » effectue
exactement 1000 incréments. 1000 impulsions  250 x 4.

« Pre-scaler
Fosc = 8MHz » de
Le «« TMR0
____ »
» et que le « TMR0
s’incrément » déborde
de l’interne aprèsde
à partir comptes
« Fosc/4
____ » TMR0 = 256 - ____ = ____
 2MHz.

Codes à initialiser : 1 1
1 1 4 ∙T OSC =4 ∙0,125 µ s=0 , 5 µ s= = =0 , 5 µ s
T OSC = = =0,125 µs FOSC MHz
F OSC 8 MHz
4
FRA0  1Hz à 50% TRA0  1/ FRB0  1 /1Hz  1s.

50%  500 000 µs au « Niveau haut » et 500 000 µs au « Niveau bas ».

Nombre de comptes à réaliser pour ce délai à partir de la demi-période:

500 000 µs
NombreDeComptes= =1 000 000 comptes
0 , 5 µs
Nombre de comptes à réaliser pour ce même délai à partir de la fréquence de la demi-période:
La fréquence du temps haut recherchée à la broche RB0 est de 2 Hz et la fréquence qui incrémente le TMR0
« Fosc/4 » est de 2M Hz.

Page 7 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

2 000 000 Hz
NombreDeComptes= =1 000 000 comptes
2 Hz
Nombre d’interruption si aucun « Pre-Sacler » :

1000 000
NombreInterrupt= =3906 , 25interruptions
1 :1∗256
Trop souvent en interruption  Besoin de « Pre-Scaler ».

Étape 1 :
Choix du plus grand « Pre-Scaler » de « 1:256 ».

1 000 000
NombreInterrupt= =15.25interruptions  Moins souvent en interruption.
256∗1:256
Temps réel écoulé :

Durée=15 ∙256 ∙ ( 1 :256) ∙ 0.5 µ s=491 520 µs


Il manque :

Dur é e manquante=500 000 µs- 491 520µs ¿ 8480 µ s


Nombre de comptes restants :

8480 µs
NombreDeComptes= =16960 comptes
0.5 µs
Étape 2 :
8480 µs
Choix du second « Pre-Scaler » : Pre−Scaler= =66.25
256∙ 0.5 µs
Choix du « Pre-Scaler » de « 1 :64 » car le « Pre-Scaler » « 1∶66¼ » n’existe pas.

8480 µs
NombreInterrupt= =1.0355 interruption
256 ∙0.5 µs∙ 1: 64
Temps réel écoulé :

Durée=¿ 1 ∙ 256∙ (1 :64) ∙ 0.5 µ s=8192 µs


Il manque :

Dur é e manquante=¿ 8480µs-8192µs ¿ 288 µ s


Nombre de comptes restants :

288 µs
NombreDeComptes= =576 comptes
0.5 µs

Page 8 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

Étape 3 :
288 µs
Choix du troisième « Pre-Sclaer » : Pre−Scaler= =2.25
256∙ 0.5 µs
Choix du « Pre-Scaler » de « 1:2 » car le « Pre-Scaler » « 1∶2¼ » n’existe pas.

288 µs
NombreInterrupt= =1.125interruption
256 ∙0.5 µs∙ 1: 2
Temps réel écoulé :

Durée=¿ 1 ∙256 ∙ (1 :2) ∙ 0.5 µ s=32 µs


Il manque encore  Durée manquante=¿ 288 µs – 256 µs ¿ 32 µs
Nombre de comptes restants :

32 µs
NombreDeComptes= =64 comptes
0.5 µs
Étape 4 :
Choix du dernier « Pre-Scaler » de «  1:1 » car le « TMR0 » peut compter jusqu’à 256.

Temps réel écoulé :

Dur é e=¿ 1 ∙ ¿64) ∙ (1 :1) ∙ 0.5 µ s=32 s µ s


Dur é e manquante=¿ 32 µs -32 µs ¿ 0 µ s
Le TMR0 doit démarrer à 256 - 64  192.

Page 9 sur 10
Cours 2 Temporisateur/Compteur Zéro Section 5

Étapes séquentielles à programmer :

Étape Pre-Saler Débordements Valeur de Calculs du délai Durée écoulée


Interruptions départ du TMR0
1 1 :256 15 0 256 x 0.5µs x 1:256 491 520 µs
2 1 :64 1 0 256 x 0.5 µs x 1:64 8 192 µs
3 1 :2 1 0 256 x 0.5 µs x 1:2 256 µs
4 1 :1 1 192 64 x 0.5 µs x 1:1 32 µs
18 500 000 µs

Si à l’étape 2 on utilise encore un « Pre-Scaler » de « 1:256 » au lieu d’un « Pre-Scaler » de « 1:64 » mais que
la valeur de départ du « TMR0 » ne débute pas à 0 alors :

Nombre de comptes restants :

500 000−491520 µs 8480 µs


NombreDeComptes= = =16 960 comptes
0.5 µs 0.5 µs
Nombre de comptes du TMR0 :

16 960 comptes
=66.25 comptes
1 :256
Temps réel écoulé :

Durée=¿ 66 ∙ (1 :256) ∙ 0.5 µ s=8448 µs  Le « TMR0 » doit démarrer à 256 - 66  190.


Il manque encore:

Dur é e manquante=¿ 8480 µs- 8448 µs ¿ 32 µ s


Nombre de comptes restants :

32 µs
NombreDeComptes= =64 comptes
0.5 µs
Choix du dernier « Pre-Scaler » de « 1 :1 » car le « TMR0 » peut compter jusqu’à 256.

Temps réel écoulé :

Dur é e=¿ 1 ∙ ¿64) ∙ (1:1) ∙ 0.5 µ s=32 µ s Dur é e manquante=¿ 32 µs - 32 µs ¿ 0 µ s


Le « TMR0 » doit démarrer à 256 - 64 à 192.

Étap Pre-Saler Débordements Valeur de départ Calculs du délai Durée écoulée


e Interruptions du « TMR0 »
1 1 :256 15 0 256 x 0.5 µs x 1:256 491 520 µs
2 1 :256 1 190 66 x 0.5 µs x 1:256 8 448 µs
3 1 :1 1 192 64 x 0.5 µs x 1:1 32 µs
17 500 000 µs
Cela sauve une interruption et augmente la précision car le temps d’exécution du code est négligé.

Page 10 sur 10

Vous aimerez peut-être aussi