- Typer af afbrydelser
- Afbryder i Arduino
- Brug af Interrupts i Arduino
- Komponenter, der kræves
- Kredsløbsdiagram
- Arduino Afbryd programmering
- Arduino afbryder demonstration
Overvej en hurtig bevægelig bil, hvis den pludselig bliver ramt af en anden bil i modsat retning, er det første, der sker, at accelerometer-sensoren, der er til stede i bilen, registrerer en pludselig de-acceleration og udløser en ekstern afbrydelse til den mikrocontroller, der er til stede i bilen. Derefter producerer mikrokontrolleren baseret på denne afbrydelse et elektrisk signal til straks at udløse airbags. Mikrocontrollere, der er til stede i bilen, overvåger mange ting samtidigt, som f.eks. At registrere bilens hastighed, kontrollere andre sensorer, kontrollere klimaanlæggets temperatur osv. Så hvad gør en pludselig åbning af en airbag på få sekunder? Svaret er afbrydelser, her anvendes et afbrydesignal, der har den højeste prioritet af alle.
Et andet simpelt eksempel på Interrupts er mobiltelefoner med berøringsskærm, der har den højeste prioritet i forhold til "Touch". Næsten alle elektroniske enheder har en slags at afbryde for at 'afbryde' den regelmæssige proces og gøre nogle ting med højere prioritet på en bestemt begivenhed. Den regelmæssige proces genoptages efter afbrydelse af afbrydelsen.
Så teknisk set er Interrupts en mekanisme, hvormed en I / O eller instruktion kan suspendere den normale udførelse af processoren og får sig selv serviceret, som om den har højere prioritet. For eksempel kan en processor, der udfører en normal udførelse, afbrydes af en eller anden sensor for at udføre en bestemt proces, der er til stede i ISR (Interrupt Service Routine). Efter udførelse kan ISR-processoren igen genoptage den normale udførelse.
Typer af afbrydelser
Der er to typer afbrydelser:
Hardware Interrupt: Det sker, når en ekstern begivenhed opstår som en ekstern interrupt pin ændrer sin tilstand fra LAV til HØJ eller HØJ til LAV.
Software Interrupt: Det sker i henhold til instruktionerne fra softwaren. For eksempel er Timer-afbrydelser softwareafbrydelse.
Afbryder i Arduino
Nu vil vi se, hvordan du bruger afbrydelser i Arduino Board. Det har to typer afbrydelser:
- Ekstern afbrydelse
- Pin Change Interrupt
Ekstern afbrydelse:
Disse afbrydelser fortolkes af hardware og er meget hurtige. Disse afbrydelser kan indstilles til at udløse i tilfælde af RISING- eller FALLING- eller LOW-niveauer.
Arduino Board |
Eksterne afbrydestifter: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Pin Change-afbrydelser:
Arduinos kan have flere afbrydestifter aktiveret ved hjælp af afbrydelser af stift. I ATmega168 / 328-baserede Arduino-kort kan enhver stift eller alle de 20 signalstifter bruges som afbrydestifter. De kan også udløses ved hjælp af RISING- eller FALLING-kanter.
Brug af Interrupts i Arduino
For at bruge afbrydelser i Arduino skal følgende begreber forstås.
Interrupt Service Routine (ISR)
Interrupt Service Routine eller en Interrupt handler er en begivenhed, der indeholder et lille sæt instruktioner. Når der opstår en ekstern afbrydelse, udfører processoren først denne kode, der er til stede i ISR, og vender tilbage til tilstand, hvor den forlod den normale udførelse.
ISR har følgende syntaks i Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, mode);
digitalPinToInterrupt (pin): I Arduino Uno er NANO benene, der bruges til afbrydelse, 2,3 og i mega 2,3,18,19,20,21. Angiv den indgangsstift, der bruges til ekstern afbrydelse her.
ISR: Det er en funktion, der kaldes, når der foretages en ekstern afbrydelse.
Mode: Type overgang, der skal udløses, f.eks. Falder, stiger osv.
- RISING: At udløse et afbrydelse, når stiften går fra LAV til HØJ.
- FALLING: At udløse et afbrydelse, når stiften går fra HIGH til LOW.
- ÆNDRING: At udløse et afbrydelse, når stiften går fra LAV til HØJ eller HØJ til LAV (dvs. når pin-tilstanden ændres).
Nogle forhold, mens du bruger Afbryd
- Interrupt Service Routine-funktionen (ISR) skal være så kort som muligt.
- Funktionen Delay () fungerer ikke inden for ISR og bør undgås.
I denne Arduino Interrupt-tutorial øges et tal fra 0, og to trykknapper bruges til at udløse Interrupt, hver enkelt er forbundet til D2 & D3. En LED bruges til at indikere afbrydelsen. Hvis der trykkes på en trykknap, tændes lysdioden, og displayet viser afbrydelse2 og slukker, og når der trykkes på en anden trykknap, slukkes lysdioden, og displayet viser afbrydelse1 og slukker.
Komponenter, der kræves
- Arduino Board (I denne vejledning bruges Arduino NANO)
- Trykknap - 2
- LED - 1
- Modstand (10K) - 2
- LCD (16x2) - 1
- Brødbræt
- Tilslutning af ledninger
Kredsløbsdiagram
Kredsforbindelse mellem Arduino Nano og 16x2 LCD-skærm:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Til Potentiometer Center PIN Til styring af LCD-kontrast |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
EN |
+ 5V |
K |
GND |
To trykknapper er forbundet til Arduino Nano ved pin D2 & D3. De bruges til at bruge to eksterne afbrydelser, en til at tænde LED og en anden til at slukke for en LED. Hver trykknap har en modstand på 10 k, der er tilsluttet jorden. Så når der trykkes på trykknappen, er det logisk HØJ (1), og når det ikke trykkes, er det logisk LAVT (0). En pull down-modstand er obligatorisk, ellers vil der være flydende værdier ved indgangsstiften D2 & D3.
En LED bruges også til at indikere, at en Afbrydelse er udløst, eller at der er trykket på en knap.
Arduino Afbryd programmering
I denne tutorial øges et tal fra 0, der vises kontinuerligt i (16x2) LCD tilsluttet Arduino Nano, når der trykkes på venstre trykknap (afbrydestift D3), lyser LED'en og displayet viser Interrupt2, og når den højre trykknap (afbrydestift D2) trykkes ned, lysdioden slukkes, og displayet viser Interrupt1.
Komplet kode med en fungerende video findes i slutningen af denne tutorial.
1. Først inkluderes headerfilen til LCD-skærmen, og derefter defineres de LCD-ben, der bruges til at forbinde med Arduino Nano.
#omfatte
2. Inden i tomrumsopsætningsfunktionen () skal du først vise en introduktionsmeddelelse på LCD-displayet. Lær mere om grænseflade mellem LCD og 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 opsætningsfunktion () skal input- og outputstifter angives. Stiften D13 er tilsluttet LED-anoden, så denne stift skal defineres som output.
pinMode (13, OUTPUT);
4. Nu kommer den vigtigste vigtige del i programmeringen, der er attachInterrupt () -funktionen, den er også inkluderet i hulrumsopsætningen ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Her specificeres det, at pin 2 er til ekstern afbrydelse, og at knappen Pressed1 kaldes, når der er RISING (LOW to HIGH) ved D2 pin. Og pin 3 er også til ekstern afbrydelse og knapPressed2-funktion kaldes, når der stiger ved D3-pin.
5. Inde i hulrummet () øges et tal (i) fra nul og udskrives på LCD (16x2).
lcd.clear (); lcd.print ("TÆLLER:"); lcd.print (i); ++ i; forsinkelse (1000);
I samme ugyldige sløjfe () anvendes digitalWrite () på stiften D13, hvor LED's anode er tilsluttet. Afhængig af værdien i variabelt output vil LED tænde eller slukke
digitalWrite (13, output);
6. Den vigtigste del er at oprette en interrupt handler-funktion i henhold til det navn, der bruges i attachInterrupt () -funktionen.
Da der anvendes to afbrydestifter 2 og 3, kræves der to ISR. Her i denne programmering anvendes følgende ISR
buttonPressed1 ():
ugyldig knapPresset1 () { output = LAV; lcd.setCursor (0,1); lcd.print ("Interrupt 1"); }
Denne funktion udføres, når der trykkes på trykknap på pin D2 (RISING EDGE). Denne funktion ændrer outputstatus til LAV, hvilket får LED til at slukke og udskriver "interrupt1" på LCD-displayet.
buttonPressed2 ():
ugyldig knapPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Interrupt2"); }
Denne funktion udføres, når der trykkes på trykknap på pin D3. Denne funktion ændrer outputstatus til HIGH, hvilket får LED til at tænde og udskriver "interrupt2" på LCD-displayet.
Arduino afbryder demonstration
1. Når der trykkes på PUSH KNAP på venstre side, lyser LED'en TÆNDT, og LCD viser Interrupt2.
2. Når der trykkes på PUSH-KNAPPEN på højre side, slukkes LED'en, og LCD-displayet viser Interrupt1
Sådan kan en Afbrydelse være nyttig til at udløse enhver vigtig opgave imellem normal udførelse.