- Druhy přerušení
- Přerušení v Arduinu
- Používání přerušení v Arduinu
- Požadované komponenty
- Kruhový diagram
- Programování přerušení Arduino
- Demonstrace přerušení Arduino
Zvažte rychle se pohybující auto, pokud jej náhle zasáhne jiné auto v opačném směru, první věc, která se stane, je to, že senzor akcelerometru přítomný ve vozidle snímá náhlé zpomalení a spustí externí přerušení mikrokontroléru přítomného v auto. Na základě tohoto přerušení pak mikrokontrolér vydá elektrický signál k okamžitému aktivaci airbagů. Mikrokontroléry přítomné ve vozidle monitorují mnoho věcí současně, jako je snímání rychlosti automobilu, kontrola dalších senzorů, řízení teploty klimatizace atd. Co tedy způsobí náhlé otevření airbagu během několika sekund? Odpovědí jsou přerušení, zde se používá signál přerušení, který má nejvyšší prioritu ze všech.
Dalším jednoduchým příkladem přerušení jsou mobilní telefony s dotykovou obrazovkou, které mají nejvyšší prioritu ve smyslu „Touch“. Téměř každé elektronické zařízení nějakým způsobem přerušuje, aby „přerušilo“ běžný proces a provedlo nějaké věci s vyšší prioritou na konkrétní události. Pravidelný proces je obnoven po obsazení Přerušení.
Technicky je tedy Interrupts mechanismem, pomocí kterého může I / O nebo instrukce pozastavit normální provádění procesoru a nechat se obsluhovat, jako by měl vyšší prioritu. Například procesor provádějící normální spuštění může být přerušen některým senzorem, aby provedl konkrétní proces, který je přítomen v ISR (Interrupt Service Routine). Po provedení procesoru ISR lze znovu pokračovat v normálním provádění.
Druhy přerušení
Existují dva typy přerušení:
Hardwarové přerušení: Dochází k tomu, když dojde k externí události, jako když externí pin přerušení změní svůj stav z LOW na HIGH nebo HIGH na LOW.
Přerušení softwaru: Děje se to podle pokynů softwaru. Například časová přerušení jsou softwarová přerušení.
Přerušení v Arduinu
Nyní uvidíme, jak používat přerušení v Arduino Board. Má dva typy přerušení:
- Externí přerušení
- Přerušit změnu PIN
Externí přerušení:
Tato přerušení jsou interpretována hardwarem a jsou velmi rychlá. Tato přerušení lze nastavit tak, aby se spouštěla v případě úrovní RISING nebo FALLING nebo LOW.
Deska Arduino |
Vnější kolíky přerušení: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Přerušení výměny kolíku:
Arduinos může mít více přerušení kolíky povoleny pomocí změny pin přerušení. Na deskách Arduino založených na ATmega168 / 328 lze jako přerušovací piny použít libovolné piny nebo všech 20 signálních piny. Mohou být také spuštěny pomocí RISING nebo FALLING edge.
Používání přerušení v Arduinu
Aby bylo možné v Arduinu používat přerušení, je třeba porozumět následujícím konceptům.
Rutina přerušení služby (ISR)
Rutina přerušení služby nebo obslužná rutina přerušení je událost, která obsahuje malou sadu pokynů. Když dojde k externímu přerušení, procesor nejprve provede tento kód, který je přítomen v ISR, a vrátí se zpět do stavu, kde opustil normální provedení.
ISR má v Arduinu následující syntaxi:
attachInterrupt (digitalPinToInterrupt (pin), ISR, režim);
digitalPinToInterrupt (pin): V Arduino Uno, NANO jsou piny používané pro přerušení 2,3 & v mega 2,3,18,19,20,21. Zde zadejte vstupní kolík, který se používá pro externí přerušení.
ISR: Jedná se o funkci, která se volá, když je provedeno externí přerušení.
Režim: Typ přechodu ke spuštění, např. Pád, stoupání atd.
- RISING: Ke spuštění přerušení, když kolík přechází z LOW na HIGH.
- FALLING: Chcete-li spustit přerušení, když kolík přechází z HIGH do LOW.
- ZMĚNA: Chcete-li spustit přerušení, když se pin přepne z LOW na HIGH nebo HIGH na LOW (tj. Když se změní stav pinu).
Některé podmínky při používání přerušení
- Funkce přerušení servisní rutiny (ISR) musí být co nejkratší.
- Funkce Delay () nefunguje uvnitř ISR a je třeba se jí vyhnout.
V tomto výukovém programu Arduino Interrupt se číslo zvyšuje od 0 a ke spuštění přerušení se používají dvě tlačítka, každé z nich je připojeno k D2 a D3. LED dioda se používá k indikaci přerušení. Pokud je stisknuto jedno tlačítko, kontrolka se rozsvítí a na displeji se zobrazí přerušení 2 a zhasne, a když je stisknuto další tlačítko, kontrolka zhasne a na displeji se zobrazí přerušení 1 a zhasne.
Požadované komponenty
- Deska Arduino (V tomto výukovém programu se používá Arduino NANO)
- Tlačítko - 2
- LED - 1
- Rezistor (10K) - 2
- LCD (16x2) - 1
- Chlebová deska
- Připojení vodičů
Kruhový diagram
Okruhové spojení mezi Arduino Nano a 16x2 LCD displejem:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na středový PIN potenciometru Pro ovládání kontrastu LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K. |
GND |
K Arduino Nano jsou na pinech D2 a D3 připojena dvě tlačítka. Používají se pro použití dvou externích přerušení, jednoho pro zapnutí LED a druhého pro vypnutí LED. Každé tlačítko má stahovací rezistor 10k připojený k zemi. Když je tedy stisknuto tlačítko, je logické HIGH (1) a pokud není stisknuto, je logické LOW (0). Pull down rezistor je povinný, jinak budou na vstupním pinu D2 a D3 plovoucí hodnoty.
LED se také používá k označení, že přerušení bylo spuštěno nebo bylo stisknuto tlačítko.
Programování přerušení Arduino
V tomto tutoriálu se číslo zvyšuje od 0, které se zobrazuje nepřetržitě na (16x2) LCD připojeném k Arduino Nano, kdykoli je stisknuto levé tlačítko (přerušovací kolík D3), LED se rozsvítí a na displeji se zobrazí Interrupt2, a když pravé tlačítko (přerušovací kolík D2), LED zhasne a na displeji se zobrazí Interrupt1.
Kompletní kód s fungujícím videem je uveden na konci tohoto tutoriálu.
1. Nejprve je zahrnut soubor záhlaví pro LCD displej a poté jsou definovány LCD piny, které se používají při připojení k Arduino Nano.
#zahrnout
2. Uvnitř funkce void setup () nejprve zobrazte úvodní zprávu na LCD displeji. Další informace o propojení LCD s Arduino se dozvíte zde.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("OKRUH DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); zpoždění (3000); lcd.clear ();
3. Potom ve stejné funkci void setup () musí být specifikovány vstupní a výstupní piny. Pin D13 je připojen k anodě LED, takže tento pin musí být definován jako výstup.
pinMode (13, VÝSTUP);
4. Nyní přichází hlavní důležitá část programování, která je funkce attachInterrupt (), která je také zahrnuta do neplatného nastavení ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Zde je specifikováno, že pin 2 je pro externí přerušení, a funkce buttonPressed1 je volána, když je na D2 pin RISING (LOW to HIGH). A pin 3 je také pro externí přerušení a funkce buttonPressed2 je volána, když je RISING na pin D3.
5. Uvnitř smyčky void () je číslo (i) zvýšeno od nuly a vytištěno na LCD (16x2).
lcd.clear (); lcd.print ("POČÍTAČ:"); lcd.print (i); ++ i; zpoždění (1000);
Ve stejné smyčce void () se používá digitalWrite () na kolíku D13, kde je připojena anoda LED. V závislosti na hodnotě proměnného výstupu se LED rozsvítí nebo zhasne
digitalWrite (13, výstup);
6. Nejdůležitější částí je vytvoření funkce obsluhy přerušení podle názvu, který se používá ve funkci attachInterrupt () .
Protože se používají dva kolíky přerušení 2 a 3, jsou vyžadovány dva ISR. Zde v tomto programování jsou použity následující ISR
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Přerušení 1"); }
Tato funkce se provede po stisknutí tlačítka na kolíku D2 (RISING EDGE). Tato funkce změní stav výstupu na NÍZKÝ, což způsobí zhasnutí LED a vytiskne „přerušení 1“ na LCD displeji.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Přerušení2"); }
Tato funkce se provádí po stisknutí tlačítka na kolíku D3. Tato funkce změní stav výstupu na VYSOKÝ, což způsobí rozsvícení LED a vytiskne „přerušení 2“ na LCD displeji.
Demonstrace přerušení Arduino
1. Když je stisknuto PUSH TLAČÍTKO na levé straně, LED dioda se rozsvítí a na LCD se zobrazí Interrupt2.
2. Po stisknutí PUSH TLAČÍTKA na pravé straně LED zhasne a na LCD displeji se zobrazí Interrupt1
Takto může být Interrupt užitečné pro spuštění jakéhokoli důležitého úkolu mezi běžným provedením.