Bonjour,
je suis en train de réaliser un chronomètre avec un afficheur (contrôleur HD44780 - 20x4 caractères) et un PIC16F877A en C (avec MPLAB et HI-TECH C Compiler for PIC10/12/16 MCUs).
J'utilise un quartz à 4 Mhz.
Je voudrais faire un chrono précis au millième de seconde
J'ai vu ce post :
http://forums.futura-sciences.com/el...ic-16f877.html
Il est question de l'utilisation du Timer1 (16 bits) or je rencontre un problème...
le chrono défile un peu trop lentement... (dérive de 2 secondes environ sur 1 minute !)
J'utilise les interruptions... donc je pensais que je pouvais faire quelque chose de très précis.
Déjà premier truc que je ne comprends pas :
// Timer 1 (16 bits) utilisé pour l'horloge
// Quartz 4 Mhz =>1 instruction = 1 µs
pour moi c'est 0.25 µs pas 1 ?
ensuite pour obtenir un précision de 1ms j'ai mis une interruption toutes les 0.1 ms et j'ai fait le calcul suivant :
hh désigne les heures ; mm les minutes ; ss les secondes et ; xx les 0.1msCode:xx++; if (xx==10000) { xx=0; ss++; if (ss==60) { ss=0; mm++; if (mm==60) { mm=0; hh++; if (hh==24) { hh=0; //dd++; } } } }
est-ce une bonne idée de travailler à une période inférieure à la précision souhaitée ?
Voici l'initialisation du timer1
j'effectue l'affichage dans la boucle infini (pas dans une interruption à part avec le timer0 par exemple) - est-ce une bonne idée ?Code:T1CON = 0x00 ; // Prédivision de l'horloge par 1 TMR1H = 0xFF; TMR1L = 0x9B; // 100us=0x9B 10us=0xF5 // 0xC1 ; // 0xFFFF - 0xFFC1 = 62 => 62 x 1 µs = 62 µs TMR1ON = 1 ; // On lance le timer 1 TMR1IE = 1 ; // On autorise les interruptions du timer 1 // Autorisation des interruptions PEIE = 1 ; // Autorisation des IT peripherique GIE = 1 ; // Autorisation général des IT
Que me suggéreriez-vous pour tester précisément la dérive dans le temps (je dispose d'un oscilloscope) ?
bref comment rendre mon chronomètre plus "crédible".
Merci d'avance
-----