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
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 1011Teraz 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
Have something to add? Share your thoughts — no account required.
Ask the community — no account required