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

atmega8 jako zegar rtc - sterownik do akwarium

nobisz 30 Wrz 2008 07:37 2902 14
REKLAMA
  • #1 5584354
    nobisz
    Poziom 14  
    Witam,

    Mam następujący problem, buduje sterownik do akwarium i potrzbny jest mi do tego czas. Na początku stworzyłem procedurę przerwania na kwarcu wew taktowanym na 1mhz i t2, oczywście okazało się, że czas jest baaardzo nieprecyzyjny, pomyslałem że przy 16 bitowym t1 będzie to mozna dokładniej ustawić i przepisałem procedurę - efekt taki sam. Więc wyczytałem, że zeswnętrzny kwarc zegarkowy pomoże. Zrobiłem timer2 z tym kwarcem:
    
    P_czas:
     Sekunda = Sekunda + 1
     If Sekunda > 59 Then
      Sekunda = 0
      If Minuta < 59 Then
       Minuta = Minuta + 1
      Else
       Minuta = 0
       If Godzina < 23 Then
        Godzina = Godzina + 1
       Else
        Godzina = 0
       End If
      End If
     End If
     If Menu = 0 Then
      If Godzina < 10 Then Czas = "   0" + Str(godzina) + ":" Else Czas = "   " + Str(godzina) + ":"
      If Minuta < 10 Then Czas = Czas + "0" + Str(minuta) + ":" Else Czas = Czas + Str(minuta) + ":"
      If Sekunda < 10 Then Czas = Czas + "0" + Str(sekunda) + "  " Else Czas = Czas + Str(sekunda) + "  "
     End If
    Return
    

    Dzisiaj rano okazuje się, że w ciągu 6 godzin spóźnił się o 5 sekund. Czy to wina kwarca, czy może przerwanie gubi jakieś takty. Wywołując przerwanie kiedy następuje zerowanie licznika?
    Ostatnio przeczytałem, że kwarc spóźnia jak nie ma wpiętego dodatkowego kondensatora, gdzia mam go wpiąć (równolegle do kwacra, kwarc-masa, czy kwarc +).
    dzięki za pomoc

    Proszę umieszczać tematy we właściwych działach , stosować znaczniki [code] i tagi w tytule tematu.
    [zumek]
  • REKLAMA
  • #2 5584553
    wojnar
    Poziom 17  
    Raczej wina kwarca. Ale wpływów jest więcej. Jeśli nie chcesz laborować z kwarcami a kondensatorami około niego, zrób tak:
    
    $crystal = 10000000                                'kwarc 10MHz
    Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1
    Compare1a = 50000                                 'przerwanie co 5 ms
    On Compare1a P_czas
    Enable Interrupts
    Enable Compare1a
    .
    .
    ....itd...
    

    W obsłudze przerwania zliczysz 200 takich 5 ms-owych przerwań i masz sekundę.
    Zmianą wartości Compare1a o jeden opóźnisz/przyśpieszysz zegar cca o 1,7 sekundy na dobę.
  • #3 5584831
    nobisz
    Poziom 14  
    widze 2 problemy:
    1. czy to nie obciąży za mocno procesora jak co 5ms będzie mi wskakiwał w przerwanie? Dodam, że nie jest to jedyne przerwanie, obsługuję jescze pozostałe 2 timery oraz int 0,1.
    2. Może marudzę ale precyzja 1,7 sekundy to za mało, bo zegar "ucieknie mi o 5 minut w pół roku.

    Dodano po 48 [minuty]:

    podniosłem częstotliwość wewnętrznego oscylatora do 8mhz i o dziwo spóźnia jeszcze bardziej?!!
  • #4 5584974
    wojnar
    Poziom 17  
    ad1: zmniejsz kwarc, ustaw preskaler ....
    ad2: nie jest wyłączone, że trafisz dziesiątkę ;-)

    No jak wewnętrznego to się nie dziw.
    Jeśli Ci tak zależy na dokładności to nie pomoże Ci nic innego, tylko DCF. Wszystko inne jest zależne od dokładności kwarcu, temperatury i dużo innych czynników.
  • #5 5585012
    Freddie Chopin
    Specjalista - Mikrokontrolery
    nobisz napisał:
    1. czy to nie obciąży za mocno procesora jak co 5ms będzie mi wskakiwał w przerwanie? Dodam, że nie jest to jedyne przerwanie, obsługuję jescze pozostałe 2 timery oraz int 0,1.

    nie ma szans zeby sie wyrobil. w koncu miedzy przerwaniami bedzie w stanie zrealizowac jedynie 40000 instrukcji, a tyle to nawet na dodawanie nie starczy <:

    4\/3!!
  • REKLAMA
  • #6 5585096
    nobisz
    Poziom 14  
    ad. Wojnar: nie sądzę, żeby kwarc 32768 mocno "pływał", są stosowane na codzień w tanim sprzęcie i trzymają całkiem nieżle częstotliwość. Zmniejszenie częstotliwości oscylatora głównego (wew. lub zew.) tylko powiększy błąd czasu. im więcej impulsów tym możesz robić mniejsze korekty.
    ad. Freddie: Tych 40k instrukcji w zasadzie wystarczy, ale jak miałem długie procedury obsługi przerwań to sypał mi się wyświetlacz, na ekran wyskakiwała sieczka. Wyglądało jakby procek się nie wyrabiał. Mea Culpa myliłem się:)
    Nie chcę trafiać, myslę że osiągnięcie dokładności poniżej 1s z oscylatorem 32768 jest realne i tym tropem będę szedł. Znalazłem w data sheet'cie informację o konieczności podpięcia zewnętrznych kondensatorów lub właczniu w fuse bitach wewnętrznych, wieczorem wyprubuję i jutro dam znać co wyszło.
  • #7 5585591
    szelus
    Poziom 34  
    nobisz napisał:

    2. Może marudzę ale precyzja 1,7 sekundy to za mało, bo zegar "ucieknie mi o 5 minut w pół roku.

    Taka uwaga. Typowy kwarc zegarkowy ma 20ppm dokładności, czyli też akurat $$20 \cdot 10^{-6} \cdot 60 \cdot 60 \cdot 24 \approx 1,7$$ sekundy na dobę.
  • #8 5587189
    Pijopic
    Poziom 17  
    Sorki ze tak nie na temat ale nie moge sie powstrzymac :D Musisz miec szalenie wytresowane rybki, ze 5 minut sprawi im roznice :D
  • #9 5587369
    wojnar
    Poziom 17  
    nobisz napisał:
    ..... Znalazłem w data sheet'cie informację o konieczności podpięcia zewnętrznych kondensatorów lub właczniu w fuse bitach wewnętrznych, wieczorem wyprubuję i jutro dam znać co wyszło.

    Chcesz powiedzieć, że od początku próbowałeś bez żadnych kondensatorów?
    Gratuluję!
  • REKLAMA
  • #10 5587439
    nobisz
    Poziom 14  
    ad. Szelus: faktycznie takie dane sa w katalogu, mie przeliczyłem tego, masz rację. Zastanawia mnie tylko dlaczego chiński zegarek za 5 złotychz takim kwarcem chodzi z dokładnością do 1s/miesiąc?

    ad. Pijopic: To nie rybki sa tresowane, ale właściciel:) Ten czas to dla mnie, jak coś robię to ma chodzi zgodnie z założeniami i nie chcę podchodzić do akwarium po tygodniu i przestawiać czasu. Rybkom jest obojętne czy słońce zajdzie kilka minut wcześniej, czy później, albo czy będą karmione o 12:00 lub 12:02 (przynajmniej nigdy się nie skarżyły).

    ad. Wojnar, nie czytasz uważnie, w pierwszej wypowiedzi pytałem o kondensatory, ale nikt nic nie podpowiedział, a teraz się budzisz z gratulacjami:)

    Teraz moje wyniki: właczenie odpowiednich fuse bitów zmniejszyło bład z 5sekund/6godzin do 3sekund/8godzin. Dzisiaj rano wlutowałem 2 kondensatory po 39p pomiędzy każdą nóżkę kwaru i masę. w data sheet pisze 12-22p ale miałem tylko 39 jaki wpływ na częstotliwośc ma pojemność kondensatorów?
  • REKLAMA
  • #11 5587693
    szelus
    Poziom 34  
    nobisz napisał:
    Zastanawia mnie tylko dlaczego chiński zegarek za 5 złotychz takim kwarcem chodzi z dokładnością do 1s/miesiąc?


    Powiem tak. Po pierwsze, te 20ppm w katalogach to najgorszy przypadek, czyli może trafić się lepiej (biorąc pod uwagę, że to "made in PRC" to również może trafić się gorzej, ale to dygresja :wink:).
    Z drugiej strony, mam kilka takich chińskich zegarków i dokładności na takim poziomie, jak piszesz nie zaobserwowałem. Raz na pół roku o tą minutę, dwie trzeba skorygować.
  • #12 5587860
    nobisz
    Poziom 14  
    no właśnie 1-2 minuty to dla mnie rewelacyjny wynik, tylko że to daje 0,6 sekundy na dobę, jestem gotów zaakceptować nawet 1 sekunde na dobę, ale 1,7 sekundy daje już 5 minut na pół roku.
    A co do tej dygresji to nie wiem czy coś jeszcze mamy na rynku co nie pochodzi PRC, skoro ostatnio były afery z mlekiem czy koncentratem jabłkowym sprowadzonym z PRC, jak już spożywka idzie to elektronika...
  • #13 5588056
    wojnar
    Poziom 17  
    nobisz napisał:
    ad. Wojnar, nie czytasz uważnie, w pierwszej wypowiedzi pytałem o kondensatory, ale nikt nic nie podpowiedział, a teraz się budzisz z gratulacjami:)

    Pytałeś tak:
    nobisz napisał:
    Ostatnio przeczytałem, że kwarc spóźnia jak nie ma wpiętego dodatkowego kondensatora, gdzia mam go wpiąć (równolegle do kwacra, kwarc-masa, czy kwarc +).

    Pisałeś dodatkowego, standardowe kondensatory przy kwarcu nie uważają się za dodatkowe.
    quote="nobisz"]no właśnie 1-2 minuty to dla mnie rewelacyjny wynik, tylko że to daje 0,6 sekundy na dobę, jestem gotów zaakceptować nawet 1 sekunde na dobę, ale 1,7 sekundy daje już 5 minut na pół roku.[/quote]
    Jak pisałem już powyżej, tu pomoże już tylko DCF :roll:
  • #14 5588126
    fazolek
    Poziom 12  
    "DS32kHz jest oscylatorem kwarcowym z kompensacją temperaturową (TCXO) do zastosowania w systemach wymagających precyzyjnego określania czasu, m.in. dużych sieciach komputerowych, systemach bankowych czy terminalach POS. DS32KHz pracuje z sygnałem wyjściowym 32,768kHz i spełnia europejskie zalecenia odnośnie precyzji zegarów RTC instalowanych w serwerach sieciowych. DS32KHz jest najdokładniejszym obecnie oscylatorem pracującym z częstotliwością 32kHz. W zakresie temperatur zewnętrznych od 0 do 40st. C dokładność wynosi +-1 minutę na rok (około +-2ppm), a w zakresie temperatur przemysłowych od -40 do +85st. C - +-4 minuty na rok (+-7,5ppm)...." (cytat)
    Nie siedzę w kwarcach i nie sprawdzam czy wychodzą jakieś dokładniejsze ale z własnych doświadczeń zauważam, że jest OK.
    Jak dla mnie to właśnie to czego szukasz :D
    Pytanie tylko po co aż taka dokładność skoro i tak co pół roku trzeba ten zegarek przestawić o godzine
    pozdrawiam
  • #15 5588164
    szelus
    Poziom 34  
    fazolek napisał:

    Pytanie tylko po co aż taka dokładność skoro i tak co pół roku trzeba ten zegarek przestawić o godzine

    Pytanie jak najbardziej słuszne w odniesieniu do chińskich zegarków po 5zł ;)
    Ale przy robieniu sobie dedykowanego zegarka tę poprawkę można już uwzględnić w algorytmie. Obecnie zmiana czasu jest ustalona, nie pamiętam już, na pierwszą czy ostatnią niedzielę odpowiedniego miesiąca i nie zmienia się to co roku nowym rozporządzeniem ...

    Ale ten DS32kHz to słuszny kierunek. Postaram się zapamiętać :)
REKLAMA