Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega8 - niedokładny zegar

blackrage 26 Cze 2014 21:58 1170 6
  • #1 26 Cze 2014 21:58
    blackrage
    Poziom 14  

    Witam

    Walczę od jakiegoś czasu z timerem, próbuję odmierzać czas, no i niestety zegar mi się delikatnie "rozjeżdża".

    Moglibyście Panowie podpowiedzieć mi, gdzie robię błąd.

    atmega8 z kwarcem 8Mhz.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 6
  • #3 26 Cze 2014 22:19
    blackrage
    Poziom 14  

    "Rozjeżdża" się o 10s na 10min.
    Nie swiedziałem, że kwarce moga być tak niedokładne.
    Zmieniłem kwarc i sprawdzam co się będzie działo.

    0
  • #4 26 Cze 2014 22:37
    BlueDraco
    Specjalista - Mikrokontrolery

    Ile czasu zajmuje print_time()?

    Co robią funkcje write_cośtam()?

    Poza tym masz o 1 za dużą wartość OCR1A.

    0
  • #5 26 Cze 2014 22:56
    blackrage
    Poziom 14  

    write_variable wyświetla na lcd wartośc zmiennej
    write_char - wysyła znak na lcd - w tym wypadku - ":"
    obydwie funkcje zajmują kilka poleceń zmiany stanów na porcie

    Opóźnienie wprowadzał sposób zliczania czasu - sekundy i minuty zerowały się po osiągnięciu wartości 61.

    Nie za bardzo rozumiem dlaczego wartość OCR1A ma być mniejsza. Mógłbyś mi to wytłumaczyć ?
    Wzorowałem się na kilku przykładach i wyszło mi właśnie że przy f=8Mhz i dzielniku 256 zegar timera pracuje z f=31250Hz, tym samym sekunda minie po tych 31250 cyklach i wtedy powinno wystąpić przerwanie.

    0
  • #6 26 Cze 2014 23:12
    BlueDraco
    Specjalista - Mikrokontrolery

    U ciebie "sekunda" mija po 31251 cyklach - timer liczy od 0.

    0
  • #7 27 Cze 2014 06:59
    emarcus
    Poziom 35  

    blackrage napisał:



    Wzorowałem się na kilku przykładach i wyszło mi właśnie że przy f=8Mhz i dzielniku 256 zegar timera pracuje z f=31250Hz, tym samym sekunda minie po tych 31250 cyklach i wtedy powinno wystąpić przerwanie.


    Dokładnie tak...

    atmega8 - niedokładny zegar

    Również dobrze jest pamiętac że minuta ma 60 sekund zamiast 61....
    Licznik sekund zeruje się przy 60 (generując 1 Carry over).

    e marcus

    0