Je debute dans le monde des microcontroleurs ,j'ai reussi a mettre en place le timer1 mais je n'arrive pas a trouver les bonnes valeurs Ce projet est un chrono precis au 1/100 de secondes J'utilise MikroC comme compilateur Si quelqu'un pourrait arranger sa
formatting link
Merci d'avance
Didn't find your answer? Ask the community — no account required.
M
moi-meme
Le Sun, 11 Apr 2010 07:18:18 -0700, bigboss59400 a écrit :
je crois qu'il y a un problème de couper/coller : adresse invalide
B
bigboss59400
Ah en effet DSL ,je viens de regler sa
formatting link
M
maioré
"bigboss59400" a écrit
================= La précision ne dépendra que du quartz , en choisissant un modèle de type "IOXO- xx " d'une fréquence maximum possible pour le µC la précision sera correcte. La meilleur précision étant assurée par un boîtier quartz thermostaté .
B
bigboss59400
maximum
tat=E9 .
Oui,sa je le sais pour le quartz moi je parlais des valeurs a definir dans mon code source car je n'arrive pas a trouver les bonnes
Si toi ou quelqu'un pouvez corrige sa
Cordialement
L
LeLapin
Ben justement, ça dépend du quartz.
LeLapin
M
maioré
Oui,sa je le sais pour le quartz moi je parlais des valeurs a definir dans mon code source car je n'arrive pas a trouver les bonnes ============= Valeur ? As-tu déjà déjà commencé à écrire le programme , et dans quel langage ?
J
Jean-Christophe
On Apr 11, 8:20=A0pm, bigboss59400
Syntax error
J
Jean-Christophe
On Apr 11, 4:42=A0pm, "maior=E9"
tat=E9 .
Avec une bonne paire de chaussettes.
B
bigboss59400
J'ai compris la precision vient que du quartz mais moi mon probleme c'est que je n'arrive pas a configurer le timer1 pour qu'il fasse des interruptions toutes les 1/100 secondes
Mon programme tourne mais il n'a surement pas les bonnes valeurs car sur mon LCD je vois les 1/10 de secondes defiles comme des secondes
Il doit y avoir 5 valeurs en tout a changer(voir commentaire de mon programme)accesible ici
formatting link
Merci d'avance
J
jeanyves
un tres bon programme gratuit pour connaitre le valeurs des timers des pics...
formatting link
attention, il y a un bug il faut mettre la date de l'ordi en 2009 sinon il dit "version expirée" ... et il n'y en a pas de nouvelle !
-
Jean-Yves
J
Jean-Christophe
On Apr 12, 9:11 am, bigboss59400
Je n'ai pas la doc du 16F887 sous la main, mais ce serait plus enrichissant pour toi de comprendre ce qui se passe et de faire toi-meme la correction. A commencer par ces trucs louches dans main()
sec++; if ( sec =3D=3D 59 ) sec=3D0;
Donc apr=E9s 58 tu passes =E0 z=E9ro ? Faudrait pas plutot comparer =E0 60 ? if ( ++sec >=3D 60 ) sec=3D0; ( meme remarque pour les minutes )
Quand au timer, tu sais que son horloge est d=E9riv=E9e de l'horloge du PIC, suivie de diviseurs. [osc] ->- [pr=E9diviseur] ->- [diviseur] ->- [timer]
Tu dois donc (1) Connaitre la fr=E9quence du quartz. (2) Connaitre la valeur du pr=E9diviseur. (3) Param=E9trer le diviseur du timer. De facon =E0 r=E9armer la valeur du timer pour qu'il tombe par exemple toutes les millisecondes. Et c'est dans la routine d'interruption void interrupt() que tu incr=E9mentes les variables, pas dans le main()
Voici un exemple de code 18F2455 d'interruption pour une horloge =E0 10 ms avec un quartz =E0 16 Mhz : on a Fosc =3D 48 Mhz et 12 Mips
"bigboss59400" a écrit dans le message de news: snipped-for-privacy@w42g2000yqm.googlegroups.com...
================= Le timer 1 ne convient pas trop pour générer une interruption si courte car même à 20 Mhz le temps entre deux interruptions (prescaler 1) est de
65536*0.002=13.107 ms Par exemple pour incrémenter chaque seconde il faudrait 1/0.013 = 76 interruptions Ps possible donc pour une interruption de 1/100 s (76/100 ! ).....
D'autre part l'affichage d'un LCD est trop lent pour afficher les dixièmes de seconde
J
jlp
"bigboss59400" a écrit dans le message de news: snipped-for-privacy@v20g2000yqv.googlegroups.com...
formatting link
bonsoir quelques remarques:, d'ordre general, ne connaissant pas ton pic ne faut il pas declarer la variable cnt en volatile ?
le if (cnt = 55536) est une affectation, il faut mettre ==, et il vaut mieux mettre if (cnt >= 55536)
ensuite il faut comparer sec a 60, idem pour minute
C
cLx
Bonsoir,
En fait dans ce genre de cas, j'écris directement une valeur de départ dans le timer (au lieu de zero), ça coûte pas grand chose de plus et ça permet d'être précis au cycle près !
-- cLx
S
SansNom
Le 11/04/2010, bigboss59400 a supposé :
formatting link
Bjr,
Alors, on en a assez de abc (satm....) ?
avec le timer 1 il faut le réinitialiser à chaque utilisation !
Il n'est pas très fiable.
Le mieux est d'adjoindre un pcf8583 avec un quarts en i2c
sinon se debrouiller avcec cela :
formatting link
et un quartz de 11.0592 mhz ca aide bien (voir sélectronic)
Cordialement
S
Stan
Un timer pas tr=E8s fiable ? Voil=E0 qui excite ma curiosit=E9...
--
-Stan
S
SansNom
En complétant ma dernière phrase par "de ce fait" c'est plus complet.
Comme il faut le ré-initialiser à chaque fois, et que l'on n'est pas très maître de ce qui se passe entre "chaque", la précision n'est de ce fait pas très fiable.
J
Jean-Christophe
On May 6, 10:47 am, SansNom
Pour etre fiable et pr=E9cis, le timer va d=E9clencher une interruption de haute priorit=E9 afin d'=E9viter que le programme soit interrompu lors de la r=E9initialisation. Dans ton exemple, il me semble que ce n'est pas la fiabilit=E9 du timer qui soit en cause.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.