Cześć
próbuje zmierzyć czas trwania impulsu 1,5 ms.
Częstotliwość uC 1Mhz.
Do pomiaru wykorzystuję Timer0 bez preskalera.
W przerwaniu TIMER0_OVF_vect zwiększam licznik o 1.
Zacząłem sobie liczyć:
1 takt -> 1us
1 licznik -> 256taktów -> 256us.
Czyli 1,5 ms wychodzi mi dla licznika = 6 (6x256).
No i to działa poprawnie. Zacząłem sobie trochę eksperymentować, bo ten licznik = 6 to trochę mała rozdzielczość.
A więc na starcie ustawiłem TCNT0 = 156. Czyli timer do przepełnienia powinien policzyć 100 taktów.
Czyli 1,5ms powinno być dla licznika (podbijanego o 1 w TIMER0_OVF_vect) równego 15.
Niestety 1,5ms jest dla około licznika = 18.
Czy ktoś mi może powiedzieć skąd taka różnica i gdzie źle myślę?
Moim podejrzeniem jest ten fragment kodu, że ten timer coś się źle ustawia, może w przerwaniu nie wolno takich rzeczy robić?
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ogólnie program działa, ale nurtuje mnie to, że nie wiem dlaczego tak
dzięki za pomoc.