Mikrokontrolery AVR część 8 – timer2

Ostatnim z układów licznikowych w kontrolerze atmega8 jest licznik/czasomierz 2. Ma on architekturę 8 bitową, co oznacza, że może pomieścić 256 impulsów. Liczniki ten może pracować w czterech trybach. Te tryby to: normalny, PWM, PWM z poprawną fazą, oraz CTC. Tryb PWM jest tylko 8 bitowy.Schemat poniżej ilustruje budowę tego licznika.

 

Na razie zajmijmy się tylko górną częścią licznika. O tym co jest na dole schematu będę mówił na koniec artykułu. Licznik ten jest taką uproszczoną wersją timera1. Posiada tylko jeden rejestr OCR.

W celu konfiguracji tego licznika korzystamy w rejestru TCCR2. Bity zawarte w nim służą do wyboru preskalera, trybu pracy, oraz trybu pracy wyjścia OC2. Poniżej przedstawiam tabele zaczerpnięte z noty katalogowej kontrolera atmega8.

Ze względu na to, że poszczególne tryby już zostały opisane w poprzedniej części kursu, nie będę ich teraz opisywał szczegółowo, tylko zaprezentuję konkretnie przykłady. Jednak na razie przedję jeszcze do jednego zagadnienia.

Praca asynchroniczna

Normalnie licznik pracuje w trybie synchronicznym, czyli nalicza impulsy równo z taktami zegarowymi procesora. Może to powodować błędy, gdy chcemy bardzo dokładnie odmierzać czas. W tym celu wymyślono tryb asynchroniczny. Impulsy pochodzące zewnątrz kontrolera są w nim naliczane dokładnie w chwili ich wystąpienia, nie zależnie od taktowania procesora. Do sterowania tym trybem służy ten dziwny blok na dole schematu z pierwszego rysunku. Obsługę tego trybu umożliwia rejestr ASSR.

Przykłady

Program przykładowy będzie miał za zadanie generować przebieg PWM. Skorzystamy z trybu trzeciego timera 2.

#define F_CPU 1000000 //ustawienie oscylatora na 1MHz

#include <avr/io.h> //dołączenie podstawowej biblioteki

int main()

{

TCCR2 |= (1<<WGM20) | (1<<WGM 21) | (1<<CS22); | (1<<COM21) //włączenie trybu fast PWM, //preskaler ustawiony na 64, a wyjście w trybie nie odwracanym

OCR2 = 127 //ustawienie współczynnika wypełnienia

while() //pusta pętla

{

 

}

}

Program ten generuje na wyjściu OC2 sygnał o wypełnieniu 50%. Wartość wpisana do rejestru OCR2 musi się mieścić w przedziale od 0(wypełnienie 0%), do 255(wypełnienie 100%).

N tym zakończę opis liczników w mikrokontrolerach AVR, mam nadzieje, że artykuły te pomogą w pisaniu programów wymagających precyzyjnego odmierzania czasu i generowania sygnałów zmiennych. W następnej części kursu przejdę już do komparatora analogowego.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*


*

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>