- Rodzaje przerwań
- Przerwania w Arduino
- Używanie przerwań w Arduino
- Wymagane składniki
- Schemat obwodu
- Programowanie przerwań Arduino
- Demonstracja przerwania Arduino
Rozważmy szybko poruszający się samochód, jeśli nagle zostanie uderzony przez inny samochód w przeciwnym kierunku, pierwszą rzeczą, która się dzieje, jest to, że czujnik przyspieszeniomierza obecny w samochodzie wyczuwa nagłe przyspieszenie i uruchamia zewnętrzne przerwanie mikrokontrolera obecnego w samochód. Następnie na podstawie tego przerwania mikrokontroler wytwarza sygnał elektryczny do natychmiastowego wyzwolenia poduszek powietrznych. Mikrokontrolery obecne w samochodzie monitorują jednocześnie wiele rzeczy, np. Wykrywanie prędkości samochodu, sprawdzanie innych czujników, sterowanie temperaturą klimatyzacji itp. Co więc powoduje nagłe otwarcie poduszki powietrznej w ciągu kilku sekund? Odpowiedzią są przerwania, używany jest tutaj sygnał przerwania, który ma najwyższy priorytet ze wszystkich.
Innym prostym przykładem przerwania są telefony komórkowe z ekranem dotykowym, które mają najwyższy priorytet w sensie „dotyku”. Prawie każde urządzenie elektroniczne ma jakiś rodzaj przerywania, aby „przerwać” normalny proces i wykonać pewne czynności o wyższym priorytecie w określonym wydarzeniu. Po wykonaniu przerwania normalny proces zostaje wznowiony.
Z technicznego punktu widzenia Przerwania to mechanizm, za pomocą którego I / O lub instrukcja może zawiesić normalne działanie procesora i zostać obsłużona tak, jakby miała wyższy priorytet. Na przykład procesor wykonujący normalne wykonywanie może zostać przerwany przez jakiś czujnik, aby wykonać określony proces obecny w ISR (Interrupt Service Routine). Po wykonaniu ISR procesor może ponownie wznowić normalne wykonywanie.
Rodzaje przerwań
Istnieją dwa rodzaje przerwań:
Przerwanie sprzętowe: Dzieje się tak, gdy wystąpi zdarzenie zewnętrzne, takie jak zewnętrzna styk przerwania zmienia stan z NISKIEGO na WYSOKI lub WYSOKI na NISKI.
Przerwanie oprogramowania: dzieje się zgodnie z instrukcją oprogramowania. Na przykład przerwania timera są przerwaniami programowymi.
Przerwania w Arduino
Teraz zobaczymy, jak używać przerwań w Arduino Board. Posiada dwa rodzaje przerwań:
- Przerwanie zewnętrzne
- Przerwanie zmiany pinu
Przerwanie zewnętrzne:
Te przerwania są interpretowane przez sprzęt i są bardzo szybkie. Przerwania te można ustawić tak, aby wyzwalały się w przypadku poziomów WZROSTU, SPADKU lub NISKIEGO.
Płytka Arduino |
Zewnętrzne piny przerwań: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Przerwania zmiany pinu:
Arduino może mieć włączonych więcej pinów przerwań za pomocą przerwań zmiany pinów. W płytkach Arduino opartych na ATmega168 / 328 dowolne piny lub wszystkie 20 pinów sygnałowych mogą być używane jako piny przerwań. Można je również wyzwolić za pomocą krawędzi RISING lub FALLING.
Używanie przerwań w Arduino
Aby używać przerwań w Arduino, należy zrozumieć następujące pojęcia.
Procedura obsługi przerwania (ISR)
Procedura obsługi przerwania lub procedura obsługi przerwania to zdarzenie zawierające niewielki zestaw instrukcji. Gdy wystąpi zewnętrzne przerwanie, procesor najpierw wykonuje kod obecny w ISR i wraca do stanu, w którym opuścił normalne wykonanie.
ISR ma następującą składnię w Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, tryb);
digitalPinToInterrupt (pin): W Arduino Uno, NANO piny używane do przerwania to 2,3 i mega 2,3,18,19,20,21. Określ tutaj pin wejściowy używany do zewnętrznego przerwania.
ISR: Jest to funkcja wywoływana po wykonaniu zewnętrznego przerwania.
Tryb: rodzaj przejścia do włączenia, np. Opadanie, wznoszenie itp.
- RISING: Aby wyzwolić przerwanie, gdy pin przechodzi z LOW do HIGH.
- FALLING: Aby wywołać przerwanie, gdy pin przechodzi z WYSOKI do NISKI.
- CHANGE: Aby wyzwolić przerwanie, gdy pin przechodzi z LOW do HIGH lub HIGH do LOW (tj. Gdy zmienia się stan pinu).
Niektóre warunki podczas używania przerwania
- Funkcja Interrupt Service Routine (ISR) musi być jak najkrótsza.
- Funkcja Delay () nie działa wewnątrz ISR i należy jej unikać.
W tym samouczku Arduino Interrupt liczba jest zwiększana od 0, a dwa przyciski służą do wyzwalania przerwania, każdy z nich jest podłączony do D2 i D3. Dioda LED wskazuje przerwanie. Po naciśnięciu jednego przycisku dioda zaświeci się, a na wyświetlaczu pojawi się przerwanie2 i zgaśnie, a po naciśnięciu innego przycisku dioda gaśnie, a wyświetlacz pokazuje przerwanie1 i gaśnie.
Wymagane składniki
- Płytka Arduino (w tym samouczku używana jest Arduino NANO)
- Przycisk - 2
- LED - 1
- Rezystor (10 K) - 2
- LCD (16x2) - 1
- Deska do chleba
- Podłączanie przewodów
Schemat obwodu
Połączenie obwodu między Arduino Nano i wyświetlaczem LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Do środka PIN potencjometru Do kontrolowania kontrastu wyświetlacza LCD |
RS |
D7 |
RW |
GND |
mi |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
ZA |
+ 5V |
K. |
GND |
Dwa przyciski są podłączone do Arduino Nano na pinach D2 i D3. Służą do wykorzystania dwóch zewnętrznych przerwań, jednego do włączenia diody LED, a drugiego do wyłączenia diody LED. Każdy przycisk ma rezystor obniżający 10k podłączony do masy. Tak więc, kiedy przycisk jest wciśnięty, logika jest WYSOKA (1), a gdy nie jest wciśnięta to logiczna NISKA (0). Opornik obniżający jest obowiązkowy, w przeciwnym razie na pinach wejściowych D2 i D3 pojawią się zmienne wartości.
LED jest również używany do wskazania, że przerwanie zostało wywołane lub został naciśnięty przycisk.
Programowanie przerwań Arduino
W tym samouczku liczba jest zwiększana od 0, która wyświetla się w sposób ciągły na (16x2) wyświetlaczu LCD podłączonym do Arduino Nano, po każdym naciśnięciu lewego przycisku (pin przerwania D3) dioda LED zapala się i wyświetla się Przerwanie2, a po naciśnięciu prawego przycisku (przerwanie styk D2) dioda gaśnie, a na wyświetlaczu pojawia się Przerwanie1.
Kompletny kod z działającym filmem znajduje się na końcu tego samouczka.
1. Najpierw dołączany jest plik nagłówkowy wyświetlacza LCD, a następnie definiowane są piny LCD używane do połączenia z Arduino Nano.
#zawierać
2. W funkcji void setup () najpierw wyświetl na wyświetlaczu LCD jakąś wiadomość wprowadzającą. Dowiedz się więcej o łączeniu LCD z Arduino tutaj.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("PRZEGLĄD OBWODU"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); opóźnienie (3000); lcd.clear ();
3. Następnie w tej samej funkcji void setup () należy określić piny wejściowe i wyjściowe. Pin D13 jest podłączony do anody diody LED, więc ten pin musi być zdefiniowany jako wyjście.
pinMode (13, WYJŚCIE);
4. Teraz główna ważna część programowania, czyli funkcja attachInterrupt (), jest również zawarta w void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Tutaj określono, że pin 2 służy do zewnętrznego przerwania, a funkcja buttonPressed1 jest wywoływana, gdy na pinie D2 występuje RISING (LOW to HIGH). A pin 3 jest również dla zewnętrznego przerwania, a funkcja buttonPressed2 jest wywoływana, gdy na pinie D3 jest RISING.
5. Wewnątrz pustej pętli () liczba (i) jest zwiększana od zera i drukowana na wyświetlaczu LCD (16x2).
lcd.clear (); lcd.print ("LICZNIK:"); lcd.print (i); ++ i; opóźnienie (1000);
W tej samej pustej pętli (), digitalWrite () jest używany na pinie D13, do którego podłączona jest anoda LED. W zależności od wartości na zmiennym wyjściu dioda LED włączy się lub wyłączy
digitalWrite (13, wyjście);
6. Najważniejszą częścią jest utworzenie funkcji obsługi przerwań zgodnie z nazwą używaną w funkcji attachInterrupt () .
Ponieważ używane są dwa piny przerwań 2 i 3, wymagane są dwa ISR. Tutaj w tym programowaniu używane są następujące ISR
buttonPressed1 ():
void buttonPressed1 () { wyjście = LOW; lcd.setCursor (0,1); lcd.print ("Przerwanie 1"); }
Ta funkcja jest wykonywana po naciśnięciu przycisku na pinie D2 (KRAWĘDŹ POWSTANIA). Ta funkcja zmienia stan wyjścia na LOW powodując wyłączenie diody LED i wydrukowanie „przerwania1” na wyświetlaczu LCD.
buttonPressed2 ():
void buttonPressed2 () {wyjście = WYSOKI; lcd.setCursor (0,1); lcd.print ("Przerwanie2"); }
Ta funkcja jest wykonywana po naciśnięciu przycisku na pinie D3. Ta funkcja zmienia stan wyjścia na WYSOKI powodując włączenie diody LED i wyświetlenie „przerwania2” na wyświetlaczu LCD.
Demonstracja przerwania Arduino
1. Po wciśnięciu PRZYCISKU PUSH po lewej stronie dioda LED zaświeci się, a na wyświetlaczu LCD pojawi się Przerwanie2.
2. Po wciśnięciu PRZYCISKU PUSH po prawej stronie dioda LED gaśnie, a na wyświetlaczu LCD pojawia się Przerwanie1
W ten sposób Przerwanie może być przydatne do wyzwalania dowolnego ważnego zadania między normalnym wykonaniem.