Unterbrechung
1 Ungestörte Unterhaltung
Unterhaltung zweier Personen

Schon mal überlegt wie man Menschen in einer Unterhaltung am besten fotografiert, damit die Unterhaltung auch sichtbar wird?

Die Beste Perspektive ist tatsächlich von schräg hinten. Dabei müssen die Personen unbedingt Blickkontakt haben. Und schon wird die Kommunikation auf dem Bild zum Greifen nah.

Viele würde einfach von der Seite fotografieren oder sich darüber keine Gedanken machen. Aber die richtige Perspektive ist entscheidend für ein gutes Foto.

2 Unterbrechung
Unterhaltung mit Unterbrechung

Wie oft wird man im Leben im Gespräch gestört. Irgendjemand platzt einfach in das Gespräch rein. Aber so etwas auf einem Foto festhalten ist nochmal schwieriger, da man sehr schnell sein muß.

Bei dem Foto kann man aber den Erfolg der Unterbrechung eindeutig erkennen. Der Blickkontakt ist nämlich zu der dritten Person gerichtet.

Auch beim Programmieren benötigen wir die Möglichkeit zur Unterbrechung. Wenn bspw. in Funktionen Verzögerungszeiten von mehreren Sekunden laufen, möchte man trotzdem die Möglichkeit haben mit einem Taster zu unterbrechen. Dafür ist auf jedem Mikrocontroller ein Interrupt-Modul vorgesehen.

3 Funktion des Interrupt-Moduls
Funktion des Interrupt-Moduls

Das Interrupt-Modul hat verschiedene Einstellmöglichkeiten vorgesehen: Mit dem Befehl INTCON2bits.GIE = 1; gibt man global alle Interrupts frei. IEC0bits.INT0IE = 1; aktiviert den externen Interrupt INT0, welcher hardwareseitig am Taster S0 angeschlossen ist. Mit INTCON2bits.INT0EP = 0; wird die steigende (positive) Flanke des Tastersignals S0 ausgewählt und IFS0bits.INT0IF = 0; setzt das zugehörige Interruptflag auf Null.

4 Lauflicht und Aufruf der Interrupt-Service-Routine
Aufruf der Interrupt-Service-Routine

Am Beispiel eines Lauflichts wird die Notwendigkeit des Interrupts deutlich: Jede LED leuchtet für 500 ms. Würde man den Taster S0 am Ende abfragen, muss man bei 6 LEDs unter Umständen 3 s warten bis das Drücken des Tasters erkannt wird.

Ist der Interrupt INT0 nun aktiviert, unterbricht der Mikrocontroller beim Betätigen von S0 das Programm und springt in die Interrupt-Service-Routine. Am Ende springt er exakt an die Stelle zurück wo er unterbrochen hat und führt das Programm von dieser Stelle aus fort.

5 Interrupt-Service-Routine
Interrupt-Service-Routine

In der Interrupt-Service-Routine (ISR) wird nun der Zustand der Variable merker verändert und so das Lauflicht angehalten oder gestartet. Am Ende muß dabei das Interruptflag wieder auf Null gesetzt werden.

Man beachte, dass man sicher gehen muss, dass nur ein Tastendruck gezählt wird, die Variable merker global definiert sein muß und in diesem Fall das Lauflicht in der Hauptfunktion nach dem Durchlauf der ISR noch bis zum Ende läuft, da Zustand der Variable merker nur nach einem kompletten Durchlauf des Lauflichts in der Hauptfunktion überprüft wird.

Ideen von
Schüler BKE14, Tettnang
J. Claassen, RP Tübingen



Aufgabe 1 Konfiguration des Interrupt-Moduls

Interrupt-Flag

Das Interrupt-Modul des dsPIC33 Mikrocontrollers soll konfiguriert werden. Gib die Werte aller notwendigen Bits im INTCON2-, IFS0-Register, IEC0- und IPC0-Register an.

  1. Interrupt INT0, positive Flanke.
  2. Interrupt INT1, negative Flanke, niedrige Priorität.
  3. Interrupt Timer 1.
  1. INTCON2bits.GIE = 1; //global interrupt enable
    INTCON2bits.INT0EP = 0; //positive edge
    IFS0bits.INT0IF = 0; //delete interrupt flag
    IEC0bits.INT0IE = 1; //INT0 interrupt enable
  2. INTCON2bits.GIE = 1; //global interrupt enable
    INTCON2bits.INT0EP = 1; //negative edge
    IFS0bits.INT0IF = 0; //delete interrupt flag
    IEC0bits.INT0IE = 1; //INT0 interrupt enable
  3. IPC0bits.T1IP = 0b111; // Set Timer 1 Interrupt to lowest Priority Level
    IFS0bits.T1IF = 0; // Clear Timer 1 Interrupt Flag
    IEC0bits.T1IE = 1; // Timer interrupt enable

Aufgabe 2 Programmieren des externen Interrupts INT0

Taster

Zur Verwendung des Interrupt-Moduls wird eine Bibliothek zur Verfügung gestellt. Binde dafür die Datei INTconfig.h und INTconfig.c in das Projekt ein.

  1. Erstelle das Projekt 10 Interrupt und schreiben die Datei 10-Interrupt-1.c, in der das Lauflicht mit dem externen Interrupt INT0 unterbrochen werden kann.
  2. Realisiere ein Blinken der LED L1, während der Taster S0 betätigt wird.


Entspann dich erst mal ...

Ein Informatiker und seine Frau sitzen beim Frühstück: Sie: "Du Mausi, wir haben kein Brot mehr. Könntest du bitte zum Bäcker gehen und eins holen? Und falls sie Eier haben, bring 10 Stück mit."

Als er wieder zurück kommt hat er 10 Brote dabei. Sagt sie: "Warum nur hast du 10 Brote gekauft?" Er: "Sie hatten Eier."

© mylime.info