- Typer avbrudd
- Avbryter i Arduino
- Bruke Interrupts i Arduino
- Komponenter kreves
- Kretsdiagram
- Arduino avbruddsprogrammering
- Arduino avbryter demonstrasjon
Vurder en bil i rask bevegelse, hvis den plutselig blir truffet av en annen bil i motsatt retning, er det første som skjer at akselerometersensoren som er tilstede i bilen, oppdager en plutselig dekselerasjon og utløser et eksternt avbrudd til mikrokontrolleren som er tilstede i bilen. Basert på dette avbruddet produserer mikrokontrolleren et elektrisk signal for å utløse kollisjonsputene umiddelbart. Mikrokontrollere som er til stede i bilen, overvåker mange ting samtidig, for eksempel å registrere hastigheten på bilen, sjekke andre sensorer, kontrollere klimaanleggstemperaturen osv. Så hva gjør en plutselig åpning av en kollisjonspute på få sekunder? Svaret er avbrudd, her brukes et avbruddssignal som har høyest prioritet av alle.
Et annet enkelt eksempel på Interrupts er mobiltelefoner med berøringsskjerm som har høyest prioritet til "Touch" -følelsen. Nesten alle elektroniske enheter har noe å avbryte for å 'avbryte' den vanlige prosessen og gjøre noen ting med høyere prioritet på en bestemt hendelse. Den vanlige prosessen gjenopptas etter å ha betjent avbruddet.
Så teknisk sett er Interrupts en mekanisme der en I / O eller instruksjon kan stanse den normale kjøringen av prosessoren og få betjent seg selv som den har høyere prioritet. For eksempel kan en prosessor som utfører en normal utførelse bli avbrutt av en eller annen sensor for å utføre en bestemt prosess som er tilstede i ISR (Interrupt Service Routine). Etter at ISR-prosessoren er utført, kan den gjenoppta normal utførelse igjen.
Typer avbrudd
Det er to typer avbrudd:
Maskinvareavbrudd: Det skjer når en ekstern hendelse oppstår som en ekstern avbrytingspinne endrer status fra LAV til HØY eller HØY til LAV.
Programvareavbrudd: Det skjer i henhold til instruksjonene fra programvaren. For eksempel er Timer-avbrudd programvareavbrudd.
Avbryter i Arduino
Nå skal vi se hvordan du bruker avbrudd i Arduino Board. Den har to typer avbrudd:
- Ekstern avbrytelse
- Pin Change Interrupt
Ekstern avbrudd:
Disse avbruddene tolkes av maskinvare og er veldig raske. Disse avbruddene kan settes til å utløses ved stigning eller fallende eller lavt nivå.
Arduino Board |
Eksterne avbrytestifter: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Pin Change Interrupts:
Arduinos kan ha flere avbrudds pinner muliggjort ved hjelp av tappen endrings avbrudd. I ATmega168 / 328-baserte Arduino-kort kan alle pinner eller alle de 20 signalpinnene brukes som avbruddspinner. De kan også utløses ved hjelp av RISING- eller FALLING-kanter.
Bruke Interrupts i Arduino
For å bruke avbrudd i Arduino, må følgende begreper forstås.
Interrupt Service Routine (ISR)
Interrupt Service Routine eller en Interrupt handler er en hendelse som har lite sett med instruksjoner. Når det oppstår et eksternt avbrudd, utfører prosessoren først denne koden som er tilstede i ISR, og returnerer tilbake til tilstanden der den forlot normal utførelse.
ISR har følgende syntaks i Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): I Arduino Uno, NANO, er pinnene som brukes til avbrudd 2,3 og i mega 2,3,18,19,20,21. Spesifiser inngangspinnen som brukes til ekstern avbrudd her.
ISR: Det er en funksjon som kalles når en ekstern avbrudd er gjort.
Mode: Type overgang å utløse, f.eks. Fallende, stigende osv.
- RISING: Å utløse et avbrudd når pinnen går fra LAV til HØY.
- FALLING: Å utløse et avbrudd når pinnen går fra HØY til LAV.
- ENDRE: Å utløse et avbrudd når pinnen går fra LAV til HØY eller HØY til LAV (dvs. når tapptilstanden endres).
Noen forhold mens du bruker Interrupt
- Interrupt Service Routine function (ISR) må være så kort som mulig.
- Delay () -funksjonen fungerer ikke i ISR og bør unngås.
I denne Arduino Interrupt-opplæringen økes et tall fra 0 og to trykknapper brukes til å utløse Interrupt, hver er koblet til D2 & D3. En LED brukes til å indikere avbruddet. Hvis du trykker på en trykknapp, vil lysdioden PÅ og displayet viser avbrudd2 og slukkes, og når du trykker på en annen trykknapp, slukkes lysdioden og displayet viser avbrudd1 og slukker.
Komponenter kreves
- Arduino Board (I denne opplæringen brukes Arduino NANO)
- Trykknapp - 2
- LED - 1
- Motstand (10K) - 2
- LCD (16x2) - 1
- Brødtavle
- Koble ledninger
Kretsdiagram
Kretsforbindelse mellom Arduino Nano og 16x2 LCD-skjerm:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Til Potentiometer Center PIN For å kontrollere kontrasten på LCD-skjermen |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
EN |
+ 5V |
K |
GND |
To trykknapper er koblet til Arduino Nano på pin D2 og D3. De brukes til å bruke to eksterne avbrudd, en for å slå LED på og en for å slå AV en LED. Hver trykknapp har en nedtrekksmotstand på 10k koblet til bakken. Så når trykk på knappen trykkes er det logisk HØY (1) og når den ikke trykkes er det logisk LAV (0). En nedtrekksmotstand er obligatorisk, ellers vil det være flytende verdier ved inngangspinnen D2 & D3.
En LED brukes også til å indikere at et avbrudd er utløst eller at en knapp er trykket på.
Arduino avbruddsprogrammering
I denne opplæringen økes et tall fra 0 som vises kontinuerlig i (16x2) LCD koblet til Arduino Nano, når venstre trykknapp (avbryterpinne D3) trykkes, lyser LED-lampen og displayet viser Interrupt2, og når høyre trykknapp (avbryterpinne D2) trykkes, lysdioden slukkes og displayet viser Avbryt1.
Komplett kode med en arbeidsvideo er gitt på slutten av denne opplæringen.
1. Først er toppfilen for LCD-skjermen inkludert, og deretter defineres LCD-pinnene som brukes i forbindelse med Arduino Nano.
#inkludere
2. Inne i tomt oppsett () -funksjonen, vis først en intro-melding på LCD-skjermen. Lær mer om grensesnitt LCD med Arduino her.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); forsinkelse (3000); lcd.clear ();
3. I samme ugyldige oppsett () -funksjon må inngangs- og utgangspinnene spesifiseres. Pinnen D13 er koblet til LED-anoden, så denne pinnen må defineres som utgang.
pinMode (13, OUTPUT);
4. Nå kommer den viktigste viktige delen i programmeringen som er attachInterrupt () -funksjonen, den er også inkludert i tomrumsoppsettet ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Her er det spesifisert at pin 2 er for ekstern avbrudd, og buttonPressed1- funksjon kalles når det er RISING (LOW to HIGH) ved D2 pin. Og pin 3 er også for ekstern avbrytelse og buttonPressed2-funksjon kalles når det er RISING ved D3-pin.
5. Inne i tomgangssløyfen () økes et tall (i) fra null og skrives ut på LCD (16x2).
lcd.clear (); lcd.print ("TELLER:"); lcd.print (i); ++ i; forsinkelse (1000);
I samme ugyldige sløyfe () brukes digitalWrite () på pinnen D13 der LED-anoden er koblet til. Avhengig av verdien i variabel utgang vil LED slå seg på eller av
digitalWrite (13, utgang);
6. Den viktigste delen er å lage en avbruddshåndtererfunksjon i henhold til navnet som brukes i attachInterrupt () -funksjonen.
Ettersom to avbruddspinner brukes 2 og 3, kreves det to ISR. Her i denne programmeringen brukes følgende ISR
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interrupt 1"); }
Denne funksjonen utføres når trykknappen på pinnen D2 trykkes (RISING EDGE). Denne funksjonen endrer utgangsstatusen til LAV og får LED til å slå seg AV og skriver ut "interrupt1" på LCD-skjermen.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Denne funksjonen utføres når trykk på knappen på pinnen D3 trykkes. Denne funksjonen endrer utgangsstatusen til HØG og får LED til å slå seg på og skriver ut "interrupt2" på LCD-skjermen.
Arduino avbryter demonstrasjon
1. Når PUSH-KNAPPEN på venstre side trykkes inn, lyser LED-lampen og LCD-skjermen viser Interrupt2.
2. Når du trykker på PUSH-KNAPPEN på høyre side, slukkes LED-lampen og LCD-skjermen viser Interrupt1
Slik kan et avbrudd være nyttig for å utløse en hvilken som helst viktig oppgave mellom normal utførelse.