-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Interrupt? Was is das.

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2007
    Ort
    Bodenseeregion
    Alter
    27
    Beiträge
    135

    Interrupt? Was is das.

    Anzeige

    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

  2. #2
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    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!

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.01.2006
    Ort
    Mönchengladbach
    Beiträge
    544
    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...

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2007
    Ort
    Bodenseeregion
    Alter
    27
    Beiträge
    135
    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ß

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    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.
    #ifndef MfG
    #define MfG

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2007
    Ort
    Bodenseeregion
    Alter
    27
    Beiträge
    135
    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?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    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.
    #ifndef MfG
    #define MfG

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    ...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.
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2007
    Ort
    Bodenseeregion
    Alter
    27
    Beiträge
    135
    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?

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    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.
    #ifndef MfG
    #define MfG

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •