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.