![]() |
1) Programme en langage C.
2) La modulation en largeur d’impulsion.
Afin
de rendre les interruptions régulières,
il a été nécessaire d’utiliser un compteur : le timer0. Celui-ci compte
les cycles d’horloge du PIC jusqu’à 255 puis lève un drapeau, un flag,
d’avertissement : il est en mode timer.
a) Registre tmr0 :
Il contient le nombre de cycles de l’horloge du PIC
compté. Arrivé à 255, il recommence normalement à 0 mais nous avons décidé de
le remettre à 6 pour compter 250
impulsions d’horloge.
b) Registre option_reg :
- T0CS=0, pour configurer le timer0 en mode timer (Tmr0
Clock Source select bit).
- RBPU=1, INTEDG=0, T0SE=0, car ces fonctions ne sont
pas utilisées pour le timer.
- PSA=0, pour affecter le prédiviseur au timer0.
- PS2:PS0=0b001, le prédiviseur a une valeur de 4.
On obtient donc option_reg=0b10000001 d’où option_reg=0x81.
c) Registre intcon :
- GIE=0, Global Interrupt Enable bit : autorise
les interruptions.
- T0IE=1, pour autoriser les interruptions du timer 0.
- Les autres bits sont à 0 car ils ne sont pas utilisés.
On obtient donc intcon=0b10100000 d’où intcon=0xA0.
Explication du choix
d’un prédiviseur d’une valeur de 4 :
Nous utilisons un quartz de 4 MHz. Le timer0 divise
automatiquement la fréquence de l’horloge par 4. On a donc initialement une
fréquence de 1 MHz (4 MHz / 4).
Le prédiviseur est à 4 donc on a une fréquence de 250
kHz (1 000 kHz / 4). La période est de 4 µs (T=1 / 250 kHz).
Il faut donc 4 µs * 250 (nombre d’impulsions à
compter), soit 1 ms, pour que le timer déborde et donc créer une interruption.
La fréquence de la période de 10 interruptions est donc de 100 Hz (f=1 / 1 ms)
ce qui n’est ni trop élevé ni trop bas pour régler la vitesse des moteurs.
Sommaire |