Le PIC16F84 Exemples
◘
Utilisation du Timer
Le PIC16F84 possède un TIMER 8 bits qui peut être utilisé en compteur d'évènements Le
programme suivant utilise ce timer pour mesurer le temps s'écoulant entre deux évènements
rapprochés.
Le fil RA0 est mis à 1
Fosc/4 Bus par une résistance de
pull up , il est relié
0 Synchro
Ra4 TOIF également à un
1
1 conducteur ( une
Préscaler 0 pointe de touche ) que
TMR0 l'on peut amener
T0SE brièvement en contact
PSA
T0CS avec une plaque reliée
PS2-PS1-PS0 à la masse. On pique
rapidement la plaque et
TOCS TOSE PSA Ps2 Ps1 PSO OPTION_REG le but est de mesurer la
0 0 0 1:2 durée du contact
Taux de 0 0 1 1:4
division 0 1 0 1:8
du 0 1 1 1:16
prescaler 1 0 0 1:32
1 0 1 1:64
1 1 0 1:128
1 1 1 1:256
La structure du circuit
Timer0 est reproduite ci-dessus .Les bits de commande sont placés dans le registre OPTION_REG (
le nom OPTION seul n'est pas admis car c'est le nom d'une instruction du PIC16C54 ) d'adresse 81H ,
donc situé en page 1 .
Avec une prédivision par 256 l'affichage de durée se fait en multiples de 256µS .
Ci-dessous la partie du programme concernant le Timer est en noir.
title'exemple3'
list p=16F84,F=INHX8M
#include "[Link]"
__CONFIG H'3FF1'
;le mot OPTION qui est une instruction du PIC16F54
;ne peut pas être utilisé , ce registre porte
;donc le nom OPTION_REG
org 0
BSF STATUS,RP0 ;page 1
CLRF TRISB ;Portb en sortie
MOVLW 0xFF
MOVWF TRISA ;PortA en entrée
;Le registre OPTION_REG est en page 1 ,je reste donc en page 1
;
MOVLW B'01110111'
MOVWF OPTION_REG ;Pull up en place sur PB
;T0CS=1,T0SE=1,PSA=0,(Prescaler),
;PS2-PS1-PS0=111 division par 256
BCF STATUS,RP0 ;retour en page 0 , car TMRO est en page 0
CLRF TMR0 ;RAZ du compteur interne
MOVLW 0xFF
MOVWF PORTB ;affichage FF en attente de comptage
CONTACT BTFSC PORTA,0
GOTO CONTACT ;boucle sans fin tant que RA0 est au 1
BSF STATUS,RP0 ;retour en page 1
BCF OPTION_REG,T0CS ;source quartz divisé par 4 soit 1Mhz
;départ comptage Timer
FINCONTACT BCF STATUS,RP0 ;page 0
BTFSS PORTA,0 ;boucle en attendant retour au 1
GOTO FINCONTACT
1
Le PIC16F84 Exemples
◘
MOVF TMR0,0 ;lecture compteur interne dans W
MOVWF PORTB ;affichage sur PortB
STOP GOTO STOP ;pour une nouvelle mesure
;il faut relancer le programme.
end
On notera sans doute que le résultat de la mesure est souvent zéro alors que de contact
dure apparemment beaucoup plus, ceci est du à des rebonds de contact. La pointe rebondit sur la
plaque et le niveau sur l'entrée RA0 remonte à 1 au bout de moins d'une milliseconde avant de
redescendre à 0. Le programme qui est conçu pour s'arrêter dès le retour à 1 indique ainsi une durée
faible , souvent nulle. Ces rebonds de contacts peuvent être évités en plaçant un condensateur en
parallèle , mais il est moins coûteux de le traiter de façon logicielle.
Le montage permet d'étudier la durée du premier rebond en diminuant le taux de division du
prédiviseur.