Bonjour à tous. Je souhaite réaliser une horloge grâce à mon PIC 16F877A. J'aimerai avoir vos avis et vos suggestions d'améliorations sur ce programme.
Je programme mon pic en langage C avec mikroC.
Il est cadencé avec un quartz de 8Mhz. Cela donne 2 millions de cycles par seconde. On déduit donc qu'un cycle d'horloge dure 500ns. A partir de cela on sait que l'on aura une interruption toutes les 128µs. Jusque la je pense avoir bon.
On utilise TMR0 en timer donc on met le bit T0CS à 0. Ensuite je choisi 32 comme prédiviseur donc je met le bit PS2 à 1.
Ce qui nous donne:
* une interruption toute les 4096µs
* 244 interruptions nous donnerons une base de temps de 999424µs
* il nous manque donc 576µs
Cela est-il correct?
Voici mon programme:
unsigned char cpt=0; //compteur d'interruption
unsigned char sec=0; //variable pour stocker les secondes
unsigned char txt[7]; // variable pour afficher les secondes
void interrupt() {
cpt++; // incrémentation du compteur de dépassement
INTCON.F2=0; //on remet à 0 le bit TMROIF
}
int main (void){
INTCON = 0xA0; //GIE à 1, PEIE à 1, TMROIE à 1
OPTION_REG = 0x04; //tmr0 réglé en oscillation interne et prédiviseur=32
LCD_Init(&PORTD); // Iinitialisation de l'ecran LCD connecté au portD
LCD_Cmd(LCD_CLEAR); // ecran lcd effacer
LCD_Cmd(LCD_CURSOR_OFF); // pas de curseur d'afficher
do {
if (cpt>243) { // cpt > 243 ??
IntToStr(sec,txt); // conversion de sec (int) en chaine de caracteres
LCD_Out(1,1,txt); // affichage des secondes
sec++; // on incrémente les secondes
cpt=0; // remise à 0 du compteur
}
} while(1);
return (0);
}
Voila! Donc pour chaque seconde on a une erreur de -576µs. Il est possible de la corriger en ajoutant par exemple une seconde au bout d'un certain temps. Sinon y a t-il un autre moyen pour corriger cela? Y a t-il autre chose a prendre en compte (qui modifie la précision)?
Merci a ceux qui ont suivi.
-----