Übersetzungen dieser Seite:

Unterbrechungen, Interrupts

Was sind Interrupts?

Bevor wir mit den Interrupts spielen können, sollten wir zunächst erst mal wissen, was Interrupts überhaupt ist. Interrupts sind …

In der Informatik versteht man unter Interrupt (engl. to interrupt, unterbrechen) die kurzfristige Unterbrechung der normalen Programmausführung1, um eine andere, meist kurze, aber zeitkritische Verarbeitung durchzuführen.

Quelle: Wikipedia

Interrupts beim Arduino

Beim Arduino gibt es verschiedene Interruptquellen. Z.B. wird der interne Timer durch einen Interrupt gesteuert. Aber auch die serielle Schnittstelle arbeitet damit. Und auch wir können Interrupts verwenden. Impliziet wird das bei verschiedenen Libraries gemacht. Davon kriegen wir aber nix mit. Explizit gibt es nur beim Arduino nur Pin Interrupts. Bei meinem Duemilanove sind es genau 2. 0 ist an den Pin 2 gebunden 1 ist an den Pin 3 gebunden. Es handelt sich dabei um sog. PinChange Interrupts, d.h. es kann das SIgnal an einem Pin überwacht werden.

Dazu muss man eine eigenen Prozedur schreiben, die den Interrupt behandelt und diesen dan dem System bekannt geben.

Die Prozedur sollte so aussehen:

void IchMachs() {
  cli();
...
 
  sei();
}

Zugewiesen wird sie dann mit dem Befehl:

attachInterrupt(Interruptnummer, Prozedur, Modus);

Der Modus muss eine von folgenden Konstanten sein:

  • LOW löst den intterupt aus, immer wenn der Pin massepotential hat.
  • CHANGE immer wenn sich der PEgel am Pin ändert
  • RISING bei jedem Wechsel von GND nach +V
  • FALLING oder von +V nach GND.

Praktisch können wir damit auch das RC Signal auswerten.
Aber Achtung: Ein Interrupt unterbrcht die Abarbeitung des Hauptprogrammes. Deswegen ist es wichtig, das die Interruptroutine möglichst kurz ist. Also bitte keine großen Berechnungen, keine Unterroutinen, nichts machen, was man nicht später auch machen könnte.

Achja, man kann natürlich auch den Interrupt wieder aufheben.

detachInterrupt(Interruptnummer);

Mit cli() verhindert man übrigens, das Interrupts verarbeitet werden. Mit sei() wird das wieder erlaubt. Mit diesen beiden Befehlen sollte man sehr voirsichtig sein, da es dann zu ungewöhnlichen Verhalten kommen kann. z.B. könnten Daten der seriellen Schnittstelle verloren gehen, oder Zeiten stimmen nicht mehr. Also imemr schön vorsichtig sein.

arduino/tutorial/sprechen-sie-arduino/fertige-funktionen/unterbrechungen-interrupts.txt · Zuletzt geändert: 2018/11/04 10:51 von 127.0.0.1
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0