- Soorten onderbrekingen
- Onderbreekt in Arduino
- Interrupts gebruiken in Arduino
- Componenten vereist
- Schakelschema
- Arduino onderbreken programmeren
- Arduino Interrupt Demonstratie
Overweeg een snel rijdende auto, als deze plotseling wordt aangereden door een andere auto in tegengestelde richting, is het eerste dat gebeurt dat de versnellingsmetersensor in de auto een plotselinge afremming detecteert en een externe onderbreking activeert voor de microcontroller die aanwezig is in de auto. de auto. Op basis van die onderbreking produceert de microcontroller vervolgens een elektrisch signaal om de airbags onmiddellijk te activeren. Microcontrollers die in de auto aanwezig zijn, monitoren veel dingen tegelijkertijd, zoals het detecteren van de snelheid van de auto, het controleren van andere sensoren, het regelen van de temperatuur van de airconditioner, enz. Dus wat maakt een plotselinge opening van een airbag in seconden? Het antwoord is interrupts, hier wordt een interruptsignaal gebruikt dat de hoogste prioriteit heeft.
Een ander eenvoudig voorbeeld van Interrupts zijn mobiele telefoons met touchscreen die de hoogste prioriteit hebben boven het "Touch" -gevoel. Bijna elk elektronisch apparaat heeft een soort om te onderbreken om het reguliere proces te 'onderbreken' en dingen met een hogere prioriteit te doen bij een bepaalde gebeurtenis. Het normale proces wordt hervat nadat de onderbreking is uitgevoerd.
Technisch gezien is Interrupts dus een mechanisme waarmee een I / O of instructie de normale uitvoering van de processor kan opschorten en zichzelf kan laten onderhouden alsof deze een hogere prioriteit heeft. Een processor die een normale uitvoering uitvoert, kan bijvoorbeeld door een sensor worden onderbroken om een bepaald proces uit te voeren dat aanwezig is in ISR (Interrupt Service Routine). Na het uitvoeren van de ISR-processor kan de normale uitvoering weer worden hervat.
Soorten onderbrekingen
Er zijn twee soorten interrupts:
Hardware-onderbreking: dit gebeurt wanneer een externe gebeurtenis optreedt, zoals een externe interrupt-pin die de status verandert van LAAG naar HOOG of HOOG naar LAAG.
Software-onderbreking: het gebeurt volgens de instructies van de software. Bijvoorbeeld Timer interrupts zijn software-interrupt.
Onderbreekt in Arduino
Nu zullen we zien hoe we interrupts in Arduino Board kunnen gebruiken. Het heeft twee soorten interrupts:
- Externe onderbreking
- Pin wijzigen onderbreken
Externe onderbreking:
Deze interrupt wordt door hardware geïnterpreteerd en is erg snel. Deze onderbrekingen kunnen worden ingesteld om te worden geactiveerd in het geval van stijgende of dalende of lage niveaus.
Arduino-bord |
Externe onderbrekingspinnen: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Pin wijzigen onderbreekt:
Arduinos kunnen meer interrupt-pinnen hebben ingeschakeld door pin-change- interrupts te gebruiken. In op ATmega168 / 328 gebaseerde Arduino-kaarten kunnen alle pinnen of alle 20 signaalpinnen worden gebruikt als onderbrekingspinnen. Ze kunnen ook worden geactiveerd met RISING- of FALLING-randen.
Interrupts gebruiken in Arduino
Om interrupts in Arduino te gebruiken, moeten de volgende concepten worden begrepen.
Onderbrekingsserviceroutine (ISR)
Interrupt-serviceroutine of een interrupt-handler is een gebeurtenis met een kleine set instructies. Wanneer een externe interrupt optreedt, voert de processor eerst deze code uit die aanwezig is in ISR en keert terug naar de staat waar deze de normale uitvoering verliet.
ISR heeft de volgende syntaxis in Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, modus);
digitalPinToInterrupt (pin): In Arduino Uno, NANO zijn de pinnen die voor interrupt worden gebruikt 2,3 en in mega 2,3,18,19,20,21. Specificeer hier de invoerpin die wordt gebruikt voor externe onderbreking.
ISR: Het is een functie die wordt aangeroepen wanneer een externe onderbreking wordt uitgevoerd.
Modus: Type overgang om op te activeren, bijv. Vallen, stijgen, etc.
- RISING: Om een onderbreking te activeren wanneer de pin overgaat van LAAG naar HOOG.
- FALLING: Om een onderbreking te activeren wanneer de pin overgaat van HOOG naar LAAG.
- VERANDERING: Om een onderbreking te activeren wanneer de pin overgaat van LAAG naar HOOG of HOOG naar LAAG (dwz wanneer de pin-status verandert).
Enkele voorwaarden tijdens het gebruik van Interrupt
- De functie Interrupt Service Routine (ISR) moet zo kort mogelijk zijn.
- De functie Delay () werkt niet binnen ISR en moet worden vermeden.
In deze Arduino Interrupt-tutorial wordt een getal verhoogd vanaf 0 en worden twee drukknoppen gebruikt om Interrupt te activeren, elk is verbonden met D2 en D3. Een LED wordt gebruikt om de onderbreking aan te geven. Als een drukknop wordt ingedrukt, gaat de led AAN en het display toont interrupt2 en gaat uit, en wanneer een andere drukknop wordt ingedrukt, gaat de led UIT en toont het display interrupt1 en gaat uit.
Componenten vereist
- Arduino Board (in deze tutorial wordt Arduino NANO gebruikt)
- Drukknop - 2
- LED - 1
- Weerstand (10K) - 2
- LCD (16x2) - 1
- Broodplank
- Verbindingsdraden
Schakelschema
Circuitverbinding tussen Arduino Nano en 16x2 LCD-scherm:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Naar Potentiometer Center PIN Voor het regelen van het contrast van het LCD-scherm |
RS |
D7 |
RW |
GND |
E. |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
EEN |
+ 5V |
K |
GND |
Twee drukknoppen zijn verbonden met Arduino Nano op pin D2 & D3. Ze worden gebruikt voor het gebruik van twee externe interrupts, een om de LED AAN te zetten en een andere om een LED UIT te schakelen. Elke drukknop heeft een pull-down weerstand van 10k aangesloten op aarde. Dus wanneer de drukknop wordt ingedrukt is het logisch HOOG (1) en wanneer niet ingedrukt is het logisch LAAG (0). Een pull-down-weerstand is verplicht, anders zijn er zwevende waarden op de ingangspen D2 en D3.
Een LED wordt ook gebruikt om aan te geven dat een onderbreking is geactiveerd of dat een knop is ingedrukt.
Arduino onderbreken programmeren
In deze tutorial wordt een nummer opgehoogd vanaf 0 dat continu wordt weergegeven in (16x2) LCD die is aangesloten op de Arduino Nano, telkens wanneer de linkerdrukknop (onderbrekingspin D3) wordt ingedrukt, gaat de LED branden en wordt op het display Interrupt2 weergegeven, en wanneer de rechterdrukknop (interrupt pin D2) wordt ingedrukt, de LED gaat UIT en het display toont Interrupt1.
Aan het einde van deze tutorial wordt de volledige code met een werkende video gegeven.
1. Eerst wordt het header-bestand voor het LCD-scherm meegeleverd en vervolgens worden de LCD-pinnen die worden gebruikt om verbinding te maken met de Arduino Nano gedefinieerd.
# omvatten
2. Geef in de functie void setup () eerst een introbericht weer op het LCD-scherm. Lees hier meer over het koppelen van LCD met Arduino.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); vertraging (3000); lcd.clear ();
3. Vervolgens moeten in dezelfde void setup () functie de input en output pinnen worden gespecificeerd. De pin D13 is verbonden met de Anode van de LED, dus deze pin moet als output worden gedefinieerd.
pinMode (13, UITGANG);
4. Nu komt het belangrijkste belangrijke onderdeel van het programmeren , de functie attachInterrupt (), deze is ook opgenomen in de void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Hier wordt gespecificeerd dat pin 2 voor externe interrupt is, en de buttonPressed1- functie wordt aangeroepen wanneer er RISING (LOW to HIGH) is op D2 pin. En pin 3 is ook voor externe interrupt en buttonPressed2-functie wordt aangeroepen wanneer er RISING is op D3-pin.
5. Binnen de lege lus () wordt een getal (i) vanaf nul opgehoogd en op het LCD-scherm (16x2) afgedrukt.
lcd.clear (); lcd.print ("COUNTER:"); lcd.print (i); ++ i; vertraging (1000);
In dezelfde void loop () wordt digitalWrite () gebruikt op de pin D13 waar de anode van de LED is aangesloten. Afhankelijk van de waarde in de variabele output gaat de LED aan of uit
digitalWrite (13, uitvoer);
6. Het belangrijkste onderdeel is het maken van een interrupt-handlerfunctie volgens de naam die wordt gebruikt in de functie attachInterrupt () .
Omdat er twee interruptpinnen worden gebruikt 2 en 3, zijn er dus twee ISR nodig. Hier in deze programmering worden volgende ISR gebruikt
knop ingedrukt1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interrupt 1"); }
Deze functie wordt uitgevoerd wanneer de drukknop op de pin D2 wordt ingedrukt (RISING EDGE). Deze functie verandert de status van de output naar LOW, waardoor de LED UIT gaat en de "interrupt1" op het LCD-scherm wordt afgedrukt.
knop ingedrukt2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Deze functie wordt uitgevoerd wanneer de drukknop op de pin D3 wordt ingedrukt. Deze functie verandert de status van de output naar HOOG, waardoor de LED AAN gaat en de "interrupt2" op het LCD-scherm wordt afgedrukt.
Arduino Interrupt Demonstratie
1. Wanneer de PUSH BUTTON aan de linkerkant wordt ingedrukt, gaat de LED AAN en geeft het LCD-scherm Interrupt2 weer.
2. Wanneer de DRUKKNOP aan de rechterkant wordt ingedrukt, gaat de LED UIT en geeft het LCD-scherm Interrupt1 weer
Dit is hoe een onderbreking nuttig kan zijn om elke belangrijke taak tussen de normale uitvoering te activeren.