Ik heb hier een projectje waarbij ik voor menu navigatie gebruik maak van een rotary encoder. Die lees ik uit via een poort B0/INT interrupt, waarin ik dan de 2e "fase" van de encoder check. Het probleem is echter dat de microcontroller op willekeurige momenten crasht (16F876) op het moment dat ik de rotary encoder verdraai. Hij reset zich dan volledig naar het begin van het programma. Dit is niet na een vast aantal rotaties oid. Soms crasht hij bij een eerste "klik", de andere keer gaat het 5 minuten lang goed. De rest van het programma werkt wel perfect.
Hier is de ISR voor B0/INT:
static void interrupt isr(void) {
//B0/INT interrupt
if(INTF) {
tmrDly = 0;
sleepMinutes = 0;
doWake = 1;
if(rotPh2) {
rotDir = ROTUP;
} else {
rotDir = ROTDOWN;
}
INTF = 0;
}
}
Zelfs met een "lege" interrupt crasht de microcontroller na enige tijd spelen met de rotary encoder:
static void interrupt isr(void) {
//B0/INT interrupt
if(INTF) {
INTF = 0;
}
}
Verder is er nog een tmr0 en een UART receive interrupt. Het uitschakelen + verwijderen van beide heeft geen effect op het crashgedrag. Dat blijft doorgaan.
Iemand enig idee waar dit aan kan liggen?