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
================= 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é .
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'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
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
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 !
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.
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.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.