Čítače a časovače
V minulých dílech jsme se naučili jak jednoduše naprogramovat blikač. Pro tuto úlohu jsme zpožďovali program. V mnoha případech si to ale nemůžeme dovolit a navíc je třeba některé události časovat velmi přesně.
Čítač - čítá impulzy z vnějšího zdroje. Pravidelným čtením a nulováním (například za 1 s) můžeme měřit frekvenci tohoto signálu. Další možnosti je odměření času načítáním vnějších pravidelných impulzů.
Časovač - načítá frekvenci, která je určena vnitřním zdrojem hodinových impulzů a případnou předděličkou zařazenou do cesty. Tento způsob použití se nejčastěji využívá pro časování pravidelných intervalů (blikání, odesíláni zpráv a podobně).
Input Capture - slouží pro uložení stavu časovače / čítače. Jeho použití je ale u mikroprocesoru ATMEGA16 omezeno na časovač 1. Pouze tato periferie je vybavena vstupem ICP, který umožňuje uložení stavu časovače.
Output Capture - tento komparátor porovnává registr časovače se srovnávacím registrem. Při shodě změní výstup OC svůj stav podle daného nastavení.
TCNT0 - obsahuje hodnotu čítače / časovače 0
OCR0 - srovnávací registr
TCCR0 - registr pro řízení čítače / časovače 0
TIMSK - registr masek přerušení časovačů / čítačů
TIFR - registr příznaků časovačů / čítačů
SFIOR - zvláštní vstupně výstupní registr

slouží k nastavení funkce čítače / časovače 0
FOC0 - nastaví výstup OC0, tak, že je přímo řízen shodou TCNT0 a OCR0.
WGM01, WGM00 - nastavuje vrchol (kam se bude čítat), způsob obnovení OCR0, a nastavení TOV0. (tabulka)
COM01, COM02 - nastavuje chování OC0. (viz tabulka)
CS02, CS01, CS00 - výběr zdroje hodinového signálu. (viz tabulka)
Tabulky si můžete prohlédnout v tomto PDF souboru, nebo v originálním katalogovém listu.

