- Arten von Interrupts
- Interrupts in Arduino
- Verwenden von Interrupts in Arduino
- Erforderliche Komponenten
- Schaltplan
- Arduino Interrupt Programming
- Arduino Interrupt Demonstration
Stellen Sie sich ein schnell fahrendes Auto vor. Wenn es plötzlich von einem anderen Auto in die entgegengesetzte Richtung angefahren wird, erkennt der im Auto vorhandene Beschleunigungssensor zunächst eine plötzliche Beschleunigung und löst eine externe Unterbrechung des in vorhandenen Autos aus das Auto. Basierend auf dieser Unterbrechung erzeugt der Mikrocontroller dann ein elektrisches Signal, um die Airbags sofort auszulösen. Im Auto vorhandene Mikrocontroller überwachen viele Dinge gleichzeitig, wie das Erfassen der Geschwindigkeit des Autos, das Überprüfen anderer Sensoren, das Steuern der Temperatur der Klimaanlage usw. Was macht also ein plötzliches Öffnen eines Airbags in Sekunden aus? Die Antwort ist Interrupts, hier wird ein Interrupt-Signal verwendet, das die höchste Priorität von allen hat.
Ein weiteres einfaches Beispiel für Interrupts sind Touchscreen-Mobiltelefone, die dem Touchsinn den höchsten Stellenwert einräumen. Fast jedes elektronische Gerät hat eine Art von Unterbrechungen, um den regulären Prozess zu "unterbrechen" und einige Dinge mit höherer Priorität für ein bestimmtes Ereignis auszuführen. Der reguläre Prozess wird nach dem Serving des Interrupts fortgesetzt.
Technisch gesehen ist Interrupts ein Mechanismus, mit dem eine E / A oder ein Befehl die normale Ausführung des Prozessors unterbrechen und sich selbst warten lassen kann, als hätte er eine höhere Priorität. Beispielsweise kann ein Prozessor, der eine normale Ausführung ausführt, von einem Sensor unterbrochen werden, um einen bestimmten Prozess auszuführen, der in ISR (Interrupt Service Routine) vorhanden ist. Nach der Ausführung kann der ISR-Prozessor die normale Ausführung wieder aufnehmen.
Arten von Interrupts
Es gibt zwei Arten von Interrupts:
Hardware-Interrupt: Dies tritt auf, wenn ein externes Ereignis auftritt, bei dem ein externer Interrupt-Pin seinen Status von LOW auf HIGH oder HIGH auf LOW ändert.
Software-Interrupt: Dies geschieht gemäß den Anweisungen der Software. Zum Beispiel sind Timer-Interrupts Software-Interrupts.
Interrupts in Arduino
Jetzt werden wir sehen, wie Interrupts in Arduino Board verwendet werden. Es gibt zwei Arten von Interrupts:
- Externer Interrupt
- Pinwechsel-Interrupt
Externer Interrupt:
Diese Interrupts werden von der Hardware interpretiert und sind sehr schnell. Diese Interrupts können so eingestellt werden, dass sie bei RISING- oder FALLING- oder LOW-Pegeln ausgelöst werden.
Arduino Board |
Externe Interrupt-Pins: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Pinwechsel-Interrupts:
Arduinos kann durch die Verwendung aktiviert haben mehr Interrupt - Pins Pin Änderung Interrupts. In ATmega168 / 328-basierten Arduino-Karten können beliebige Pins oder alle 20 Signalpins als Interrupt-Pins verwendet werden. Sie können auch mit RISING- oder FALLING-Flanken ausgelöst werden.
Verwenden von Interrupts in Arduino
Um Interrupts in Arduino verwenden zu können, müssen die folgenden Konzepte verstanden werden.
Interrupt Service Routine (ISR)
Interrupt Service Routine oder ein Interrupt Handler ist ein Ereignis, das kleine Anweisungen enthält. Wenn ein externer Interrupt auftritt, führt der Prozessor zuerst diesen in ISR vorhandenen Code aus und kehrt in den Zustand zurück, in dem er die normale Ausführung verlassen hat.
ISR hat in Arduino folgende Syntax:
attachInterrupt (digitalPinToInterrupt (Pin), ISR, Modus);
digitalPinToInterrupt (Pin): In Arduino Uno, NANO sind die für Interrupt verwendeten Pins 2,3 und in Mega 2,3,18,19,20,21. Geben Sie hier den Eingangspin an, der für den externen Interrupt verwendet wird.
ISR: Diese Funktion wird aufgerufen, wenn ein externer Interrupt ausgeführt wird.
Modus: Art des Übergangs, der ausgelöst werden soll, z. B. fallen, steigen usw.
- RISING: Zum Auslösen eines Interrupts, wenn der Pin von LOW nach HIGH wechselt.
- FALLING: Zum Auslösen eines Interrupts, wenn der Pin von HIGH nach LOW wechselt.
- ÄNDERN: Zum Auslösen eines Interrupts, wenn der Pin von LOW nach HIGH oder von HIGH nach LOW wechselt (dh wenn sich der Pin-Status ändert).
Einige Bedingungen bei Verwendung von Interrupt
- Die Interrupt Service Routine-Funktion (ISR) muss so kurz wie möglich sein.
- Die Funktion Delay () funktioniert nicht innerhalb von ISR und sollte vermieden werden.
In diesem Arduino Interrupt-Tutorial wird eine Zahl von 0 erhöht und zwei Drucktasten werden verwendet, um Interrupt auszulösen. Jeder ist mit D2 und D3 verbunden. Eine LED zeigt den Interrupt an. Wenn ein Druckknopf gedrückt wird, geht die LED an und das Display zeigt Interrupt2 an und erlischt. Wenn ein anderer Druckknopf gedrückt wird, geht die LED aus und das Display zeigt Interrupt1 an und geht aus.
Erforderliche Komponenten
- Arduino Board (In diesem Tutorial wird Arduino NANO verwendet)
- Druckknopf - 2
- LED - 1
- Widerstand (10K) - 2
- LCD (16x2) - 1
- Brotbrett
- Kabel anschließen
Schaltplan
Schaltungsverbindung zwischen Arduino Nano und 16x2 LCD-Display:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Zur Potentiometer-Center-PIN Zur Steuerung des Kontrasts des LCD |
RS |
D7 |
RW |
GND |
E. |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
EIN |
+ 5V |
K. |
GND |
Zwei Drucktasten sind an Pin D2 und D3 mit Arduino Nano verbunden. Sie werden zur Verwendung von zwei externen Interrupts verwendet, einer zum Einschalten der LED und einer zum Ausschalten einer LED. Jeder Druckknopf hat einen Pulldown-Widerstand von 10k, der mit Masse verbunden ist. Wenn also der Druckknopf gedrückt wird, ist er logisch HOCH (1) und wenn er nicht gedrückt wird, ist er logisch NIEDRIG (0). Ein Pulldown-Widerstand ist obligatorisch, da sonst am Eingangspin D2 und D3 Gleitkommawerte auftreten.
Eine LED zeigt auch an, dass ein Interrupt ausgelöst oder eine Taste gedrückt wurde.
Arduino Interrupt Programming
In diesem Tutorial wird eine Zahl von 0 erhöht, die kontinuierlich in einem (16x2) LCD angezeigt wird, das mit dem Arduino Nano verbunden ist. Immer wenn der linke Druckknopf (Interrupt-Pin D3) gedrückt wird, leuchtet die LED auf und auf dem Display wird Interrupt2 angezeigt, und wenn der rechte Druckknopf angezeigt wird Wenn der Interrupt-Pin D2 gedrückt wird, erlischt die LED und auf dem Display wird Interrupt1 angezeigt.
Der vollständige Code mit einem Arbeitsvideo finden Sie am Ende dieses Tutorials.
1. Zuerst wird die Header-Datei für das LCD-Display mitgeliefert und dann werden die LCD-Pins definiert, die für die Verbindung mit dem Arduino Nano verwendet werden.
#einschließen
2. Zeigen Sie in der Funktion void setup () zunächst eine Intro-Meldung auf dem LCD-Display an. Weitere Informationen zur Verbindung von LCD mit Arduino finden Sie hier.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); Verzögerung (3000); lcd.clear ();
3. Dann müssen in derselben void setup () -Funktion die Eingangs- und Ausgangspins angegeben werden. Der Pin D13 ist mit der Anode der LED verbunden, daher muss dieser Pin als Ausgang definiert werden.
PinMode (13, OUTPUT);
4. Nun kommt der wichtigste Teil der Programmierung, nämlich die Funktion attachInterrupt (), die auch im void setup () enthalten ist.
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Hier wird festgelegt, dass Pin 2 für einen externen Interrupt vorgesehen ist, und die Funktion buttonPressed1 wird aufgerufen, wenn am Pin D2 ein Anstieg (LOW to HIGH) vorliegt . Und Pin 3 ist auch für externe Interrupts vorgesehen, und die Funktion buttonPressed2 wird aufgerufen, wenn an Pin D3 RISING auftritt.
5. Innerhalb der Hohlraumschleife () wird eine Zahl (i) von Null erhöht und auf dem LCD (16x2) gedruckt.
lcd.clear (); lcd.print ("COUNTER:"); lcd.print (i); ++ i; Verzögerung (1000);
In derselben Hohlraumschleife () wird digitalWrite () an Pin D13 verwendet, an dem die Anode der LED angeschlossen ist. Abhängig vom Wert im variablen Ausgang wird die LED ein- oder ausgeschaltet
digitalWrite (13, Ausgabe);
6. Der wichtigste Teil ist das Erstellen einer Interrupt-Handler-Funktion gemäß dem Namen, der in der Funktion attachInterrupt () verwendet wird.
Da zwei Interrupt-Pins 2 und 3 verwendet werden, sind zwei ISR erforderlich. Hier in dieser Programmierung werden folgende ISR verwendet
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interrupt 1"); }}
Diese Funktion wird ausgeführt, wenn der Druckknopf am Pin D2 gedrückt wird (RISING EDGE). Diese Funktion ändert den Status des Ausgangs auf LOW, wodurch die LED erlischt und der „Interrupt1“ auf dem LCD-Display gedruckt wird.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }}
Diese Funktion wird ausgeführt, wenn der Druckknopf am Pin D3 gedrückt wird. Diese Funktion ändert den Status des Ausgangs auf HIGH, wodurch die LED aufleuchtet und der „Interrupt2“ auf dem LCD-Display gedruckt wird.
Arduino Interrupt Demonstration
1. Wenn die DRUCKTASTE auf der linken Seite gedrückt wird, leuchtet die LED und auf dem LCD wird Interrupt2 angezeigt.
2. Wenn die DRUCKTASTE auf der rechten Seite gedrückt wird, erlischt die LED und auf dem LCD wird Interrupt1 angezeigt
Auf diese Weise kann ein Interrupt nützlich sein, um wichtige Aufgaben zwischen der normalen Ausführung auszulösen.