Hi
Einen Taster auf einen Interrupt zu legen ist keine gute Idee. Das ist
einem Profi klar, aber nicht einem Anfänger und deshalb möchte ich da
etwas näher drauf eingehen. Schaltkontakte sind in der Regel so träge,
das selbst ein ausgewachsenes Controllerprogramm diesen Eingang ohne
Datenverlust pollen kann. Pollen heißt, am Anfang deiner
Programmschleife holst du dir einmal die Eingänge und legst sie in eine
Variable. Könntest du den Schalter so schnell schließen und wieder
öffnen, bevor dieser Lesevorgang aufgerufen wird, ist ein Interrupt
eerforderlich, aber das wist du nicht schaffen. Außerdem, und das ist
noch viel lustiger, haben Kontakte es an sich zu prellen. Ein
Signalwechsel beginnt mit ganz schnellen Impulsen, bevor die Signallage
stabil ist. Hast du nun deinen Eingang über einen Interrupt abgefragt,
so wird er ziemlich oft aufgerufen. Völlig unnütz, weil du ja gar nicht
weißt, welches die erwünschte aktuelle Lage ist. Damit du ein wenig
Einblick in das gesagte bekommst, betrachten wir mal einfach einen
Controller mit 1MHz Taktfrequenz. Auch wenn der Flash bei einem Atmega8
8KB groß ist, so wird auch bei 100% Programmierung nur 20 - 30% der
Anweisungen ausgeführt. Nehmen wir mal an, eine Anweisung braucht 2
Taktzyklen und es sind 2KB Befehle abzuarbeiten. Dann braucht das
Programm 4000 Taktzyklen. Die Frequenz hat aber 1 000 000 Takte /
Sekunde, d. h. du durchläufst dein Programm in der Sekunde 250 mal.
Umgekehrt, ein Durchlauf dauert 4 mSek.
Nur wenn dein Kontakt ein Signal unter mSek. erzeugt, ist ein Interrupt
erforderlich, weil du nicht sicher stellen kannst, es zu erfassen.
Wunder dich also nicht, wenn du immer wieder abweisende Antworten bei
Tastern und Interrupt erhälst.
Gruß oldmax