Interrupt Programmierung

By | 18. Februar 2017

Was ist ein Interrupt ?

Durch die Verwendung eines Interrupts wird der gerade laufende Code buchstäblich unterbrochen, egal ob er gerade eine Schleife abarbeitet, Eingaben über den Seriellen Port verarbeitet oder komplizierte Berechnungen durchführt.
Nach der Unterbrechung wird eine spezielle Interrupt-Routine aufgerufen und der dort defineirte Code ausgeführt. Sobald dieser abgearbeitet ist, wird der unterbrochene Programmablauf an genau der Stelle fortgesetzt, an der er unterbrochen wurde.

Aktivierung eines Interrupts

Interrupts müssen aktiviert werden. Dies macht man über „attachInterrupt(INTER, FUNKTION, MODUS)

Der erste Parameter gibt die Art des Interrupts an der ausgeführt werden soll. Die Anzahl der möglichen Interrupts sind verschieden. Der Arduino Uno hat 2 der Mega dagegen 6 mögliche Interrupts:

Arduino Uno:

  • Interrupt 0  = Digitaler Pin 2
  • Interrupt 1 = Digitaler Pin 3

Mega2560:

  • Interrupt 0 = Digitaler Pin 2
  • Interrupt 1 = Digitaler Pin 3
  • Interrupt 2 = Digitaler Pin 21
  • Interrupt 3 = Digitaler Pin 20
  • Interrupt 4 = Digitaler Pin 19
  • Interrupt 5 = Digitaler Pin 18

Der dritte Parameter der Funktion gibt an wann der Interrupt ausgelöst werden soll:

  • LOW = Löst aus wenn sich der Wert von HIGH auf LOW ändert
  • CHANGE = Löst aus wenn sich der Werte am Pin ändert
  • RISING = Löst aus wenn der Wert des Pins von LOW auf HIGH wechselt
  • FALLING = Löst aus wenn sich der Wert des Pins von HIGH auf LOW ändert

Deaktivierung eines Interrupts

Einen Interrupt entfernt man der Funktion „detachInterrupt(interrupt)“.

 

Beispiel-Programm

Das nachfolgende Programm liest zwei verschiedene Taster ein, die an den beiden Interrupt Ports (Interrupt 0  = Digitaler Pin 2 und Interrupt 1  = Digitaler Pin 3) des Arduino angeschlossen werden.

 

Je nach dem wie sich der Status an dieses Eingangs-Pins verändert wird dann ein Inerrupt ausgelöst und eine entsprechende Interrupt Routine (pin_ISR oder pin_ISR1) aufgerufen. Diese Routinen setzen das LED 13 und geben eine entsprechende Textnachricht aus.

Der obige Monitorauszug zeigt den Programmablauf … Auf Basis dieser Grundstruktur können nun beliebige Interrupt Szenarien entwickelt und Programmtechnisch umgesetzt werden.