Externer Interrupt?

Gast #2492545
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
Gast #2492552
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
Gast #2492868
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.