- Typer av avbrott
- Avbryter i Arduino
- Använda avbrott i Arduino
- Komponenter krävs
- Kretsschema
- Arduino Interrupt Programmering
- Arduino avbryter demonstration
Tänk på en bil i snabb rörelse, om den plötsligt träffas av en annan bil i motsatt riktning, är det första som händer att accelerometergivaren som finns i bilen känner av en plötslig de-acceleration och utlöser ett externt avbrott till mikrokontrollern bilen. Baserat på det avbrottet producerar mikrokontrollern en elektrisk signal för att snabbt sätta i krockkuddarna. Mikrokontroller som finns i bilen övervakar många saker samtidigt som att känna av bilens hastighet, kontrollera andra sensorer, kontrollera luftkonditioneringstemperaturen etc. Så vad gör en plötslig öppning av en krockkudde på några sekunder? Svaret är avbrott, här används en avbrottssignal som har högsta prioritet av alla.
Ett annat enkelt exempel på avbrott är mobiltelefoner med pekskärm som har högsta prioritet än "Touch". Nästan alla elektroniska enheter har någon typ att avbryta för att "avbryta" den vanliga processen och göra några saker med högre prioritet på en viss händelse. Den vanliga processen återupptas efter avbrottet.
Så tekniskt sett är Interrupts en mekanism genom vilken en I / O eller instruktion kan stänga av det normala utförandet av processorn och få service som om den har högre prioritet. Till exempel kan en processor som utför en normal körning avbrytas av någon sensor för att utföra en viss process som finns i ISR (Interrupt Service Routine). Efter körning kan ISR-processorn återuppta normal körning.
Typer av avbrott
Det finns två typer av avbrott:
Maskinvaruavbrott: Det händer när en extern händelse inträffar som att en extern avbrottsstift ändrar sitt tillstånd från LÅG till HÖG eller HÖG till LÅG.
Programavbrott: Det händer enligt instruktionerna från programvaran. Till exempel Timeravbrott är programavbrott.
Avbryter i Arduino
Nu kommer vi att se hur man använder avbrott i Arduino Board. Den har två typer av avbrott:
- Extern avbrott
- Pin Change Interrupt
Extern avbrott:
Dessa avbrott tolkas av hårdvara och är mycket snabba. Dessa avbrott kan ställas in så att de aktiveras vid stigande eller fallande eller låga nivåer.
Arduino styrelse |
Externa avbrottsstift: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Stiftbytesavbrott:
Arduinos kan ha mer avbrotts stift möjliggörs genom att använda PIN Ändra avbrott. I ATmega168 / 328-baserade Arduino-kort kan alla stift eller alla de 20 signalstiften användas som avbrottsstift. De kan också utlösas med RISING- eller FALLING-kanter.
Använda avbrott i Arduino
För att använda avbrott i Arduino måste följande begrepp förstås.
Interrupt Service Routine (ISR)
Interrupt Service Routine eller en Interrupt-hanterare är en händelse som innehåller små instruktioner. När ett externt avbrott inträffar, kör processorn först den här koden som finns i ISR och återgår till tillstånd där den lämnade den normala körningen.
ISR har följande syntax i Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (stift): I Arduino Uno, NANO är stiften som används för avbrott 2,3 och i mega 2,3,18,19,20,21. Ange ingångsstiftet som används för extern avbrott här.
ISR: Det är en funktion som anropas när ett externt avbrott görs.
Läge: Typ av övergång att utlösa, t.ex. fallande, stigande, etc.
- STIGANDE: Att utlösa ett avbrott när stiftet går från LÅG till HÖG.
- FALLING: Att utlösa ett avbrott när stiften övergår från HÖG till LÅG.
- CHANGE: För att utlösa ett avbrott när stiftet övergår från LÅG till HÖG eller HÖG till LÅG (dvs när stiftets tillstånd ändras).
Vissa förhållanden när du använder Interrupt
- Interrupt Service Routine function (ISR) måste vara så kort som möjligt.
- Delay () -funktionen fungerar inte i ISR och bör undvikas.
I denna Arduino Interrupt-handledning ökas ett nummer från 0 och två tryckknappar används för att utlösa Interrupt, var och en är ansluten till D2 & D3. En LED används för att indikera avbrottet. Om en tryckknapp trycks ned tänds lysdioden och displayen visar avbrott2 och släcks, och när en annan tryckknapp trycks ned släcks lysdioden och displayen visar avbrott1 och släcks.
Komponenter krävs
- Arduino Board (I denna handledning används Arduino NANO)
- Tryckknapp - 2
- LED - 1
- Motstånd (10K) - 2
- LCD (16x2) - 1
- Brödbräda
- Anslutande ledningar
Kretsschema
Kretsförbindelse mellan Arduino Nano och 16x2 LCD-skärm:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Till Potentiometer Center PIN För kontroll av LCD-skärmens kontrast |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5V |
K |
GND |
Två tryckknappar är anslutna till Arduino Nano vid stift D2 och D3. De används för att använda två externa avbrott, en för att sätta på LED och en annan för att stänga av en LED. Varje tryckknapp har ett nedåtriktat motstånd på 10k anslutet till jord. Så när tryckknappen trycks in är den logisk HÖG (1) och när den inte trycks ned är den logisk LÅG (0). Ett neddragningsmotstånd är obligatoriskt, annars finns det flytande värden vid ingångsstiftet D2 & D3.
En LED används också för att indikera att ett avbrott har utlösts eller att en knapp har tryckts.
Arduino Interrupt Programmering
I denna handledning ökas ett tal från 0 som visas kontinuerligt i (16x2) LCD ansluten till Arduino Nano, när den vänstra tryckknappen (avbrytningsstift D3) trycks ned lyser lysdioden och displayen visar Interrupt2 och när höger tryckknapp (avbrytningsstift D2) trycks ned lyser lysdioden och displayen visar Interrupt1.
Komplett kod med en fungerande video ges i slutet av denna handledning.
1. Först inkluderas rubrikfilen för LCD-skärmen och sedan definieras LCD-stift som används för att ansluta till Arduino Nano.
#omfatta
2. Inne i funktionen tomrumsinställning (), visa först ett introduktionsmeddelande på LCD-skärmen. Läs mer om gränssnitt mellan LCD och Arduino här.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); fördröjning (3000); lcd.clear ();
3. I samma ogiltiga inställningsfunktion () måste ingångs- och utgångsstiftet anges. Stiftet D13 är anslutet till LED-anoden, så denna stift måste definieras som utgång.
pinMode (13, OUTPUT);
4. Nu kommer den viktigaste viktiga delen i programmeringen som är attachInterrupt () -funktionen, den ingår också i tomrumsinställningen ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Här specificeras att stift 2 är för externt avbrott, och knappen Pressed1 kallas när det finns RISING (LOW to HIGH) vid D2-stift. Och stift 3 är också för extern avbrott och knappPressed2-funktionen anropas när det stiger vid D3-stiftet.
5. Inuti tomrumsslingan () ökas ett tal (i) från noll och skrivs ut på LCD (16x2).
lcd.clear (); lcd.print ("RÄKNARE:"); lcd.print (i); ++ i; fördröjning (1000);
I samma ogiltiga slinga () används digitalWrite () på stiftet D13 där LED-anoden är ansluten. Beroende på värdet i variabel utgång lyser eller släcks lysdioden
digitalWrite (13, utgång);
6. Den viktigaste delen är att skapa en avbrottshanteringsfunktion enligt namnet som används i attachInterrupt () -funktionen.
Eftersom två avbrottsstift används 2 och 3 så krävs två ISR. Här i denna programmering används följande ISR
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interrupt 1"); }
Denna funktion utförs när tryckknappen på stift D2 trycks in (RISING EDGE). Denna funktion ändrar utgångens tillstånd till LÅG, vilket gör att lysdioden släcks och skriver ut "interrupt1" på LCD-skärmen.
knappTryckt2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Denna funktion utförs när tryckknappen på stift D3 trycks in. Denna funktion ändrar utgångens tillstånd till HÖG, vilket gör att LED tänds och skriver ut "interrupt2" på LCD-skärmen.
Arduino avbryter demonstration
1. När PUSH-KNAPPEN på vänster sida trycks in tänds lysdioden och LCD-skärmen visar Interrupt2.
2. När man trycker på PUSH-KNAPPEN på höger sida släcks lysdioden och LCD-skärmen visar Interrupt1
Så här kan ett avbrott vara användbart för att utlösa alla viktiga uppgifter mellan normal körning.