- Co je TIMER v integrované elektronice?
- Arduino Timer Registers
- Přerušení časovače Arduino
- Požadované komponenty
- Kruhový diagram
- Programování časovačů Arduino UNO
Arduino Development Platform byla původně vyvinuta v roce 2005 jako snadno použitelné programovatelné zařízení pro umělecké designové projekty. Jeho záměrem bylo pomoci neinženýrům pracovat se základní elektronikou a mikrokontroléry bez velkých znalostí programování. Ale díky své snadno použitelné povaze byl brzy přizpůsoben začátečníky a fandy elektroniky po celém světě a dnes je dokonce preferován pro vývoj prototypů a vývoj POC.
I když je v pořádku začít s Arduinem, je důležité pomalu přejít do základních mikrokontrolérů, jako jsou AVR, ARM, PIC, STM atd., A programovat je pomocí jejich nativních aplikací. Důvodem je, že programovací jazyk Arduino je velmi snadno pochopitelný, protože většinu práce provádějí předem připravené funkce, jako jsou digitalWrite (), AnalogWrite (), Delay () atd., Zatímco za nimi se skrývá nízkoúrovňový strojový jazyk. Programy Arduino nejsou podobné jiným kódováním Embedded C, kde se zabýváme registračními bity a podle logiky našeho programu je nastavujeme jako vysoké nebo nízké.
Arduino časovače bez prodlení:
Proto, abychom pochopili, co se děje uvnitř předpřipravených funkcí, musíme za těmito pojmy kopat. Například když je použita funkce delay (), skutečně nastaví bity časovače a čítače registru mikrokontroléru ATmega.
V tomto výukovém programu Arduino Timer se vyhneme použití této funkce delay () a místo toho se budeme zabývat samotnými registry. Dobré je, že k tomu můžete použít stejné Arduino IDE. Nastavíme naše bity registrů časovače a použijeme přerušení přetečení časovače k přepínání LED vždy, když dojde k přerušení. Hodnotu předběžného načítání bitu časovače lze také upravit pomocí tlačítek k řízení doby trvání přerušení.
Co je TIMER v integrované elektronice?
Časovač je druh přerušení. Je to jako jednoduché hodiny, které dokážou měřit časový interval události. Každý mikrokontrolér má hodiny (oscilátor), řekněme v Arduino Uno, že je 16Mhz. To je zodpovědné za rychlost. Čím vyšší bude taktovací frekvence, tím vyšší bude rychlost zpracování. Časovač používá čítač, který počítá určitou rychlostí v závislosti na frekvenci hodin. V Arduino Uno trvá jedno počítání 1/16000000 sekund nebo 62nano sekund. To znamená, že Arduino se pohybuje z jedné instrukce na druhou za každých 62 nano sekund.
Časovače v Arduino UNO:
V Arduino UNO existují tři časovače používané pro různé funkce.
Časovač0:
Jedná se o 8bitový časovač a používá se ve funkci časovače, jako je delay (), millis ().
Časovač1:
Jedná se o 16bitový časovač a používá se v servo knihovně.
Časovač2:
Jedná se o 8bitový časovač a používá se ve funkci tone ().
Arduino Timer Registers
Ke změně konfigurace časovačů se používají registry časovačů.
1. Řídicí registry časovače / čítače (TCCRnA / B):
Tento registr obsahuje hlavní řídicí bity časovače a slouží k ovládání přednastavovačů časovače. Umožňuje také ovládat režim časovače pomocí bitů 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 předvolby. Přednastavený časovač se používá k nastavení rychlosti hodin časovače. Arduino Uno má přednastavovače 1, 8, 64, 256, 1024.
CS12 | CS11 | CS10 | POUŽITÍ |
0 | 0 | 0 | Žádný časovač STOP |
0 | 0 | 1 | CLCK i / o / 1 Bez přednastavení |
0 | 1 | 0 | CLK i / o / 8 (od Prescaler) |
0 | 1 | 1 | CLK i / o / 64 (od Prescaler) |
1 | 0 | 0 | CLK i / o / 256 (od Prescaler) |
1 | 0 | 1 | CLK i / o / 1024 (od Prescaler) |
1 | 1 | 0 | Externí zdroj hodin na kolíku T1. Hodiny na sestupné hraně |
1 | 1 | 1 | Externí zdroj hodin na kolíku T1. Hodiny na vzestupné hraně. |
2. Registr časovače / čítače (TCNTn)
Tento registr se používá k řízení hodnoty čítače a k nastavení hodnoty před načítáním.
Vzorec pro hodnotu předpětí pro požadovaný čas za sekundu:
TCNTn = 65535 - (16x10 10 xTime in sec / Prescaler Value)
Výpočet hodnoty předpětí pro časovač 1 na dobu 2 s:
TCNT1 = 65535 - (16x10 10 x2 / 1024) = 34285
Přerušení časovače Arduino
Dříve jsme se dozvěděli o přerušeních Arduino a viděli jsme, že přerušení časovače jsou druhem softwarových přerušení. V Arduinu existují různá časová přerušení, která jsou vysvětlena níže.Přerušení časovače přerušení:
Kdykoli časovač dosáhne své maximální hodnoty, například (16 Bit-65535), dojde k přerušení časovače přetečení . Rutina služby přerušení ISR se tedy volá, když je bit přerušení časovače přerušení povolen v TOIExu přítomném v masce přerušení časovače zaregistrovat TIMSKx.
Formát ISR:
ISR (TIMERx_OVF_vect) { }
Registr porovnání výstupu (OCRnA / B):
Zde, když dojde k přerušení porovnávání výstupu, pak se zavolá služba přerušení ISR (TIMERx_COMPy_vect) a v registru TIFRx se nastaví také bit příznaku OCFxy. Tento ISR je povolen nastavením aktivačního bitu v OCIExy přítomném v registru TIMSKx. Kde TIMSKx je registr časovače přerušení masky.
Zachycení vstupu časovače:
Poté, co dojde k přerušení časovače vstupu, je vyvolána služba přerušení ISR (TIMERx_CAPT_vect) a také bit příznaku ICFx bude nastaven v TIFRx (registr příznaků přerušení časovače). Tento ISR je povolen nastavením aktivačního bitu v ICIEx přítomném v registru TIMSKx.
Požadované komponenty
- Arduino UNO
- Tlačítka (2)
- LED (libovolná barva)
- 10k rezistor (2), 2,2k (1)
- 16x2 LCD displej
Kruhový diagram
Připojení obvodu mezi Arduino UNO a 16x2 LCD displejem:
16x2 LCD |
Arduino UNO |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na středový kolík potenciometru pro ovládání kontrastu LCD |
RS |
8 |
RW |
GND |
E |
9 |
D4 |
10 |
D5 |
11 |
D6 |
12 |
D7 |
13 |
A |
+ 5V |
K. |
GND |
Dvě tlačítka s stahovacími odpory 10K jsou spojena s piny Arduino 2 a 4 a LED je připojena k PIN 7 Arduina přes rezistor 2,2K.
Nastavení bude vypadat jako na následujícím obrázku.
Programování časovačů Arduino UNO
V tomto tutoriálu použijeme PŘERUŠENÍ ČASOVAČE PŘERUŠENÍ a použijeme jej k blikání LED ZAPNUTO a VYPNUTO po určitou dobu úpravou hodnoty předpětí (TCNT1) pomocí tlačítek. Na konci je uveden kompletní kód pro Arduino Timer. Zde vysvětlujeme kód po řádku:
Protože se v projektu používá 16x2 LCD k zobrazení hodnoty preloaderu, používá se knihovna tekutých krystalů.
#zahrnout
Pin anody LED, který je spojen s pinem Arduino 7, je definován jako ledPin .
#define ledPin 7
Dále je objekt pro přístup ke třídě tekutých krystalů deklarován pomocí pinů LCD (RS, E, D4, D5, D6, D7), které jsou spojeny s Arduino UNO.
LiquidCrystal lcd (8,9,10,11,12,13);
Poté na 4 sekundy nastavte hodnotu předpětí 3035. Zkontrolujte vzorec výše a vypočítejte hodnotu předpětí.
float value = 3035;
Dále v nastavení void () nejprve nastavte LCD do režimu 16x2 a na několik sekund zobrazte uvítací zprávu.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("ARDUINO TIMERS"); zpoždění (2000); lcd.clear ();
Dále nastavte pin LED jako pin OUTPUT a tlačítka jsou nastavena jako piny INPUT
pinMode (ledPin, OUTPUT); pinMode (2, VSTUP); pinMode (4, VSTUP);
Dále deaktivujte všechna přerušení:
noInterrupts ();
Dále se inicializuje Timer1.
TCCR1A = 0; TCCR1B = 0;
Je nastavena hodnota časovače předpětí (původně 3035).
TCNT1 = hodnota;
Poté je v registru TCCR1B nastavena hodnota Pre scaler 1024.
TCCR1B - = (1 << CS10) - (1 << CS12);
V registru Timer Interrupt Mask je povoleno přerušení přetečení časovače, aby bylo možné použít ISR.
TIMSK1 - = (1 << TOIE1);
Nakonec jsou povolena všechna přerušení.
přerušení ();
Nyní napište ISR pro přerušení časovače přerušení, které je zodpovědné za rozsvícení a zhasnutí LED pomocí digitalWrite . Stav se změní, kdykoli dojde k přerušení přetečení časovače.
ISR (TIMER1_OVF_vect) { TCNT1 = hodnota; digitalWrite (ledPin, digitalRead (ledPin) ^ 1); }
Ve smyčce void () je hodnota předpětí zvýšena nebo snížena pomocí vstupů tlačítka a také je hodnota zobrazena na 16x2 LCD.
if (digitalRead (2) == HIGH) { hodnota = hodnota + 10; // Hodnota předběžného načtení aplikace } if (digitalRead (4) == VYSOKÁ) { hodnota = hodnota-10; // Snížit hodnotu předpětí } lcd.setCursor (0,0); lcd.print (hodnota); }
Takto lze použít časovač k vytvoření zpoždění v programu Arduino. Podívejte se na video níže, kde jsme demonstrovali změnu zpoždění zvyšováním a snižováním hodnoty před načítáním pomocí tlačítek.