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

[ATmega16][WinAVR] Problem z częstotliwością timera

thenkles 24 Wrz 2008 16:29 1326 5
REKLAMA
  • #1 5567143
    thenkles
    Poziom 11  
    Witam,
    Próbuję zmusić timer do wygenerowania sygnału o częstotliwości 16KHz i wypełnieniu 50%. Napisałem coś takiego:

    TCCR0=25;
    OCR0=499;

    Kwarc megi ma 16MHz, więc wychodziłoby na to, że timer 0 będzie działał w trybie CTC z częstotliwością 16KHz, zmieniając stan wyjścia OC0 na przeciwny. Niestety, pomiar multimetrem (nowy, sprawny) daje wartość ok. 32KHz. Jak Zwiększę OCR0 do 999 (ze wzoru wynikałoby, że okres zwiększy się dwukrotnie), to częstotliwość wzrasta do ok. 34KHz. Nie wiem, czy to ja wciąż źle liczę, czy jak? Macie może jakieś pomysły, co może się nie zgadzać?
  • REKLAMA
  • Pomocny post
    #2 5567179
    marenc
    Poziom 24  
    Po pierwsze OCR0 nie jest 16b tylko 8b ... zapisując 499 do rejestru trafia 243...

    Reszte sprawdzam...

    //Dla porównania czyścisz wyjście, więc zakładam, że pamiętałeś o włączeniu podciągania na tym pinie.
    ////Nie konfigurując bitów WGM00 i WGM01 timer zlicza do 255, a przy 243 czyści wyjście ... to nie jest 50% duty(wypełnienia).
    //////PS. Twój miernik jest sprawny ;)
  • REKLAMA
  • #3 5569285
    thenkles
    Poziom 11  
    Cytat:
    Po pierwsze OCR0 nie jest 16b tylko 8b ... zapisując 499 do rejestru trafia 243...


    O, widzisz... tak mnie pochłonęły te wzory, że zapomniałem, iż 499 się w 8 bitach nie zmieści :D

    Generalnie problem wygląda na rozwiązany, tak więc dziękuję ;)

    Cytat:
    //Dla porównania czyścisz wyjście, więc zakładam, że pamiętałeś o włączeniu podciągania na tym pinie.


    Pamiętałem ;)

    Cytat:
    ////Nie konfigurując bitów WGM00 i WGM01 timer zlicza do 255, a przy 243 czyści wyjście ... to nie jest 50% duty(wypełnienia).


    Moim zdaniem jednak zostały skonfigurowane, pomiary również potwierzają, iż wypełnienie wynosi 50% :D


    Cytat:
    //////PS. Twój miernik jest sprawny

    Wiem ;)
  • REKLAMA
  • #4 5569612
    marenc
    Poziom 24  
    Dam Ci jeszcze jedną radę ... stosuj TOGGLE podczas porównania ;) Wtedy w timerze ustawiasz T/2(pół okresu), a wypełnienie zawsze będzie 50% ;)
  • REKLAMA
  • #5 5570126
    thenkles
    Poziom 11  
    marenc napisał:
    Dam Ci jeszcze jedną radę ... stosuj TOGGLE podczas porównania ;) Wtedy w timerze ustawiasz T/2(pół okresu), a wypełnienie zawsze będzie 50% ;)


    No tak, ale przecież 25dec=00011001b. Oznacza to, że ustawione są bity COM00, WGM01 i CS00. Natomiast COM00:1 równe 01 znaczy "Toggle OC0 on compare match", tak więc już dawno mam takie ustawienia ;).
  • #6 5570268
    marenc
    Poziom 24  
    Hmmm ... nie chce mi się tego znów analizować ... jakoś tak z rozmachu przyjąłem, że podałeś wartości w HEX :P
REKLAMA