Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt?


von Mike B. (Gast)


Lesenswert?

Hallo meine Freunde,

bin Anfänger im bereich Mikrokontroller.
Habe jetzt auch schon etwas im Forum gesucht, aber nix zu meiner Frage 
gefunden, oder ich verstehe es einfach nicht.

Meine Frage:

Ist ein externer Interrupt (mit Taster) beim ATMEGA 8 nur über INT0 und 
INT1 möglich ist. Oder kann ich auch über jeden anderen Port einen ext. 
INT ausführen?

Für eure Antworten bedanke ich mich im Voraus.

LG
Mike

von Oliver (Gast)


Lesenswert?

Prinzipiell beantwortet solche Fragen das Datenblatt des Prozessors. 
Ohne das kommst du nicht weit.

Ausserdem ist die Auswetung eines Tasters über einen externen Int nicht 
die beste Möglichkeit.

Und ja, beim Mega8 geht das nur über die INTx-Pins.

Oliver

von Peter D. (peda)


Lesenswert?

Mike B. schrieb:
> Ist ein externer Interrupt (mit Taster) beim ATMEGA 8 nur über INT0 und
> INT1 möglich ist.

Möglich ja, aber nicht sinnvoll.
Der Timerinterrupt ist fürs Tasten einlesen mit Abstand die beste 
Lösung.


Peter

von oldmax (Gast)


Lesenswert?

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

von Guest (Gast)


Lesenswert?

Vielen Dank für die ausführliche Erklärung, oldmax.
Hatte mich schon gewundert, warum die anderen vom externen Interrupt 
abgeraten haben. Nun weiss ich es auch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.