Obliczanie wartości timera do generowania przerwań co 100ms i 200ms w At90S8535

Obliczanie wartosci tumerow





Poprzedni Następny
Wiadomość
Spis treści
From: "Wnekus" <spamer_at_nospam_won.mi.z.tad>
Subject: Obliczanie wartosci tumerow
Date: Wed, 5 Nov 2003 23:24:14 +0100


W jaki sposob obliczyc jaka wartosc nalezy zaladowac do timera aby
wygenerowal przerwanie po np 100ms czy 200 ewentualnie innych czasach .
Procek to At90S8535

Kwarc 6MHZ



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "EM" <edim123_at_nospam_poczta.onet.pl>
Subject: Re: Obliczanie wartosci tumerow
Date: Thu, 6 Nov 2003 09:05:10 +0100


W jaki sposob obliczyc jaka wartosc nalezy zaladowac do timera aby
wygenerowal przerwanie po np 100ms czy 200 ewentualnie innych czasach .
Procek to At90S8535

Kwarc 6MHZ

Oczywiście wszystko znajdziesz w PDFie, ale spróbuję pomóc...
Najłatwiej chyba wykorzystać Timer1 - 16 bitowy

Źródło sygnału taktującego ustawiasz z preskalera, np. fosc/64
Wtedy otrzymujesz inkrementację licznika z częstotliwością:
6000000/64=93750 Hz
Aby tak ustawić musisz wpisać do rejestru TCCR1B = 0b0000 0011
Wygodnie jest zastosować tryb Clear Timer on Compare Match czyli ustawić
CTC1 (TCCR1B)
Stąd do TCCR1B wpisujesz 0b0000 1011

Teraz aby uzyskać 10 przerwań na sekundę wpisujesz do rejestru porównawczego
OCR1A wartość z obliczeń podzieloną przez 10 czyli
OCR1A = 9375 (musisz rozdzielić na starszy i młodszy bajt w zależności od
kompilatora)

Włączasz zezwolenie na przerwanie przy porównaniu z rejestrem A: czyli
ustawiasz bit OCIE1A w rejestrze TIMSK, czyli TIMSK = 0b0001 0000

Teraz zezwolenie globalne na przerwania: SEI
W adresie 0x006 umieszczasz skok do obsługi przerwania i to wszystko

Mam nadzieję, że nie pomyliłem

Dla np. 200ms, czyli 5/sek zamiast dzielić przez 10 dzilisz przez 5 i
wpisujesz do OCR1A 18750

Ogólnie musisz kombinować z preskalerem i wartością porównawczą.
Czasami jest wygodnie dać jakiś inny kwarc, wtedy zamiast porównania możesz
korzystać z przepełnienie licznika.
Przerwanie można wywoływać także dużo częściej i wykonywać odpowiednie
działanie np. dla co 250 przerwania.

Pozdrawiam
EM




========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lublin.pl!uw.edu.pl!news.pw.edu.pl!not-for-mai