Hallo zusammen,
beim Programmieren eines ATMEGA8 habe ich gerade einen Effekt festgestellt, für den ich auch im Datenblatt keine Erklärung gefunden habe.
Die Programmierung :
INT0 ist konfiguriert, auf die fallende Flanke zu reagieren. In dessen ISR passiert folgendes :
01. INT0 ausschalten, indem GICR auf 0 gesetzt wird
02. Timer1 in Gang setzen, indem dessen Prescaler aktiviert wird (TCCR1B auf 3)
03. eine LED an PORTC einschalten (nur zur Funktionskontrolle)
Timer1 ist auf Overflow eingestellt und dessen ISR sieht wie folgt aus :
11. Timer ausschalten, indem dessen Prescaler deaktiviert wird (TCCR1B auf 0)
12. INT0 wieder einschalten (GICR setzen)
13. die LED an PORTC ausschalten
In Betrieb sieht das dann so aus, dass mit einer fallenden Flanke an INT0 die LED leuchtet und nach ca. 0,5s wieder verlischt. So soll das auch sein.
Aber : Gibt es während die LED leuchtet eine fallende Flanke (oder auch mehrere), dann wird der INT0 nach dessen Reaktivierung (in der Timer1 ISR) sofort ein zweites Mal ausgeführt.
Ich ging davon aus, dass bei abgeschaltetem INT0 auftretende Flanken ignoriert werden. Aber das ist offenbar nicht der Fall. Eine Flanke scheint er sich zu "merken". Und das ist auch kein ATMEGA8-Phänomen - der ATTiny24 verhält sich ebenso.
Hat jemand eine Ahnung, wie der Effekt zustande kommt ?
Danke.
beim Programmieren eines ATMEGA8 habe ich gerade einen Effekt festgestellt, für den ich auch im Datenblatt keine Erklärung gefunden habe.
Die Programmierung :
INT0 ist konfiguriert, auf die fallende Flanke zu reagieren. In dessen ISR passiert folgendes :
01. INT0 ausschalten, indem GICR auf 0 gesetzt wird
02. Timer1 in Gang setzen, indem dessen Prescaler aktiviert wird (TCCR1B auf 3)
03. eine LED an PORTC einschalten (nur zur Funktionskontrolle)
Timer1 ist auf Overflow eingestellt und dessen ISR sieht wie folgt aus :
11. Timer ausschalten, indem dessen Prescaler deaktiviert wird (TCCR1B auf 0)
12. INT0 wieder einschalten (GICR setzen)
13. die LED an PORTC ausschalten
In Betrieb sieht das dann so aus, dass mit einer fallenden Flanke an INT0 die LED leuchtet und nach ca. 0,5s wieder verlischt. So soll das auch sein.
Aber : Gibt es während die LED leuchtet eine fallende Flanke (oder auch mehrere), dann wird der INT0 nach dessen Reaktivierung (in der Timer1 ISR) sofort ein zweites Mal ausgeführt.
Ich ging davon aus, dass bei abgeschaltetem INT0 auftretende Flanken ignoriert werden. Aber das ist offenbar nicht der Fall. Eine Flanke scheint er sich zu "merken". Und das ist auch kein ATMEGA8-Phänomen - der ATTiny24 verhält sich ebenso.
Hat jemand eine Ahnung, wie der Effekt zustande kommt ?
Danke.