Časovač (timer)

Page

Stránky / Arduino / Pod kapotou Arduina /

Arduino Uno používá mikrokontrolér ATmega328P a praktický každý mikrokontrolér v sobě obsahuje časovače. Časovače se dají využívat k množství úkolů. Postupně se s těmito možnostmi seznámíme.

ATmega328P

Mikrokontrolér obsahuje 3 časovače:

  • Timer0 - 8-bitový. Je využit k aktualizaci času v Arduinu.
  • Timer1 - 16-bitový.
  • Timer2 - 8-bitový.

Časovače v dalších mikrokontrolérech

ATtiny85

Mikrokontrolér obsahuje 2 časovače:

  • Timer0 - 8-bitový.
  • Timer1 - 8-bitový.

ATtiny13A

Mikrokontrolér obsahuje 1 časovač:

  • Timer0 - 8-bitový.

ATmega2560

Mikrokontrolér obsahuje 6 časovačů:

  • Timer0 - 8-bitový.
  • Timer1 - 16-bitový.
  • Timer2 - 8-bitový.
  • Timer3-5 - 16-bitový.

Zdroj hodinového signálu

Časovač potřebuje na svou činnost zdroj hodinového signálu. Ten může být různý a od toho závisí, jak se bude časovač projevovat.

  • Žádný zdroj hodin - Tehdy je časovač vypnutý.
  • Interní hodinový signál - Základní hodinový signál je možné pomocí preddeličiek snížit na požadovanou hodnotu. Děličky mají obvykle hodnoty 1, 8, 64, 256, 1024, ale někdy se vyskytují i jiné hodnoty. Snížení frekvence hodin je užitečné, protože obvykle časovače nepoužíváme na vysoké frekvenci, ale snažíme o nějakou frekvenci, která je bližší potřebám. Například pokud potřebujeme generovat nějaký signál na frekvenci 1 Hz, stačí nám signál základních hodin snížit pomocí děličky a až potom s ním nějak manipulovat.
  • Externí hodinový signál - Externí hodinový signál nám umožňuje počítat externí signály. Tehdy říkáme, že časovat pracuje jako počítadlo.

Režim generování signálu

Generovaný signál se může tvořit v různých režimech. Každý režim má své specifické nastavení registrů. Arduino například tyto režimy používá pro generování PWM signálu.

  • Normální
  • PWM Phase Correct
  • CTC
  • Fast PWM
  • PWM Phase and Frequency Correct

Online kalkulačka

V článcích se na generátor zdrojového textu budu obracet často. Proto je vhodné, pokud si zapamatujete tento hypertext a budete ho používat ve svých projektech.

CTC Timer Calculator

Články v blogu o časovačích ATmega328P

8x PWM na jednom Arduinu

Arduino Uno má 6 PWM kanálů na pinech 3, 5, 6, 9, 10 a 11. V tomto článku si ukážeme, že to nemusí být konečný počet. Hardwarové PWM ale musíme nahradit vlastním kódem. V tomto příkladu využijeme timer, pomocí kterého si budeme generovat přerušení na dostatečně vysoké frekvenci, abychom byli schopni simulovat PWM na osmi kanálech najednou.

Čtení stavu tlačítka pomocí timeru

Pomocí timeru si můžete zjednodušit několik úkolů. Můžete ho využít i ke kontrole stavu tlačítka. V tomto článku si ukážeme, jak můžeme kontrolovat dvě tlačítka, které mění hodnotu proměnné. Jedno tlačítko hodnotu snižuje a druhé ji zvyšuje. Během stisknutí tlačítka se vše děje s minimem kódu a v tomto speciálním případě není ani nutné ošetřovat zákmity na tlačítkách.

16-bitové rozlišení PWM pro Arduino

Arduino má implicitně všechny PWM kanály nastaveny na 8-bitové rozlišení. Toto není maximální rozlišení. Timer1 umí použít až 16bitové rozlišení. V tomto článku si ukážeme, jak to udělat.

Stmívač LED pomocí timeru

Stmívání LED diody lze naprogramovat několika způsoby. V tomto článku se zaměříme na to, abychom neměli v programu funkci delay, která brzdí běh programu tak, že se už nemůže věnovat ničemu jinému. Nebudeme ani používat funkci millis, kterou se dá odstranit zdržování programu. Namísto toho budeme používat timer, který si nastavíme tak, aby nám v pravidelných intervalech dával signál, kdy máme provést další krok stmívání.

Timer1 - 8, 9 a 10-bit PWM

Funkce analogWrite v Arduine podporuje pouze 8bitový mód. Na timeru1 si můžete zapnout i 9 a 10-bitový mód, který vám poskytne vyšší rozlišení pro PWM signál. V tomto článku si ukážeme, jak se to dá udělat.

Timer1 - 10bitové PWM a potenciometr

V tomto článku si ukážeme, jak se používá 10bitový mód na timeru1. Abychom si mohli hodnotu střídy pohodlně nastavovat, použijeme jeden potenciometr. Analogové měření poskytuje 10bitové rozlišení a proto nemusíme dělat žádnou konverzi. Naměřenou hodnotu analogového vstupu si zobrazit na OLED displeji.

Jiné mikrokontroléry


20.07.2020


Menu