je dois mesure le temps entre 2 impulsions sur RB0 avec un pic 16F877, je ne vois pas comment je pourrais utiliser le timer du PIC.
Merci
-----
11/05/2008, 17h00
#2
RISC
Date d'inscription
novembre 2006
Messages
3 793
Re : mesure de temps par PIC
Salut,
Tout dépend de la période minimale (?) que tu dois mesurer et de la précision que tu veux (horlgoe du micro = ?).
Le plus simple est d'utiliser le mode capture sur l'unité CCP avec le timer1: broche RC2/CCP1 ou RC1/CCP2.
Voir le cours de Bigonoff pour la façon d'utiliser cette unité qui mesure directement la période (fréquence) : www.bigonoff.org
Si tu ne peux vraiment pas chnager de broche, il faudra faire cela par soft...c'est simplement moins facile, moins précis et cela demande un peu plus de resources CPU. Evidemment si ta période est longue cela ne pose aucun PB...
a+
Dernière modification par RISC ; 11/05/2008 à 17h02.
Motif: addition
11/05/2008, 17h03
#3
invite2dd783e8
Date d'inscription
janvier 1970
Messages
13
Re : mesure de temps par PIC
la période minimale est de 20 ms, ça peut tenir?
11/05/2008, 18h00
#4
RISC
Date d'inscription
novembre 2006
Messages
3 793
Re : mesure de temps par PIC
Salut,
De quelle précision as-tu besoin (en % ou us/ms) ?
Quel oscillateur utilises-tu ? RC, quartz, résonnateur céramique, TCXO ?
a+
Aujourd'hui
A voir en vidéo sur Futura
12/05/2008, 12h51
#5
invite2dd783e8
Date d'inscription
janvier 1970
Messages
13
Re : mesure de temps par PIC
J'utilise un résonateur à quartz et l'ideal serait une précision de 2 ms au plus
12/05/2008, 14h18
#6
RISC
Date d'inscription
novembre 2006
Messages
3 793
Re : mesure de temps par PIC
Salut,
2ms de précision ne pose absolument aucun problème et tu peux faire cela par logiciel sur la broche RB0.
La méthode est la suivante (je prends l'exemple : de la mesure entre 2 fronts montants sur RB0)
Initialiser le timer à 0
Tu fais une boucle qui scrute le front montant sur RB0
---> RB0haut1 : RB0 = 1?
Non --> goto RB0haut1
Oui --> lancer timer
RB0bas : RB0 = 0?
Non --> goto RBbas
Oui on continue ci-dessous
Tu fais une 2e boucle qui scrute le 2e front montant sur RB0
---> RB0haut2 : RB0 = 1?
Non --> goto RB0haut2
Oui --> lire la valeur du timer (timer_valeur)
Et tu as timer_valeur x periode du timer = temps entre fonts montants
Pour le timer tu peux choisir timer 0, 1 ou 2 en fonction de la précision et de la simplicité que tu souhaites et de la fréquence de ton quartz
timer1 est un bon candidat car il est sur 16 bits et possède un prediviseur par 8.
Timer2 est également une autre possibilité (pre et postdiviseur par 16).
En effet, en admettant que tu utilises la frequence max Fosc=20MHz, tu as donc Fcy= 5MHz (tcy = 200ns).
Si tu veux mesurer avec une précision de 1ms il faut donc diviser par 5000 ce qui est nettement > 256 (division sur 8 bits). Le timer 1 ou le timer2 avec ses prescalers font le job.
Attention : la méthode ci-dessus ne gère pas le dépassement tu timer (temps max entre 2 impulsions > temps max du timer). Si cela est possible il faut alors compliquer un peu le soft et gerer le depassement pas logiciel.
NB : si tu n'as pas oblige d'utiliser RB0 (comme expliqué dans un de mes posts précédents) je te recommande l'utilisation de l'unité CCP beaucoup plus simple à mettre en oeuvre et beaucoup plus efficace en terme de programmation.
a+
PS : tu programmes en C ou en assembleur ?
Dernière modification par RISC ; 12/05/2008 à 14h21.
Motif: addition
13/05/2008, 13h01
#7
invite2dd783e8
Date d'inscription
janvier 1970
Messages
13
Re : mesure de temps par PIC
merci beaucoup pour les indications. Je programme en assembleur.
Aussi, J'ai un autre problème; j'ai omis de dire que mon programme est censé faire d'autres choses à la fois, notamment faire afficher régulièrement une vitesse calculée à partir de cette période. Donc je dois utiliser les interruptions je suppose?
13/05/2008, 13h16
#8
invite2dd783e8
Date d'inscription
janvier 1970
Messages
13
Re : mesure de temps par PIC
De plus, j'ai vu sur la datasheet que le timer 2 est codé sur 8 bits. Je n'aurai donc pas choix sur le timer