-
-
Erfahrener Benutzer
Fleißiges Mitglied
Interrupt? Was is das.
Hi, ich hab den Artikel im RN-Wissen Artikelbereich durchgelesen, dort steht zwar dass ein Interrupt eine Unterbrechung der Routine ist und so weiter, aber was bringt mir das ? Wozu soll ich mein Programm anhalten?
Ich steig da einfach nicht durch. Hab ich das komplett falsch Verstanden?
Gruß, Robin
-
Hi!
Dein Programm hält bei einem Interrupt nicht einfach an, sondern springt zu einem Programmteil, der nur dann ausgeführt wird, wenn der Interrupt erfolgt ist.
Stell dir vor, du musst mit deinem Mikrocontroller einen Pin immer zu einer bestimmten Zeit an- und ausschalten. Um nicht dauernd im Hauptprogramm nur warten zu müssen, bis die Zeit rum ist, kannst du dir einen Timer stellen. Der Timer läuft dann automatisch im Hintergrund und erzeugt nach der von dir eingestellten Zeit einen Interrupt. Das Programm springt dann zu deiner Ein-Aus-Routine.
Im Hauptprogramm bleibt also genug Zeit, andere Dinge zu machen.
MfG
Basti
P.S.: Im Mikrocontroller-Forum passts besser -> Verschoben!
-
Erfahrener Benutzer
Roboter Experte
Na, das ist wie beim Coitus interruptus... du unterbrichst die eigentliche Tätigkeit um was wichtigeres zu machen.
Wenn z.B. deine Bude brennt ist das ja auch wichtiger, als für Nachwuchs zu sorgen.
Gruß,
SIGINT
P.S.: Mist, war jemand schneller...
-
Erfahrener Benutzer
Fleißiges Mitglied
Achso, ok, aber wie Benutz ich dann so ein interrupt? Gibts warscheinlich keine "interrupt befehls palette" oder, man muss es eben über Timer oder so machen, und das ganze nennt sich dann einfach >Interrupt< .. ?
Gruß
-
Erfahrener Benutzer
Robotik Einstein
Naja, ne Tabelle, welche Interrupts möglich sind, gibts sicher irgendwo.
Bei einigen µCs gibts ne extra Seite im Datenblatt, auf der alle möglichen Interrupt-Vektoren drinstehen.
Aber nicht jeder Interrupt muss über nen Timer ausgelöst werden. Es gibt z.B. auch die, bei denen einfach der Pegel an nem Pin überwacht wird. Ändert sich dieser, wird der Interrupt ausgelöst.
Ebenso für die serielle Schnittstelle; wenn z.B. neue Daten vorliegen oder die Übertragung beendet ist.
Da packt jeder µC-Hersteller verschiedenste Typen rein.
-
Erfahrener Benutzer
Fleißiges Mitglied
Also an nem Beispiel festgelegt:
Ich hab irgentwo ne Sprungmarke in meinem µC, und irgentwo ne "If" Abfrage. Wenn ich jetzt innerhalb der If Abfrage zu der Sprungmarke spring, weil z.B. PinC1 = 1 ist, dann bezeichnet man das als Interrupt?
-
Erfahrener Benutzer
Robotik Einstein
Ne, das nennt sich "Polling"... d.h. der Sprung wird nur ausgeführt, wenn die Bedingung wahr ist und das Programm zufällig gerade an dieser If-Abfrage ist. Ist das Programm woanders, wird die Sprungmarke nicht angesprungen.
Der Interrupt wird definiert (auch mit einer Sprungmarke) und unterbricht ("interrupt") das Programm an der aktuellen Stelle, d.h. die aktuelle Anweisung wird noch beendet, danach wird die Sprungmarke angesprungen. Unabhängig davon, wo das Programm gerade ist.
Vorteil: Extrem schnelles reagieren auf Ereignisse.
Wobei ein Interrupt selbst nochmal durch einen Interrupt mit höherer Priorität unterbrochen werden kann.
Der, der sich z.B. immer durchsetzt, ist RESET.
Also Polling: Dauert ein Durchlauf der Main-Loop 1 Sekunde, wird der Pin nur 1x pro Sekunde abgefragt. Wenn das Programm halt gerade mal vorbeischaut.
Interrupt: Die Pin-Änderung wird innerhalb weniger CPU-Zyklen erkannt und "verarbeitet". Je nach CPU-Takt sind dies wenige µs oder sogar nur ns.
-
Erfahrener Benutzer
Robotik Einstein
...wie hat hier mal Jemand so schön beschrieben :
Ein Postbote teilt seine Briefe in einer Strasse aus, zwischendurch ruft Jemand von ein paar Häusern vorher "Hey, Du hast hier einen Beutel mit Briefen liegengelassen"...der Postbote latscht dort hin, holt den Beutel und fängt an der gleichen Stelle wieder an, die Briefe zu verteilen, wo er kurz zuvor aufgehört hat.
Somit hat er gerade einen externen Interrupt durchgemacht
....wenn er hingegen immer alle 30 Minuten neue Briefe aus einem Verteilerkasten holen muss, dann macht er einen timergesteuerten Interrupt durch.
-
Erfahrener Benutzer
Fleißiges Mitglied
ok, gutes Beispiel, danke. Aber wie programmier ich dann so ne Interrupt Abfrage, ob der Pin jetzt nun 1 ist oder 0 ? Das muss ja quasi auch in meinem Programmcode sein und dann wird es ja wieder nur an der bestimmten Stelle abgefragt. Gut, das eine ist ein Timer, der (zumindest Hardware) Timer läuft ja unabhängig zum Programmcode.
Aber was gibts sonst für Methoden?
-
Erfahrener Benutzer
Robotik Einstein
Wie die Interrupt-Konfigurationen aussehen müssen kommt halt drauf an.
Bei Bascom mit nem Pin wärs z.B.
CONFIG INT0 = x.
Wobei INT0 der Pin mit der Funktion "INT0" ist;
x kann sein:
- LOW LEVEL: Interrupt wird solange ausgeführt, solange der Pin auf Masse liegt.
- FALLING: Interrupt wird beim Wechsel von 5V => 0V ausgelöst.
- RISING: ausgelöst von 0V => 5V
- CHANGE: Bei jedem Pegelwechsel auslösen.
mit "ON INT0 ISR_INT0" wird festgelegt, dass der Interrupt 0 beim Auftreten an die Sprungmarke ISR_INT0 springen soll.
Danach noch mit ENABLE INT0 einschalten.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen