Režimy čítače-časovače 1
Úvodem
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
Komentáře k článku
Pokusím se :-)
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

.jpg)
