Witam, mam problem z ustawieniem częstotliwości przebiegu wygenerowanego przy pomocy timer0. Chcę uzyskać falę o częstotliwości 36kHz (dla diody nadawczej IR). Moja ATMega8 jest taktowana zewnętrznym kwarcem 12MHz, fuse bity ustawione są tak: DE - low, D9 - high. Obliczyłem, że przy F_CPU równym np. 8MHz używając preskalera równego 1 powinienem uzyskać częstotliwość 31250Hz, bo 8000000Hz/256 (rozdzielczość pwm) = 31250Hz. Niestety w praktyce tak nie jest. Żeby to udowodnić użyłem preskalera równego 8. Otrzymałem przebieg o częstotliwości około 2Hz, a powinno być 3906,25Hz. Mogę jeszcze dodać, że nawet gdyby się okazało, że jednak procek chodzi na 1MHz to i tak zamiast 2Hz dioda migała by z częstotliwością równą 488,28125Hz (100000/256/8=488,28125). O co tutaj chodzi ? Proszę o pomoc.
Jeszcze fragment kodu odpowiedzialny za ustawienie timera0 i przerwania:
Jeszcze fragment kodu odpowiedzialny za ustawienie timera0 i przerwania:
Kod: C / C++