- Keskeytysten tyypit
- Keskeytykset Arduinossa
- Keskeytysten käyttäminen Arduinossa
- Tarvittavat komponentit
- Piirikaavio
- Arduino-keskeytysohjelmointi
- Arduino-keskeytysesittely
Tarkastellaan nopeasti liikkuvaa autoa, jos se törmää äkkiä toiseen autoon vastakkaiseen suuntaan, tapahtuu ensin, että autossa oleva kiihtyvyysanturi tunnistaa äkillisen kiihtyvyyden ja laukaisee ulkoisen keskeytyksen mikro-ohjaimessa. auto. Sitten tämän keskeytyksen perusteella mikro-ohjain tuottaa sähköisen signaalin turvatyynyjen avaamiseksi välittömästi. Autossa olevat mikro-ohjaimet seuraavat monia asioita samanaikaisesti, kuten auton nopeuden tunnistamista, muiden antureiden tarkistamista, ilmastointilaitteen lämpötilan säätämistä jne. Joten mikä tekee turvatyynyn äkillisestä avautumisesta sekunneissa? Vastaus on keskeytyksiä, keskeytyssignaali käytetään tässä, joka on korkein prioriteetti kaikkien.
Toinen yksinkertainen esimerkki keskeytyksistä on kosketusnäyttöiset matkapuhelimet, joilla on korkein prioriteetti kosketusnäytöllä. Lähes jokaisella elektronisella laitteella on jonkinlainen keskeytys, joka "keskeyttää" säännöllisen prosessin ja tekee joitain tärkeämpiä asioita tietyssä tapahtumassa. Tavallinen prosessi jatkuu keskeytyksen tarjoamisen jälkeen.
Joten teknisesti keskeytykset ovat mekanismi, jolla I / O tai käsky voi keskeyttää prosessorin normaalin suorituksen ja palvelee itseään, kuten sillä on korkeampi prioriteetti. Esimerkiksi jokin anturi voi keskeyttää normaalin suorituksen suorittavan prosessorin suorittamaan tietyn prosessin, joka on läsnä ISR: ssä (Interrupt Service Routine). Suorituksen jälkeen ISR-prosessori voi jälleen palata normaaliin suoritukseen.
Keskeytysten tyypit
Keskeytyksiä on kahdenlaisia:
Laitteiston keskeytys: Se tapahtuu, kun ulkoinen tapahtuma tapahtuu, kun ulkoinen keskeytystappi muuttaa tilansa LOW-tilasta HIGH-tilaan tai HIGH-tilasta LOW-tilaan.
Ohjelmiston keskeytys: Se tapahtuu ohjelmiston ohjeiden mukaan. Esimerkiksi ajastinkeskeytykset ovat ohjelmiston keskeytyksiä.
Keskeytykset Arduinossa
Nyt näemme kuinka keskeytyksiä käytetään Arduino Boardissa. Siinä on kahden tyyppisiä keskeytyksiä:
- Ulkoinen keskeytys
- Pin-vaihdon keskeytys
Ulkoinen keskeytys:
Laitteisto tulkitsee nämä keskeytykset ja ovat erittäin nopeita. Nämä keskeytykset voidaan asettaa laukaisemaan RISING-, FALLING- tai LOW-tasoilla.
Arduino-lauta |
Ulkoiset keskeytysnastat: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Tapinvaihdon keskeytykset:
Arduinosilla voi olla enemmän keskeytysnastoja käytössä käyttämällä pin-vaihdon keskeytyksiä. ATmega168 / 328-pohjaisissa Arduino-laudoissa mitä tahansa nastoja tai kaikkia 20 signaalinasta voidaan käyttää keskeytysnastoina. Ne voidaan myös laukaista käyttämällä RISING tai FALLING reunoja.
Keskeytysten käyttäminen Arduinossa
Keskeytysten käyttämiseksi Arduinossa on ymmärrettävä seuraavat käsitteet.
Keskeytä palvelurutiini (ISR)
Keskeytyspalvelurutiini tai keskeytyskäsittelijä on tapahtuma, jossa on pieni joukko ohjeita. Kun ulkoinen keskeytys tapahtuu, prosessori suorittaa ensin nämä ISR: ssä olevat koodit ja palaa takaisin tilaan, jossa se jätti normaalin suorituksen.
ISR: llä on seuraava syntakse Arduinossa:
attachInterrupt (digitalPinToInterrupt (nasta), ISR, tila);
digitalPinToInterrupt (tappi): Arduino Unossa NANO: ssa keskeytykseen käytetyt nastat ovat 2,3 ja mega 2,3,18,19,20,21. Määritä tässä sisääntulo, jota käytetään ulkoiseen keskeytykseen.
ISR: Se on toiminto, jota kutsutaan, kun ulkoinen keskeytys tehdään.
Tila: Käynnistettävän siirtymän tyyppi, esimerkiksi putoaminen, nousu jne.
- RISING: Käynnistää keskeytyksen, kun tappi siirtyy LOW-tilasta HIGH-tilaan.
- FALLING: Keskeytys, kun tappi siirtyy HIGH-tilasta LOW-tilaan.
- MUUTOS: Käynnistää keskeytyksen, kun tappi siirtyy LOW-tilasta HIGH- tai HIGH-tilasta LOW-tilaan (ts. Kun tappi muuttuu).
Jotkut olosuhteet, kun käytät keskeytystä
- Palvelun keskeytysrutiinitoiminnon (ISR) on oltava mahdollisimman lyhyt.
- Delay () -toiminto ei toimi ISR: n sisällä, ja sitä tulisi välttää.
Tässä Arduino Interrupt -opetusohjelmassa numeroa lisätään 0: sta ja keskeytyksen käynnistämiseen käytetään kahta painonappia, joista kukin on kytketty D2 & D3: een. LEDiä käytetään osoittamaan keskeytys. Jos yhtä painiketta painetaan, led menee PÄÄLLE ja näytössä näkyy keskeytys2 ja sammuu, ja kun toista painonappia painetaan, led sammuu ja näytössä näkyy keskeytys1 ja sammuu.
Tarvittavat komponentit
- Arduino Board (Tässä opetusohjelmassa käytetään Arduino NANO: ta)
- Painike - 2
- LED - 1
- Vastus (10K) - 2
- LCD (16x2) - 1
- Leipälauta
- Johtojen liittäminen
Piirikaavio
Piiriliitäntä Arduino nanon ja 16x2 LCD-näytön välillä:
LCD-näyttö |
Arduino Nano |
VSS |
GND |
VDD |
+ 5 V |
V0 |
Potentiometrin keskikoodiin Nestekidenäytön kontrastin hallintaan |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
A |
+ 5 V |
K |
GND |
Kaksi painonappia on kytketty Arduino nanoon napoissa D2 ja D3. Niitä käytetään kahden ulkoisen keskeytyksen käyttämiseen, toisen LEDin kytkemiseen päälle ja toisen LEDin sammuttamiseen. Jokaisessa painikkeessa on maahan kytketty 10 k: n alasvetovastus. Joten kun painiketta painetaan, se on logiikkaa KORKEA (1) ja kun sitä ei paineta, se on logiikkaa MATALA (0). Vetovastus on pakollinen, muuten tulotapissa D2 ja D3 on kelluvia arvoja.
LED käytetään myös osoittamaan, että keskeytys on lauennut tai painiketta on painettu.
Arduino-keskeytysohjelmointi
Tässä opetusohjelmassa numeroa lisätään 0: sta, joka näkyy jatkuvasti (16x2) LCD-näytössä, joka on kytketty Arduino Nanoon, aina kun vasenta painonappia (keskeytysnasta D3) painetaan, LED syttyy ja näytössä näkyy Keskeytä2 ja kun oikea painike (keskeytysnasta D2) painetaan, LED sammuu ja näytössä näkyy Keskeytys1.
Täydellinen koodi toimivalla videolla on tämän opetusohjelman lopussa.
1. Ensin lisätään LCD-näytön otsikkotiedosto ja sitten määritetään LCD-nastat, joita käytetään yhteyden muodostamiseen Arduino Nanoon.
#sisältää
2. Näytä void setup () -toiminnon sisällä ensin LCD-näytöllä joitain esittelyviestejä. Lisätietoja LCD-näytön liittämisestä Arduinoon on täällä.
lcd-alku (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); viive (3000); lcd.clear ();
3. Sitten samassa void setup () -toiminnossa tulo- ja lähtönastat on määritettävä. Tappi D13 on kytketty LEDien anodiin, joten tämä tappi on määriteltävä lähdöksi.
pinMode (13, OUTPUT);
4. Nyt ohjelmoinnin tärkein osa on attachInterrupt () -toiminto, se sisältyy myös void setupiin ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Tässä määritetään, että nasta 2 on ulkoista keskeytystä varten ja painike 1 -toiminto kutsutaan, kun D2-nastassa on RISING (LOW to HIGH). Ja tappi 3 on tarkoitettu myös ulkoiselle keskeytykselle ja painike 2 -toiminto kutsutaan, kun D3-nastassa on RISING.
5. Tyhjän silmukan () sisällä numero (i) kasvaa nollasta ja tulostetaan nestekidenäytölle (16x2).
lcd.clear (); lcd.print ("LASKURI:"); lcd.print (i); ++ i; viive (1000);
Samassa tyhjiösilmukassa () digitaalitekniikkaa () käytetään tapissa D13, johon LEDien anodi on kytketty. LED muuttuu muuttuvan lähdön arvosta riippuen
digitalWrite (13, lähtö);
6. Tärkein osa on keskeytyskäsittelyfunktion luominen sen nimen mukaan, jota käytetään attachInterrupt () -toiminnossa.
Koska käytetään kahta keskeytysnastaa 2 ja 3, tarvitaan kaksi ISR: ää. Tässä tässä ohjelmoinnissa käytetään seuraavia ISR: itä
painikePainettu1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Keskeytys 1"); }
Tämä toiminto suoritetaan, kun tapin D2 painonappia painetaan (RISING EDGE). Tämä toiminto muuttaa lähdön tilaksi LOW, jolloin LED sammuu ja tulostaa “keskeytys1” LCD-näytölle.
buttonPressed2 ():
void buttonPressed2 () {output = HIGH; lcd.setCursor (0,1); lcd.print ("Keskeytys2"); }
Tämä toiminto suoritetaan, kun tapin D3 painonappia painetaan. Tämä toiminto muuttaa lähdön tilaksi HIGH, jolloin LED syttyy ja tulostaa “keskeytys2” LCD-näytölle.
Arduino-keskeytysesittely
1. Kun vasemmanpuoleista painiketta painetaan, LED syttyy ja nestekidenäytössä näkyy Keskeytä2.
2. Kun painetaan oikean puolen PUSH-PAINIKETTA, LED sammuu ja nestekidenäytössä näkyy Keskeytä1
Näin keskeytys voi olla hyödyllinen minkä tahansa tärkeän tehtävän käynnistämiseksi normaalin suorituksen välillä.