uczę się programowania AVR w c i na ATMEGA16 napisałem prosty programik mający zliczać impulsy w czasie 1 sekundy
timer 1 odmierza czas 1 sekundy
timer 0 zlicza impulsy i przy przepełnieniu inkrementuje zmienną
do wyświetlenia wyniku zmienna jest przemnażana przez 256 a do wyniku dodawana jest bieżąca wartość rejestru TCNT0
do celów ćwiczenia, jako źródła zliczanych impulsów użyłem zegara procesora i skierowałem je do timera 0
przy takiej konfiguracji oraz zegarze procesora 8MHz na wyświetlaczu powinien zawsze pojawiać się wynik 8.000.000
na wyświetlaczu pojawiają się jednak 3 różne wyniki:
7.999.746
8.000.002
8.000.258
jak łatwo zauważyć, wyniki różnią się od siebie kolejno o 256
gdzie leży przyczyna?
skąd pochodzą te 2 takty przy wskazaniu 8.000.002?
timer 1 odmierza czas 1 sekundy
timer 0 zlicza impulsy i przy przepełnieniu inkrementuje zmienną
do wyświetlenia wyniku zmienna jest przemnażana przez 256 a do wyniku dodawana jest bieżąca wartość rejestru TCNT0
do celów ćwiczenia, jako źródła zliczanych impulsów użyłem zegara procesora i skierowałem je do timera 0
przy takiej konfiguracji oraz zegarze procesora 8MHz na wyświetlaczu powinien zawsze pojawiać się wynik 8.000.000
na wyświetlaczu pojawiają się jednak 3 różne wyniki:
7.999.746
8.000.002
8.000.258
jak łatwo zauważyć, wyniki różnią się od siebie kolejno o 256
gdzie leży przyczyna?
skąd pochodzą te 2 takty przy wskazaniu 8.000.002?
Kod: C / C++