Chciałbym użyć wewnetrzny czasomierz do obliczenia sekundy. Przeglądałęm już forum i dowiedziałem się, że nie ma mowy o dokładym czasie ale chociaz w celach edukacyjnych chętnie bym poznał jak to się robi. Swoją drogą z czego ta niedokłądność wynika? Czy chodzi o to, że między taktami kontrollera występują różnicę czasowe wynikające z czynników zewnętrznych?
Jednak przechodząc do rzeczy - przeczytałem dokumentacje 4 razy (dział o czasomierzu) i udało mi się uruchomić zegar:
Wg. specyfikacji moja ATMega 8515 jest taktowana 16Mhz, użyłem prescalera 1024 i z bardzo prostego wyliczenia wynika, ze 16mln/1024 = 15625 dzielac wynik przez liczbe taktow potrzebnych do przepelnienia 15626 / 256 = 22 wychodzi, ze bede mial okolo 22 przepelniej na sekunde. Niestety musialem cos zle zrozumiec bo tak chyba nie jest. Na syganł SIG_OVERFLOW0 inkrementuje licznik a w nieskończonej pętli w głownym kodzie programu ciągle wyświetlam wynik. Wygląda to na jakieś 3 przepełnienia na sekundę a nie 22.
Mam więc dwa pytania - gdzie w moim ograniczonym rozumowaniu pomyliłem się w obliczeniach i jaki jest najlepszy sposób na obliczenie sekundy?
Dziękuje za odpowiedzi.
Jednak przechodząc do rzeczy - przeczytałem dokumentacje 4 razy (dział o czasomierzu) i udało mi się uruchomić zegar:
TCNT0 = 0x0;
TCCR0 = ( 1 << 2 ) | 0x1;
TIMSK = 0x2;
Wg. specyfikacji moja ATMega 8515 jest taktowana 16Mhz, użyłem prescalera 1024 i z bardzo prostego wyliczenia wynika, ze 16mln/1024 = 15625 dzielac wynik przez liczbe taktow potrzebnych do przepelnienia 15626 / 256 = 22 wychodzi, ze bede mial okolo 22 przepelniej na sekunde. Niestety musialem cos zle zrozumiec bo tak chyba nie jest. Na syganł SIG_OVERFLOW0 inkrementuje licznik a w nieskończonej pętli w głownym kodzie programu ciągle wyświetlam wynik. Wygląda to na jakieś 3 przepełnienia na sekundę a nie 22.
Mam więc dwa pytania - gdzie w moim ograniczonym rozumowaniu pomyliłem się w obliczeniach i jaki jest najlepszy sposób na obliczenie sekundy?
Dziękuje za odpowiedzi.
