Je cherche à faire tourner une routine durant 2 secondes indépendament du nombre de cyles contenus dans cette routine.
Merci pour votre attention
Eric
-----
10/05/2003, 21h04
#2
invite67d96d45
Date d'inscription
janvier 1970
Messages
466
salut l'ami,
Cela n'a aucun rapport avec ta question, mais je le demande quand même !
Tu es prof de technologie ???
Car si tel est le cas, j'aimerai des infos, car je veux le devenir !
Merci !!
11/05/2003, 01h01
#3
JP
Date d'inscription
février 2003
Localisation
Strasbourg
Messages
1 659
Salut prof2techno,
Je crois que tu peux utiliser un timer.
C'est une horloge qui tourne en parallele avec ton programme.
Le probleme c'est les 2s c'est quand meme long.
Faut voir la doc du pic que tu utilise.
J'espere avoir repondu à ta question
11/05/2003, 10h28
#4
Jack
Modérateur
Date d'inscription
avril 2003
Localisation
Metz
Messages
17 787
salut,
je ne connais pas les PIC mais c'est pareil avec tous les microcontrôleurs:
on génère une interruption à l'aide un des timers internes et si la tempo n'est pas assez longue, le programme d'interruption décrémente une variable interne en RAM. Lorsque la valeur atteind 0, la tempo est terminée.
Une autre solution consiste à mettre un compteur en 'cascade' avec le timer.
A+
Aujourd'hui
A voir en vidéo sur Futura
12/05/2003, 09h47
#5
Pierrre
Date d'inscription
février 2003
Localisation
Amiens
Messages
2 500
Bonjour
il faut se servir du timer.
pour le 16f84, l'horloge du timer peut etre interne (oscillateur du pic avec predivision programmable) ou externe .
2 secondes, c'est en effet assez long, et a moins de faire fonctionner le pic a tres faible vitesse (c'est possible sur un pic) et d'utiliser l'horloge interne , il me semble plus adapte d'utiliser une horloge externe.
Si on met un compteur en cascade, il faut alors tenir compte du temps d'execution des instructions.
Voir le cours de Bigonoff .... une mine de renseignements utiles !
A+
12/05/2003, 10h30
#6
invite32bb90e8
Date d'inscription
janvier 1970
Messages
268
Envoyé par Pierrre
Bonjour
il faut se servir du timer.
...
Si on met un compteur en cascade, il faut alors tenir compte du temps d'execution des instructions.
Effectivement, le plus simple est de se servir du Timer (avec horloge interne) et de ses interruptions. A chaque interruption, tu decrémentes un compteur qui lorsqu'il est arrivé à zéro signale la fin du temps. Le fait d'utiliser l'interruption permet de ne pas avoir à tenir compte du temps des instructions, car le timer repasse à zéro automatiquement dès qu'il déborde et donc il recommence à compter même pendant qu'on traite l'interruption.
Avec un quartz à 4MHz, 2secondes représentent 2 x 10^6 cycles. Avec un prescaler reglé à 1/256 pour le timer, cela fait 7812 cycles. Si le timer est 16 bits, c'est faisable en une seule interruption. Si le timer est 8 bits, il faut 30 interruptions.
Hope it helps ...
Marc
12/05/2003, 11h08
#7
Pierrre
Date d'inscription
février 2003
Localisation
Amiens
Messages
2 500
ops: exact, pas besoin de compter le temps d'execution des instructions...
16f84 timer 8 bits
A+
13/05/2003, 13h11
#8
inviteab233b68
Date d'inscription
janvier 1970
Messages
17
OK merci à tous pour vos conseils.
J'avais pensé à cette solution avec le timer mais je débute et je ne me sens pas encore assez à l'aise donc j'ai réfléchi à une autre solution :
pour faire tourner mon servomoteur, je génère un train d'impulsions séparées par 20 ms donc si j'incrémente un compteur à chacune de ces impulsions et que je connais le nombre d'impulsions en 2s ...
Qu'en pensez vous ?
Merci
Eric
13/05/2003, 13h55
#9
invite32bb90e8
Date d'inscription
janvier 1970
Messages
268
Bah oui c'est exactement ça qu'il faut faire. 20msec c'est une très bonne base de temps pour 2sec (100 fois).
Fallait le dire que tu disposais déjà de 20msec ...
Bravo !
Marc
13/05/2003, 15h23
#10
inviteab233b68
Date d'inscription
janvier 1970
Messages
17
OOOPPPSS
C'est vrai qu'en relisant j'avais complètement oublié de donner l'application de mon montage...