logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega1284P] Timer1 przerwanie co BPM - błędne ustawienia preskalera?

esane 18 Kwi 2012 20:42 965 1
REKLAMA
  • #1 10809347
    esane
    Poziom 9  
    Zwracam się z prośbą o naprowadzenie co robię źle. Potrzebuje wygenerować przerwanie co czas zależny od danego parametru (tutaj BPM). ATmega1284P pracująca z zegarem 20MHz.

    Ustawiam BPM i wyliczam czas:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Inicjuje przerwanie co 1ms:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    I obsługuję w taki sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Problem w tym, że kiedy step_time bedzie ustawiony na np. 200, co teoretycznie powinno sprawić ze warunek w przerwaniu będzie spełniony co 200ms, w rzeczywistosci kod w tym if'ie wykonuje się co około sekunde (na oko).

    Proszę o pomoc i z góry dziękuję za wszekie odpowiedzi.
  • REKLAMA
  • Pomocny post
    #2 10809471
    sulfur
    Poziom 24  
    WGM01, CS02 oraz CS00 nie są dla Timera 1. Więc to co masz, to wcale nie jest tryb CTC. Preskaler akurat wyjątkowo się zgadza. Szacuję, że zamiast 200 milisekund kod w ifie wykonuje się coś pomiędzy 600 a 700 ms.
REKLAMA