- Mikä on TIMER sulautetussa elektroniikassa?
- Arduino-ajastinrekisterit
- Arduino-ajastin keskeyttää
- Tarvittavat komponentit
- Piirikaavio
- Arduino UNO Timers -ohjelmointi
Arduino Development Platform kehitettiin alun perin vuonna 2005 helppokäyttöisenä ohjelmoitavana laitteena taidesuunnitteluprojekteihin. Sen tarkoituksena oli auttaa muita kuin insinöörejä työskentelemään peruselektroniikan ja mikro-ohjainten kanssa ilman paljon ohjelmointitietoa. Mutta sitten, helppokäyttöisen luonteensa vuoksi, elektroniikan aloittelijat ja harrastajat ympäri maailmaa sovittivat sen pian, ja nykyään se on jopa suositeltavin prototyyppikehitykseen ja POC-kehitykseen.
Vaikka on hyvä aloittaa Arduinolla, on tärkeää siirtyä hitaasti ydinmikrokontrollereihin, kuten AVR, ARM, PIC, STM jne., Ja ohjelmoida se alkuperäisillä sovelluksillaan. Tämä johtuu siitä, että Arduino-ohjelmointikieli on erittäin helppo ymmärtää, koska suurin osa työstä tehdään ennalta rakennetuilla toiminnoilla, kuten digitalWrite (), AnalogWrite (), Delay () jne., Kun taas matalan koneen kieli on piilossa niiden takana. Arduino-ohjelmat eivät ole samanlaisia kuin muut sulautetut C-koodaukset, joissa käsittelemme rekisteribittejä ja teemme niistä korkeat tai matalat ohjelmamme logiikan perusteella.
Arduino-ajastimet viipymättä:
Siksi ymmärtääksemme, mitä tapahtuu ennalta rakennettujen toimintojen sisällä, meidän on kaivettava näiden termien taakse. Esimerkiksi silloin, kun viive () funktiota käytetään sen todellinen asettaa ajastin ja laskuri rekisteri bittiä on ATmega mikro.
Tässä arduino-ajastimen opetusohjelmassa aiomme välttää tämän delay () -toiminnon käytön ja käsitellä sen sijaan itse rekisteriä. Hyvä asia on, että voit käyttää samaa Arduino IDE: tä tähän. Asetamme ajastinrekisteribitimme ja vaihdamme ajastimen ylivuotokatkaisun avulla LED: n aina, kun keskeytys tapahtuu. Ajastinbitin esilatausarvoa voidaan säätää myös painikkeilla keskeytyksen keston säätämiseksi.
Mikä on TIMER sulautetussa elektroniikassa?
Ajastin on eräänlainen keskeytys. Se on kuin yksinkertainen kello, joka voi mitata tapahtuman aikavälejä. Jokaisella mikrokontrollerilla on kello (oskillaattori), sanotaan Arduino Unossa, että se on 16 MHz. Tämä on vastuussa nopeudesta. Korkeampi kellotaajuus on korkeampi käsittelynopeus. Ajastin käyttää laskuria, joka laskee tietyllä nopeudella kellotaajuudesta riippuen. Arduino Unossa yhden laskennan tekeminen kestää 1/16000000 sekuntia tai 62 nanosekuntia. Merkitys Arduino siirtyy yhdestä käskystä toiseen käskyyn jokaista 62 nanosekuntia kohden.
Ajastimet Arduino UNO: ssa:
Arduino UNO: ssa on kolme ajastinta, joita käytetään eri toimintoihin.
Ajastin0:
Se on 8-bittinen ajastin ja sitä käytetään ajastintoiminnoissa, kuten delay (), millis ().
Ajastin1:
Se on 16-bittinen ajastin ja sitä käytetään servokirjastossa.
Ajastin2:
Se on 8-bittinen ajastin ja sitä käytetään ääni () -toiminnossa.
Arduino-ajastinrekisterit
Ajastimien kokoonpanon muuttamiseksi käytetään ajastinrekistereitä.
1. Ajastin- / laskurirekisterit (TCCRnA / B):
Tämä rekisteri sisältää ajastimen pääohjausbitit ja sitä käytetään ajastimen esilaskureiden ohjaamiseen. Sen avulla voidaan myös ohjata ajastimen tilaa WGM-bitteillä.
Kehyksen muoto:
TCCR1A | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
COM1A1 | COM1A0 | COM1B1 | COM1B0 | COM1C1 | COM1C0 | WGM11 | WGM10 |
TCCR1B | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ICNC1 | ICES1 | - | WGM13 | WGM12 | CS12 | CS11 | CS10 |
Esiliuska:
TCCR1B: n CS12-, CS11- ja CS10-bitit asettavat esiasteikon arvon. Esiasteikkoa käytetään ajastimen kellonopeuden asettamiseen. Arduino Unolla on esilaajentimet 1, 8, 64, 256, 1024.
CS12 | CS11 | CS10 | KÄYTTÄÄ |
0 | 0 | 0 | Ei kellonajastinta |
0 | 0 | 1 | CLCK i / o / 1 Ei esilaajennusta |
0 | 1 | 0 | CLK i / o / 8 (Prescalerista) |
0 | 1 | 1 | CLK i / o / 64 (Prescalerista) |
1 | 0 | 0 | CLK i / o / 256 (Prescalerista) |
1 | 0 | 1 | CLK i / o / 1024 (Prescalerista) |
1 | 1 | 0 | Ulkoinen kellolähde T1-nastassa. Kello putoavalla reunalla |
1 | 1 | 1 | Ulkoinen kellolähde T1-nastassa. Kello nousevalla reunalla. |
2. Ajastin- / laskurirekisteri (TCNTn)
Tätä rekisteriä käytetään laskurin arvon ohjaamiseen ja esilatausarvon asettamiseen.
Kaava esilatausarvolle vaadittavaksi ajaksi sekunnissa:
TCNTn = 65535 - (16x10 10 xTime sekunnissa / esijäähdyttimen arvo)
Ajastimen1 esilataimen arvon laskeminen 2 sekunnin ajaksi:
TCNT1 = 65535 - (16x10 10 x2 / 1024) = 34285
Arduino-ajastin keskeyttää
Olemme aiemmin oppineet Arduino-keskeytyksistä ja nähneet, että Ajastin-keskeytykset ovat eräänlaisia ohjelmistoja. Arduinossa on useita ajastinkeskeytyksiä, jotka selitetään alla.Ajastimen ylivuodon keskeytys:
Ajastimen ylivuodon keskeytys tapahtuu aina, kun ajastin saavuttaa maksimiarvonsa, esimerkiksi (16 Bit-65535). Joten ISR-keskeytyspalvelurutiinia kutsutaan, kun ajastimen keskeytysmaskkirekisterissä TIMSKx oleva TOIEx-ajastin on ottanut käyttöön ajastimen ylivuoto-keskeytysbitin.
ISR-muoto:
ISR (TIMERx_OVF_vect) { }
Lähtövertailurekisteri (OCRnA / B):
Tällöin, kun Output Compare Match Interrupt tapahtuu, keskeytyspalvelu ISR (TIMERx_COMPy_vect) kutsutaan ja myös OCFxy-lippubitti asetetaan TIFRx-rekisteriin. Tämä ISR otetaan käyttöön asettamalla sallittu bitti TIMSKx-rekisterissä olevassa OCIExyssä. Missä TIMSKx on ajastimen keskeytysmaskirekisteri.
Ajastintulon sieppaus:
Seuraavaksi, kun ajastimen sisääntulon sieppauksen keskeytys tapahtuu, keskeytyspalvelu ISR (TIMERx_CAPT_vect) kutsutaan ja myös ICFx-lippubitti asetetaan TIFRx: ssä (ajastimen keskeytyslippurekisteri). Tämä ISR otetaan käyttöön asettamalla TIMSKx-rekisterissä olevan ICIEx: n aktivointibitti.
Tarvittavat komponentit
- Arduino UNO
- Painikkeet (2)
- LED (mikä tahansa väri)
- 10k vastus (2), 2.2k (1)
- 16x2 LCD-näyttö
Piirikaavio
Piiriliitännät Arduino UNO: n ja 16x2 LCD-näytön välillä:
16x2 LCD |
Arduino UNO |
VSS |
GND |
VDD |
+ 5 V |
V0 |
Potentiometrin keskitappiin nestekidenäytön kontrastin hallintaa varten |
RS |
8 |
RW |
GND |
E |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
A |
+ 5 V |
K |
GND |
Kaksi painonappia, joissa on 10K alasvetovastukset, on kytketty Arduino-nastoihin 2 ja 4 ja LED on kytketty Arduinon PIN-koodiin 7 2,2K-vastuksen kautta.
Asennus näyttää kuvan alapuolelta.
Arduino UNO Timers -ohjelmointi
Tässä opetusohjelmassa käytämme TIMER OVERFLOW INTERRUPT -ohjelmaa ja sen avulla vilkkuvat LED-valot PÄÄLLE ja POIS tietyn ajanjakson säätämällä esilataimen arvoa (TCNT1) painikkeilla. Arduino Timerin täydellinen koodi annetaan lopussa. Tässä selitämme koodia riveittäin:
Koska 16x2 LCD: tä käytetään projektissa esikuormaajan arvon näyttämiseen, käytetään nestekidekirjastoa.
#sisältää
Arduino-nastaan 7 kytketty LED- anoditappi on määritelty ledPiniksi .
#define ledPin 7
Seuraavaksi objekti nestekideluokkaan pääsemiseksi ilmoitetaan LCD-nastoilla (RS, E, D4, D5, D6, D7), jotka on liitetty Arduino UNO: han.
LiquidCrystal lcd (8,9,10,11,12,13);
Aseta sitten esilataimen arvo 3035 4 sekunniksi. Tarkista yllä oleva kaava laskeaksesi esilataimen arvon.
kelluva arvo = 3035;
Seuraavaksi tyhjässä asetuksessa (), aseta ensin LCD-näyttö 16x2-tilaan ja näytä tervetuloviesti muutaman sekunnin ajan.
lcd-alku (16,2); lcd.setCursor (0,0); lcd.print ("ARDUINO-AJASTIMET"); viive (2000); lcd.clear ();
Aseta seuraavaksi LED-tappi OUTPUT-nastaksi ja painikkeet asetetaan INPUT-nastoiksi
pinMode (ledPin, OUTPUT); pinMode (2, INPUT); pinMode (4, INPUT);
Poista seuraavaksi kaikki keskeytykset käytöstä:
no Keskeytykset ();
Seuraavaksi ajastin1 alustetaan.
TCCR1A = 0; TCCR1B = 0;
Esilataimen ajastimen arvo asetetaan (aluksi arvona 3035).
TCNT1 = arvo;
Sitten Pre-skaalaimen arvo 1024 asetetaan TCCR1B-rekisteriin.
TCCR1B - = (1 CS10) - (1 CS12);
Ajastimen ylivuodon keskeytys on käytössä Ajastimen keskeytysmaski -rekisterissä, jotta ISR: ää voidaan käyttää.
TIMSK1 - = (1 << TOIE1);
Viimeinkin kaikki keskeytykset ovat käytössä.
keskeyttää ();
Kirjoita nyt ajastimen ylivuotokatkoksen ISR, joka on vastuussa LED-valojen sytyttämisestä ja sammuttamisesta digitalWrite-toiminnolla . Tila muuttuu aina, kun ajastimen ylivuoto keskeytyy.
ISR (TIMER1_OVF_vect) { TCNT1 = arvo; digitalWrite (ledPin, digitalRead (ledPin) ^ 1); }
Vuonna void silmukka () arvo esilataajaratkaisun kasvatetaan tai pienennetään käyttämällä painiketta tulot ja myös arvo näkyy 16x2 LCD.
if (digitalRead (2) == KORKEA) { arvo = arvo + 10; // Inkrementin esikuormitusarvo } if (digitalRead (4) == KORKEA) { arvo = arvo-10; // Esilatausarvon vähennys } lcd.setCursor (0,0); lcd.print (arvo); }
Joten ajastinta voidaan käyttää viiveiden tuottamiseen Arduino-ohjelmassa. Tarkista alla oleva video, jossa olemme osoittaneet viiveen muutoksen lisäämällä ja vähentämällä esikuormaajan arvoa painikkeilla.