Pokrewne
menu      GPS AVR ATMega128 - pomiar odleglosci pomiedzy dwoma punktami
menu      Różnice miedzy wejsciami T0 i T1 w ATMega 162
menu      ATMEGA 128 problemy z startem softu (odpaleniem diody)
menu      ATmega16 i2c (TWI) i bit TWEA
menu      SMD i atmega - wiem, ryzykuje plonk-a...
menu      szukam ciekawych stron z projektami na atmega
menu      ATMega128 _delay_ms koliduje z cli - dlaczego?
menu      Dual Core Atmega128 @ 18.432Mhz
menu      ATMEGA8 i problem z programowaniem eeprom (CodeVision)
menu      [AVR-GCC] Atmega <> MMC
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sp2wlawowo.keep.pl
  • RTC na uK atmega





    Sirtap - 15-08-2006 19:35
    RTC na uK atmega
      witam

    Napisałem program, który realizuje programowo zegar czasu rzeczywistego na
    atmega8535 z kwarcem 8MHz. Jednak program nie działa prawidłowo. Spóźnia się
    około 1-2s na 15h (dłużej nie testowałem), a spodziewałem się lepszej
    dokładności. Czym może to być spowodowane?
    W programie założyłem, że timer1 będzie co sekundę wywoływał przerwanie
    porównania w trybie CTC. Prescaler ustawiłem na 256. Do rejestru OCR1A
    wprowadziłem liczbę 8000000/256-1 (korzystałem ze wzoru z datasheeta).
    Nie wiem czym może być spowodowany tak duży błąd. Szukałem na necie
    podobnego programu, ale bez skutecznie. W większości programów
    wykorzystywane jest przerwanie przepełnienia - nie wiem dlaczego.

    fragmenty kodu programu inicjalizujący timer1:

    ldi R16, high(8000000/256-1) //ma byc 31249
    out OCR1AH, R16
    ldi R16, low(8000000/256-1)
    out OCR1AL, R16

    ldi R16, (1<<WGM12)|(1<<CS12)//prescaler 256
    out TCCR1B, R16

    in R16, TIMSK
    ori R16, 1<<OCIE1A
    out TIMSK, R16

    //przerwanie OC:

    Zegar:
    nop
    andi Cyfra5, 0x7F

    inc Cyfra1
    cpi Cyfra1, 10
    brlo end_zegar
    ldi Cyfra1, 0

    inc Cyfra2
    cpi Cyfra2, 6
    brlo end_zegar
    ldi Cyfra2, 0

    inc Cyfra3
    cpi Cyfra3, 10
    brlo end_zegar
    ldi Cyfra3, 0

    inc Cyfra4
    cpi Cyfra4, 6
    brlo end_zegar
    ldi Cyfra4, 0

    inc Cyfra5

    cpi Cyfra5, 4
    brne nie_reset
    cpi Cyfra6, 2
    brne nie_reset

    clr Cyfra1
    clr Cyfra2
    clr Cyfra3
    clr Cyfra4
    clr Cyfra5
    clr Cyfra6
    rjmp end_zegar

    nie_reset:

    cpi Cyfra5, 10
    brlo end_zegar
    ldi Cyfra5, 0

    inc Cyfra6

    nop
    end_zegar:
    ori Cyfra5, 0x80

    reti

    Reszta pogramu raczej nie jest istotna (obsługa wyświetlaczy LED). Dodam
    jeszcze, że zewnętrzny kwarc na pewno jest włączony.

    Pozdrawiam





    Filip Ozimek - 15-08-2006 19:35

      Sirtap napisał(a):
    > witam
    >
    > Napisałem program, który realizuje programowo zegar czasu rzeczywistego na
    > atmega8535 z kwarcem 8MHz. Jednak program nie działa prawidłowo. Spóźnia się
    > około 1-2s na 15h (dłużej nie testowałem), a spodziewałem się lepszej
    > dokładności. Czym może to być spowodowane?

    Skąd wiesz, że kwarc ma 8000000 Hz? Błąd względny 2/(15*3600) to około
    37 ppm, kwarce zegarkowe mają czasami 20 ppm, gotowe generatory kwarcowe
    (w metalowej obudowie DIL14) 25-100 ppm.

    --
    Filip.




    Sirtap - 15-08-2006 19:35

     
    > Skąd wiesz, że kwarc ma 8000000 Hz?

    Na kwarcu jest napisane YIC B6 8.000 MHz

    > kwarce zegarkowe mają czasami 20 ppm

    To raczej dużo. Czy to znaczy, że w zegarkach stosuje się programową
    korekcję?




    Bogdan Gutknecht - 15-08-2006 19:35

      >
    > > kwarce zegarkowe mają czasami 20 ppm
    >
    > To raczej dużo. Czy to znaczy, że w zegarkach stosuje się programową
    > korekcję?
    >

    Są kondensatorki regulowane pozwalające nieco przeciągnąć częstotliwość.





    Luk - 15-08-2006 19:35

      > Napisałem program, który realizuje programowo zegar czasu rzeczywistego na
    > atmega8535 z kwarcem 8MHz. Jednak program nie działa prawidłowo. Spóźnia
    > się
    > około 1-2s na 15h (dłużej nie testowałem), a spodziewałem się lepszej
    > dokładności. Czym może to być spowodowane?
    > W programie założyłem, że timer1 będzie co sekundę wywoływał przerwanie
    > porównania w trybie CTC. Prescaler ustawiłem na 256. Do rejestru OCR1A
    > wprowadziłem liczbę 8000000/256-1 (korzystałem ze wzoru z datasheeta).
    > Nie wiem czym może być spowodowany tak duży błąd. Szukałem na necie
    > podobnego programu, ale bez skutecznie. W większości programów
    > wykorzystywane jest przerwanie przepełnienia - nie wiem dlaczego.

    W OCR1x masz 31249, a zauważ, że 15h * 3600 to 54000.
    Czyli zmniejszając o 1 OCR1x (8000000/256-2) skorygujesz go o niecałe 2
    sekundy na 15h., a tyle właśnie Ci spóźnia.
    Mógłbyś uzyskać dwa razy większą dokładność możliwość korekcji gdyby w OCR1x
    była dwa razy większa wartość.
    Tyle, że w atmega8515 preskaler musiałbyś wtedy ustawić na 1/128, a takiej
    możliwości niestety nie ma.
    Można za to ustawić preskaler na 1/64 tylko wtedy musiałbyś zmienić kwarc na
    4MHz.
    Przy powyższej konfiguracji w OCR1x wpisujesz wstępnie (8000000/128 -1).
    Teraz każda zmiana o 1 w OCR1x wywołuje w czasie 15h korekcję nieco poniżej
    1s.

    Pozdrawiam
    Lucek




    Sirtap - 15-08-2006 19:35

     
    > W OCR1x masz 31249, a zauważ, że 15h * 3600 to 54000.
    > Czyli zmniejszając o 1 OCR1x (8000000/256-2) skorygujesz go o niecałe 2
    > sekundy na 15h., a tyle właśnie Ci spóźnia.
    > Mógłbyś uzyskać dwa razy większą dokładność możliwość korekcji gdyby w
    > OCR1x była dwa razy większa wartość.
    > Tyle, że w atmega8515 preskaler musiałbyś wtedy ustawić na 1/128, a takiej
    > możliwości niestety nie ma.
    > Można za to ustawić preskaler na 1/64 tylko wtedy musiałbyś zmienić kwarc
    > na 4MHz.
    > Przy powyższej konfiguracji w OCR1x wpisujesz wstępnie (8000000/128 -1).
    > Teraz każda zmiana o 1 w OCR1x wywołuje w czasie 15h korekcję nieco
    > poniżej 1s.

    Czyli potrzebna jest programowa korekcja błędu wynikającego z zastosowanego
    kwarcu. Później wypróbuje asynchroniczny tryb pracy licznika z kwarcem
    32,768kHz. Jeżeli i wtedy będzie taki błąd, to wprowadzę korekcję.

    thx
    pozdrawiam




    Filip J - 15-08-2006 19:36

      Użytkownik "Sirtap" <null@poczta.pl> napisał w wiadomości
    news:ebh49d$ara$1@inews.gazeta.pl...
    > Czyli potrzebna jest programowa korekcja błędu wynikającego z
    > zastosowanego kwarcu. Później wypróbuje asynchroniczny tryb pracy licznika
    > z kwarcem 32,768kHz. Jeżeli i wtedy będzie taki błąd, to wprowadzę
    > korekcję.

    Nie będzie. Chyba, że kwarc zupełnie skopany.

    Pozdrawiam
    FJ
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • konstruktor.keep.pl
  • Design by flankerds.com