Obliczanie wartosci tumerow

Nov 05, 2003 1 Replies

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required