Witam!
Dopiero zaczynam i nie mogę sobie poradzić z poprawnym zliczaniem w przerwaniu pochodzącym od Timera2 w trybie CTC. Chciałem wykorzystać programowe Timery, które są pomysłem Pana Kardasia (korzystam z jego książki) do tego aby jeden z nich tykał co 1sek. Zacząłem, więc tak: 16MHz/1024/125/125 daje teoretycznie "cyknięcie" co sekundę, a u mnie wychodzi w czasie między 2-3sek. Swoją Atmege 16A taktuję kwarcem 16MHz i fuse bity mam na pewno dobrze ustawione, bo gdy wykorzystuję przy inkrementacji zmiennej funkcję _delay_ms(1000) to zmiany w zmniennej następują idelnie po sekundzie. Gdzie robię błąd? Dodam, że na Timerze1 też miałem podobny problem mimo tego, że tyknięcie było realizowane tylko na 16bitowym rejestrze, a w kodzie przerwania była tylko inkrementacja zmiennej sek. Załączam kod [code]
Dodam, że wszelkie zmiany w rejestrze OCR2 nie zmieniają prędkości zliczania. Tu jest błąd, dlatego zlicza w tempie ponad 2 razy wolniejszym. Coś mogłem źle ustawić? Coś mogłem wcześniej przestawić, że nie uC czyta tych wartości w OCRx ?
Dopiero zaczynam i nie mogę sobie poradzić z poprawnym zliczaniem w przerwaniu pochodzącym od Timera2 w trybie CTC. Chciałem wykorzystać programowe Timery, które są pomysłem Pana Kardasia (korzystam z jego książki) do tego aby jeden z nich tykał co 1sek. Zacząłem, więc tak: 16MHz/1024/125/125 daje teoretycznie "cyknięcie" co sekundę, a u mnie wychodzi w czasie między 2-3sek. Swoją Atmege 16A taktuję kwarcem 16MHz i fuse bity mam na pewno dobrze ustawione, bo gdy wykorzystuję przy inkrementacji zmiennej funkcję _delay_ms(1000) to zmiany w zmniennej następują idelnie po sekundzie. Gdzie robię błąd? Dodam, że na Timerze1 też miałem podobny problem mimo tego, że tyknięcie było realizowane tylko na 16bitowym rejestrze, a w kodzie przerwania była tylko inkrementacja zmiennej sek. Załączam kod [code]
Kod: C / C++
Dodam, że wszelkie zmiany w rejestrze OCR2 nie zmieniają prędkości zliczania. Tu jest błąd, dlatego zlicza w tempie ponad 2 razy wolniejszym. Coś mogłem źle ustawić? Coś mogłem wcześniej przestawić, że nie uC czyta tych wartości w OCRx ?