- Čo je TIMER v zabudovanej elektronike?
- Registre časovača Arduino
- Arduino Timer Prerušuje
- Súčasti sú povinné
- Schéma zapojenia
- Programovanie časovačov Arduino UNO
Vývojová platforma Arduino bola pôvodne vyvinutá v roku 2005 ako ľahko použiteľné programovateľné zariadenie pre projekty umeleckého dizajnu. Jej zámerom bolo pomôcť neinžinierom pracovať so základnou elektronikou a mikrokontrolérmi bez väčších znalostí programovania. Ale potom bol pre svoju ľahko použiteľnú povahu čoskoro adaptovaný začiatočníkmi a amatérmi z celého sveta v oblasti elektroniky a dnes je dokonca preferovaný pre vývoj prototypov a vývoj POC.
Aj keď je v poriadku začať s Arduinom, je dôležité pomaly prechádzať do základných mikrokontrolérov ako AVR, ARM, PIC, STM atď. A programovať ich pomocou ich natívnych aplikácií. Je to preto, že programovací jazyk Arduino je veľmi ľahko pochopiteľný, pretože väčšinu práce vykonávajú vopred pripravené funkcie ako digitalWrite (), AnalogWrite (), Delay () atď., Zatiaľ čo sa za nimi skrýva strojový jazyk nízkej úrovne. Programy Arduino nie sú podobné ako iné kódovanie Embedded C, kde sa zaoberáme bitmi registra a na základe logiky nášho programu ich zvyšujeme alebo znižujeme.
Arduino časovače bez meškania:
Preto, aby sme pochopili, čo sa deje vo vopred pripravených funkciách, musíme kopať za týmito pojmami. Napríklad keď sa použije funkcia delay (), v skutočnosti sa nastavia bity časovača a počítadla registrov mikrokontroléra ATmega.
V tomto výučbe časovača arduino sa vyhneme použitiu tejto funkcie delay () a namiesto toho sa budeme zaoberať samotnými registrami. Dobré je, že na to môžete použiť rovnaké Arduino IDE. Nastavíme svoje registračné bity časovača a pomocou prerušenia pretečenia časovača prepneme LED vždy, keď dôjde k prerušeniu. Hodnotu predbežného načítania bitu časovača je možné upraviť aj pomocou tlačidiel na riadenie doby, v ktorej dôjde k prerušeniu.
Čo je TIMER v zabudovanej elektronike?
Časovač je akýmsi prerušením. Je to ako jednoduché hodiny, ktoré dokážu merať časový interval udalosti. Každý mikrokontrolér má hodiny (oscilátor), povedzme v Arduino Uno je to 16Mhz. To je zodpovedné za rýchlosť. Čím vyššia je taktovacia frekvencia, tým vyššia bude rýchlosť spracovania. Časovač používa počítadlo, ktoré počíta určitou rýchlosťou v závislosti od frekvencie hodín. V Arduino Uno trvá jedno počítanie 1/16000000 sekúnd alebo 62nano sekúnd. To znamená, že Arduino sa pohybuje z jednej inštrukcie na druhú za každých 62 nano sekúnd.
Časovače v Arduino UNO:
V Arduino UNO sú tri časovače používané pre rôzne funkcie.
Časovač0:
Je to 8-bitový časovač a používa sa vo funkciách časovača ako delay (), millis ().
Časovač1:
Je to 16-bitový časovač a používa sa v servo knižnici.
Časovač 2:
Je to 8-bitový časovač a používa sa vo funkcii tone ().
Registre časovača Arduino
Na zmenu konfigurácie časovačov sa používajú registre časovačov.
1. Registre riadenia časovača / počítadla (TCCRnA / B):
Tento register obsahuje hlavné riadiace bity časovača a slúži na riadenie predkontrolérov časovača. Umožňuje tiež ovládať režim časovača pomocou bitov WGM.
Formát rámu:
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 |
Prescaler:
Bity CS12, CS11, CS10 v TCCR1B nastavujú hodnotu predsklerátora. Na nastavenie hodinovej rýchlosti časovača sa používa predvoľba času. Arduino Uno má prednastavovače 1, 8, 64, 256, 1024.
CS12 | CS11 | CS10 | POUŽITIE |
0 | 0 | 0 | Žiadny časovač STOP |
0 | 0 | 1 | CLCK i / o / 1 Bez prednastavenia |
0 | 1 | 0 | CLK i / o / 8 (od spoločnosti Prescaler) |
0 | 1 | 1 | CLK i / o / 64 (od spoločnosti Prescaler) |
1 | 0 | 0 | CLK i / o / 256 (od spoločnosti Prescaler) |
1 | 0 | 1 | CLK i / o / 1024 (od spoločnosti Prescaler) |
1 | 1 | 0 | Externý zdroj hodín na kolíku T1. Hodiny na klesajúcej hrane |
1 | 1 | 1 | Externý zdroj hodín na kolíku T1. Hodiny na stúpajúcej hrane. |
2. Register časovača / počítadla (TCNTn)
Tento register sa používa na riadenie hodnoty počítadla a na nastavenie hodnoty pred načítaním.
Vzorec pre hodnotu predpínača na požadovaný čas za sekundu:
TCNTn = 65535 - (16 x 10 10 x čas v s / hodnota predvoľby)
Výpočet hodnoty predpínača pre časovač1 na 2 sekundy:
TCNT1 = 65535 - (16x10 10 x2 / 1024) = 34285
Arduino Timer Prerušuje
Predtým sme sa dozvedeli o prerušeniach Arduina a videli sme, že prerušenia časovača sú akýmsi softvérovým prerušením. V Arduine sú rôzne prerušenia časovača, ktoré sú vysvetlené nižšie.Prerušenie pretečenia časovača:
Kedykoľvek časovač dosiahne svoju maximálnu hodnotu, napríklad (16 Bit-65535), dôjde k prerušeniu pretečenia časovača . Rutina služby prerušenia ISR sa teda volá, keď je bit prerušenia pretečenia časovača povolený v TOIExu prítomnom v maske prerušenia časovača zaregistrovať TIMSKx.
Formát ISR:
ISR (TIMERx_OVF_vect) { }
Register porovnania výstupu (OCRnA / B):
Tu, keď dôjde k prerušeniu porovnania výstupu, potom sa zavolá služba prerušenia ISR (TIMERx_COMPy_vect) a tiež sa nastaví príznakový bit OCFxy v registri TIFRx. Tento ISR je povolený nastavením aktivačného bitu v OCIExy prítomnom v registri TIMSKx. Kde TIMSKx je register časovača prerušenia masky.
Zachytenie vstupu časovača:
Ďalej, keď dôjde k prerušeniu vstupu Capture Timer, potom sa zavolá služba prerušenia ISR (TIMERx_CAPT_vect) a tiež sa nastaví bit príznaku ICFx v TIFRx (register príznakov prerušenia časovača). Tento ISR je povolený nastavením aktivačného bitu v ICIEx prítomnom v registri TIMSKx.
Súčasti sú povinné
- Arduino UNO
- Tlačidlá (2)
- LED (ľubovoľná farba)
- 10k rezistor (2), 2,2k (1)
- 16 x 2 LCD displej
Schéma zapojenia
Pripojenie obvodu medzi Arduino UNO a 16x2 LCD displejom:
16x2 LCD |
Arduino UNO |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na stredový kolík potenciometra na nastavenie kontrastu LCD |
RS |
8 |
RW |
GND |
E |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
A |
+ 5V |
K |
GND |
Dve tlačidlá so sťahovacími rezistormi 10K sú spojené s pinmi Arduino 2 a 4 a LED je pripojená k PIN 7 Arduina cez rezistor 2,2K.
Nastavenie bude vyzerať ako na obrázku nižšie.
Programovanie časovačov Arduino UNO
V tomto návode použijeme PRERUŠENIE ČASOVAČA PRERUŠENIE a pomocou neho blikáme LED na určitú dobu ZAPNUTÉ a VYPNUTÉ úpravou hodnoty predinštalovania (TCNT1) pomocou tlačidiel. Na konci je uvedený kompletný kód pre Arduino Timer. Tu vysvetľujeme kódový riadok po riadku:
Pretože v projekte sa na zobrazenie hodnoty predpätia používa displej 16x2, používa sa aj knižnica z tekutých kryštálov.
#include
Pin anódy LED, ktorý je spojený s pinom Arduino 7, je definovaný ako ledPin .
#define ledPin 7
Ďalej je objekt pre prístup k triede tekutých kryštálov deklarovaný pomocou pinov LCD (RS, E, D4, D5, D6, D7), ktoré sú spojené s Arduino UNO.
LiquidCrystal lcd (8,9,10,11,12,13);
Potom na 4 sekundy nastavte hodnotu predpínača 3035. Skontrolujte vzorec vyššie a vypočítajte hodnotu predpínača.
float value = 3035;
Ďalej v void setup () najskôr nastavte LCD do režimu 16x2 a na niekoľko sekúnd zobrazte uvítaciu správu.
lcd.začiatok (16,2); lcd.setCursor (0,0); lcd.print ("ARDUINO TIMERS"); meškanie (2000); lcd.clear ();
Ďalej nastavte pin LED ako pin OUTPUT a tlačidlá sa nastavia ako pin INPUT
pinMode (ledPin, OUTPUT); pinMode (2, VSTUP); pinMode (4, VSTUP);
Ďalej zakážte všetky prerušenia:
noInterrupts ();
Ďalej sa inicializuje Timer1.
TCCR1A = 0; TCCR1B = 0;
Je nastavená hodnota časovača predbežného načítania (pôvodne 3035).
TCNT1 = hodnota;
Potom je v registri TCCR1B nastavená hodnota Pre scaler 1024.
TCCR1B - = (1 << CS10) - (1 << CS12);
Prerušenie pretečenia časovača je povolené v registri masky prerušenia časovača, aby bolo možné použiť ISR.
TIMSK1 - = (1 << TOIE1);
Nakoniec sú povolené všetky prerušenia.
prerušenia ();
Teraz napíšte ISR pre prerušenie pretečenia časovača, ktoré je zodpovedné za zapnutie a vypnutie LED pomocou digitalWrite . Stav sa zmení vždy, keď dôjde k prerušeniu pretečenia časovača.
ISR (TIMER1_OVF_vect) { TCNT1 = hodnota; digitalWrite (ledPin, digitalRead (ledPin) ^ 1); }
Vo void loop () je hodnota preloaderu zvyšovaná alebo znižovaná pomocou tlačidlových vstupov a taktiež je zobrazovaná na 16x2 LCD.
if (digitalRead (2) == HIGH) { hodnota = hodnota + 10; // Hodnota predbežného načítania aplikácie } if (digitalRead (4) == VYSOKÁ) { hodnota = hodnota-10; // Hodnota preloadu zníženia } lcd.setCursor (0,0); lcd.print (hodnota); }
Takto je možné pomocou časovača vytvoriť oneskorenie v programe Arduino. Skontrolujte video nižšie, kde sme demonštrovali zmenu oneskorenia zvyšovaním a znižovaním hodnoty predbežného načítania pomocou tlačidiel.