Bonjour à tous,
Petite colle du jour :
J'utilise un timer (TMR0) sur mon PIC 18F45K20 qui à chaque débordement provoque une interruption (priorité haute).
Avec MPLAB (debugger MPLAB SIM) je calcule à quelle valeur j'initialise mon compteur pour qu'à 10Mhz je compte pile 1 msec.
Je simule avec MPLAB SIM, ça marche parfaitement, 0 décalage, même pas 1 nano sec sur plus de 100msec.
Je me suis aperçu qu'en mettant ne serait-ce qu'un "delay" dans ma boucle "while(1)", j'ai un décalage aléatoire qui apparait sur mon timer.
Exemple (valeurs en msec) :
1.000000
2.000000
3.000400
4.000400
5.000400
6.000400
7.000400
8.000400
9.000400
10.000800
Vous allez me dire c'est rien mais pour un chronomètre qui se veut précis au millième ça m'embête un peu. Surtout qu'il y a bien un raison à ce comportement ...
Quelqu'un à une idée ?
EDIT, mon interruption :
Code:void InterruptServiceHigh(void) { // ISR-Timer0 if(INTCONbits.TMR0IE && INTCONbits.TMR0IF) { INTCONbits.TMR0IF = 0; // Breakpoint pour debug à ce niveau là TMR0L = 101; // Preset timer0 ++counter; } }
-----