Popis činnosti
K tomuto účelu slouží v procesorech AVR, (ale i v jiných - 8051, PIC, PSoC) tzv. ČASOVAČE a ČÍTAČE. Jedná se o samostatné části procesoru, nezávislé na probíhajících instrukcích, které jsou schopny čítat čísla (zvětšovat svůj obsah o 1, případně svůj obsah zmenšovat). Pro upřesnění si popíšeme dvě funkce bloku:Čítač - čítá impulzy z vnějšího zdroje. Pravidelným čtením a nulováním (například za 1 s) můžeme měřit frekvenci tohoto signálu. Další možnosti je odměření času načítáním vnějších pravidelných impulzů.
Časovač - načítá frekvenci, která je určena vnitřním zdrojem hodinových impulzů a případnou předděličkou zařazenou do cesty. Tento způsob použití se nejčastěji využívá pro časování pravidelných intervalů (blikání, odesíláni zpráv a podobně).
Input Capture - slouží pro uložení stavu časovače / čítače. Jeho použití je ale u mikroprocesoru ATMEGA16 omezeno na časovač 1. Pouze tato periferie je vybavena vstupem ICP, který umožňuje uložení stavu časovače.
Output Capture - tento komparátor porovnává registr časovače se srovnávacím registrem. Při shodě změní výstup OC svůj stav podle daného nastavení.
Popis registrů
Procesor ATMEGA 16 obsahuje celkem tři časovače / čítače. ( 0 - 2 ). V této kapitole si popíšeme registry čítače / časovače 0.TCNT0 - obsahuje hodnotu čítače / časovače 0
OCR0 - srovnávací registr
TCCR0 - registr pro řízení čítače / časovače 0
TIMSK - registr masek přerušení časovačů / čítačů
TIFR - registr příznaků časovačů / čítačů
SFIOR - zvláštní vstupně výstupní registr
Registr TCCR0
FOC0 - nastaví výstup OC0, tak, že je přímo řízen shodou TCNT0 a OCR0.
WGM01, WGM00 - nastavuje vrchol (kam se bude čítat), způsob obnovení OCR0, a nastavení TOV0. (tabulka)
COM01, COM02 - nastavuje chování OC0. (viz tabulka)
CS02, CS01, CS00 - výběr zdroje hodinového signálu. (viz tabulka)
Tabulky si můžete prohlédnout v tomto PDF souboru, nebo v originálním katalogovém listu.
Registr TIMSK
Maskuje přerušení čítačů / časovačů, o tom co je přerušení si řekneme příště, kdy si ukážeme praktickou ukázku s časovačem.
OCIE0 - povolí přerušení při shodě registrů TCNT0 a OCR0. (viz v příštím díle)
TOIE0 - povolí přerušení při přetečení čítače / časovače (jeho registru TCNT0.

OCIE0 - povolí přerušení při shodě registrů TCNT0 a OCR0. (viz v příštím díle)
TOIE0 - povolí přerušení při přetečení čítače / časovače (jeho registru TCNT0.
Registr TIFR
V tomto registru se automaticky nastaví příznak při vyvolání přerušení. Příznaky se nulují po obsloužení daného přerušeni. Pro zjednodušení představy si můžeme předem uvést, že přerušení je ten stav, kdy program je z normálního běhu přerušen nějakou událostí (vnější nebo událostí vyvolanou periferiemi či samotným procesorem). Pro vznik přerušení musí být povoleny odpovídající bity v masce. Po vzniku události, jež může být příčinou přerušení, je nastaven odpovídající příznak přerušení, program odskočí na vektor přerušení (zvlášť vyhrazená adresa v programu) a odtud je volán obslužný podprogram. Po vstupu do obslužné rutiny, jsou příznaky nulovány.
OCF0 - nastaví se při rovnosti registrů TCNT0 a OCR0.
TOV0 - nastaví se při přetečení registru čítače / časovače.
Pro nedočkavce uvádím jednoduchý příklad, který jsem si vypůjčil k knihy Davida Matouška: Práce s mikrokontroléry ATMEL AVR. Na vývodu OC0 generuje pulzy se střídou 1:1. Program si okomentujeme příště. Pokud se chcete dozvědět jak funguje, můžete si ho odkrokovat v AVR Studiu.
OCF0 - nastaví se při rovnosti registrů TCNT0 a OCR0.
TOV0 - nastaví se při přetečení registru čítače / časovače.
Ostatní čítače / časovače
Na rozdíl od čítače / časovače 0 jsou oba ostatní obvody v procesoru AVR 16ti bitové. Mají i další doplňkové vlastnosti, které zvyšují komfort při jejich užívání. K těmto čítačům časovačům se dostaneme v přespříštím díle, kdy už budeme umět využívat přerušení a budeme mít za sebou několik praktických ukázek využití čítače / časovače 0.Pro nedočkavce uvádím jednoduchý příklad, který jsem si vypůjčil k knihy Davida Matouška: Práce s mikrokontroléry ATMEL AVR. Na vývodu OC0 generuje pulzy se střídou 1:1. Program si okomentujeme příště. Pokud se chcete dozvědět jak funguje, můžete si ho odkrokovat v AVR Studiu.
.NOLIST
.INCLUDE "m16def.inc"
.LIST
;generuj na vývodu OC0 kmitočet cca 100 Hz
LDI R16,$FF ;port B
OUT DDRB,R16 ;je výstupní
LDI R16,$FF ;všechny bity
OUT PORTB,R16 ;do log. 1
LDI R16,0b00011101 ;konfigurace
OUT TCCR0,R16 ;do CTC+toggle
LDI R16,77 ;f=f0/(1024*156)
OUT OCR0,R16
RJMP PC ;nekonečná smyčka
Komentovat článek
Komentáře k článku
článek zatím nikdo nekomentoval