Andreas schrieb:
> Das Problem ist, dass jedesmal wenn der INT0 ausgelöst wird scheinbar
> ein Reset ausgeführt wird.
Vorbemerkung: Ich bin eher Anfänger als Profi bei der Programmierung von
Mikrocontrollern. Also sorry, wenn ich falsch liege.
Das Problem scheint für mich eher zu sein, dass der Controller-Reset
dann ausgelöst wird, wenn ein "Interrupt-Overrun" ausgelöst wird,
wodurch der Programmstack blitzschnell überläuft.
Leider überblicke ich Deinen cryptischen Code nicht so ganz, ich kenne
"nur" die Arduino-Plattform, wo fast alles in sprechende C-Routinen
gekapselt ist, aber ich meine zu erkennen, dass Du innerhalb der
Interrupt-Routine Text an die serielle Konsole ausgibst, korrekt?
Hast Du Dir schon mal ausgerechnet, wie lange die Textausgabe innerhalb
der ISR-Routine benötigt und wie schnell der nächste Interrupt ausgelöst
wird?
Darfst Du überhaupt "gefahrlos" die serielle Schnittstelle von einer
Interrupt-Routine aus ansprechen? Auf der Arduino-Plattform funktioniert
das zwar (entgegen der Beschreibung), wenn die Interrupts langsam genug
kommen, aber wenn die Textausgabe länger braucht als der nächste
Interrupt zum Feuern, dann knallt es blitzschnell. Ich glaube, die
Atmegas unter der Arduino-Plattform hängen dann in einer Dead-Lock
Dauerschleife fest statt ständig zu resetten.
Ich würde das mit der Textausgabe an die Schnittstelle innerhalb der
Interrupt-Routine mal ganz dringend weglassen.
Zähle stattdessen in der ISR nur den Counter hoch, nichts weiter! So
dass die ISR blitzschnell wieder beendet ist. Und gebe in der
Hauptschleife dann jeweils den Zählerstand aus! Als "volatile" hast Du
die Variable count ja bereits definiert, so dass Du diese sowohl in der
ISR hochzählen als auch in der Hauptschleife "sicher" ausgeben kannst.
Wahrscheinlich wirst Du dann merken, daß der Zählerstand häufiger per
ISR erhöht wird als er in der Hauptschleife ausgegeben wird, d.h. der
ausgegebene Zählerstand springt immer um mehrere Zahlenwerte nach oben.
Oder?