Režimy čítače-časovače 1

V minulých dílech jsme si řekli pár informací k čítačům, časovačům obecně. V dnešním díle si probereme podrobněji čítač časovač 1 a jeho režimy.

Úvodem

Čítač / časovač procesoru ATMEGA16 může pracovat v celkem 15 režimech, v nichž většinu tvoří režimy PWM. (Fázově korigované, rychlé režimy PWM). Mnohdy nastává problém s jejich správným pochopením a proto bych chtěl tento díl zasvětit právě jim. Popíšeme si několik režimů a ukážeme si k nim zdrojové kódy.

Rychlý PWM režim

Rychlého PWM režimu můžeme dosáhnout nastavením čítače/časovače 1 do režimů 5, 6, 7, 14, 15. Pro mnoho z Vás bude jistě tento režim pochopitelnější, než funkce fázově korigovaného režimu, proto s ním začínám.

Tento režim je specifický tím, že čítá ode dna do maxima (přičemž maximum lze měnit volbou režimu) a poté se vrátí zpět ke dnu. Vysvětluje to i následující obrázek:



V režimu 5 se jedná o osmibitovou PWM, vrcholem je tedy $00FF. V tomto režim je možné využívat oba vývody (OC1A, OC1B). V režimu 6 mluvíme o 9-ti bitovém rozlišení PWM a režim 7 poskytuje PWM o rozlišení 10 bitů. Vrcholem je v tomto případě $03FF.

Zvláštními režimy jsou režimy 14, 15. Jedná se o PWM s vrcholem ICR1 a OCR1. V posledně jmenované situaci jsme tedy schopni použít pouze jeden vývod pro výstup PWM a to vývod OC1B. OC1A lze využít ke generování střídy 1:1 nastavením na toggle. Jak už ale bylo napsáno prve i přes některé nedostatky, umožňuje tento režim generování velmi rychlé PWM.

 

Fázově korigovaný PWM režim

Fázově korigovaný PWM režim poskytuje oproti PWM režimu 2x větší rozlišení. Je to dáno tím, že čítá nejenom nahoru, ale poté také i zpět ke dnu.  Režim je možné zvolit nastavením WGM do stavů 1,2,3,10 nebo 11. Všechny tyto režimy, tak jako u rychlé PWM jsou něčím specifické.
TCNT1 s OCR1A (OCR1B) je výstup OC1A, případně OC1B vynulován. To ale platí pouze při čítání nahoru.  Při čítání směrem dolů (druhá fáze) je vývod nastaven opět při rovnosti registrů. To má za následek snížení pracovní frekvence (prodloužení periody), ale umožňuje to zase přesnější nastavení střídy.
Opět i u tohoto režimu můžeme volit mezi rozlišením na 8, 9, 10 bitů, případně využít registry ICR1 / OCR1A. Grafické znázornění funkce čítače / časovače v nastavení pro fázově korigovanou PWM si můžete prohlédnout na následujícím obrázku.


Příklady využití

Prvním příkladem využití bude využití rychlé PWM a to v režimu 15. Budeme simulovat funkci zabezpečovacího zařízení. LED dioda připojená na pin OC1B po určitém časovém intervalu blikne. Veškerou práci bude zajišťovat blok čítače / časovače 1. My se nemusíme starat o zpoždění, ani ovládání LED.

#include <mega16.h>

void main(void)
{
PORTD=0x00;
DDRD=0x10;
TCCR1A=0x33;
TCCR1B=0x1D;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x55;
OCR1AL=0x55;
OCR1BH=0x00;
OCR1BL=0x50;
while (1)
      {          
      };
}

Celý projekt z CodeVision si můžete stáhnout zde
Projekt napsaný v AVR Studiu v C (GCC) je možné stáhnout zde.
Projekt napsaný v AVR Studiu v assembleru je možné stáhnout zde.



Komentovat článek

Jméno:  
Zpráva:

Komentáře k článku

Ondřej Karas - 8.10.2007 22:24

Pokusím se :-)

Jura - 8.10.2007 14:16

Moc pěkný příklad. Jen pro uplnost, nešlo by přihodit ještě graf s těmi hodnotami? Možná by to pomohlo k lepšímu pochopení. Díky