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

RTC na ATmega8 z kwarcem 32kHz - nie działa poprawnie, co sprawdzić?

pycia 04 Wrz 2007 12:45 2434 15
REKLAMA
  • #1 4249212
    pycia
    Poziom 11  
    Posty: 63
    Ocena: 1
    Witam!
    Jak w temacie, chciałem stworzyć zegarek na atmedze8, który miał być podstawą większego projektu. RTC ma chodzić na kwarcu zegarkowym 32khz na wejściach XTAL. Napisałem taki programie w BASCOMie jednak coś nie gra;/


    $regfile = "m8535.dat"

    Config Porta = &B11001111 'wyprowadzenia PA4 i PA5 to wejścia, reszta portu to wyjścia
    Porta = &B11111111
    Config Portb = &B11111111 'cały port jako wyjścia a wyjscia
    Portb = &B11111111
    Config Portc = &B11111111 'cały port jako wyjścia a wyjscia

    Config Lcd = 16 * 2 'inicjalizacja wyswietlacza
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

    Cursor Off
    Cls

    Config Clock = Soft , Gosub = Sectic
    Enable Interrupts

    Time$ = "00:00:00"

    Do
    Home
    Lcd "" ; _sec
    Loop
    End


    Sectic:
    Incr _sec
    Toggle Portb.0
    Return

    Wygląda to tak jakby kwarc się nie wzbudzał, na lcd ciągle widnieje 0 a dioda nie miga. Gdzieś na forum przeczytałem żeby dołożyć kondensatory, dałem 33p ale też nic.
    Może mi ktoś wyjaśnić co jest nie tak???????? thx
  • REKLAMA
  • #2 4252877
    pycia
    Poziom 11  
    Posty: 63
    Ocena: 1
    Dziwna sprawa z tym timerem... Otóż zostawiłem zalączony układ i sie okazało ze układ zlicza.. coś zlicza. Co jakies 17min zlicza 2 sekundy ;// kolejne 17 min i 4 na lcd.. Prawde mówiąc nie mam pojęcia co jest grane..
  • #3 4253070
    Zdzicho
    Poziom 25  
    Posty: 551
    Pomógł: 77
    Ocena: 71
    A pewny jesteś że procek nie chodzi na wewnętrznym zegarze ?
  • REKLAMA
  • #4 4253406
    Nostradamus
    Poziom 17  
    Posty: 233
    Pomógł: 14
    Ocena: 4
    a czy nie ustawiałeś procka na zegar zewnętrzny?? Na taktowanie z zewnętrznego kwarcu??
  • REKLAMA
  • #5 4253806
    pycia
    Poziom 11  
    Posty: 63
    Ocena: 1
    Układ chodzi na wewnętrznym kwarcu. Nie deklarowalem go w programie bo bo ustawiłem w options->compilr->communication na 8MHz. W fusbitach tez jest 0100 8MHz.. Znaczy sie co radzicie podpiąc zewnętrzny kwarc? na wewnętrznym chyba tez powinno smigac?
  • #6 4253880
    Nostradamus
    Poziom 17  
    Posty: 233
    Pomógł: 14
    Ocena: 4
    no procek w RTC musi miec podpięty pod XTAL1 i XTAL2 kwarc 32768HZ a procek musi pracować na wewnętrznym oscylatorze. Ustaw sobie w programie
    $regfile = "m8def.dat"
    $crystal = 8000000

    i w FuseBitach na 000100 w nowym BASCOMie.
  • #7 4253891
    Zdzicho
    Poziom 25  
    Posty: 551
    Pomógł: 77
    Ocena: 71
    A jakiego procka w końcu używasz, bo piszesz że ATMega8 a deklarujesz - $regfile = "m8535.dat". Te biblioteki troszkę się różnią !!
  • #8 4253911
    Nostradamus
    Poziom 17  
    Posty: 233
    Pomógł: 14
    Ocena: 4
    no i usuń tą konfigurację Portu A bo ATmega8 tego nie posiada.
  • #9 4254103
    pycia
    Poziom 11  
    Posty: 63
    Ocena: 1
    Tak masz racje, myslalem ze pisząc atmega8 okreslam jakas całą rodzine, faktycznie uzywam procka atmega8535.
    Co do tematu to piszesz

    Cytat:
    no procek w RTC musi miec podpięty pod XTAL1 i XTAL2 kwarc 32768HZ a procek musi pracować na wewnętrznym oscylatorze. Ustaw sobie w programie
    $regfile = "m8def.dat"
    $crystal = 8000000
    i w FuseBitach na 000100 w nowym BASCOMie


    Hmm piszesz ze ten kwarc zegarkowy mam miec podpiety pod XTAL1 i XTAL2?? na pewno? w dokumentacji pisze ze są do niego osobne dwa piny nr 28 i 29 TOSC1 i TOSC2
  • REKLAMA
  • #10 4254141
    Nostradamus
    Poziom 17  
    Posty: 233
    Pomógł: 14
    Ocena: 4
    dla 8535 to podpinasz do TOSC 1 i TOSC 2 czyli do PC6 i PC7. Dla Mega8 to właśnie tosc1 i tosc2 to są Xtal1 i Xtal2.
    skasuj sobie tą konfigurację Config Portc = &B11111111 bo masz kwarca podłączanego właśnie do PC6 i PC7.
  • #11 4254394
    pycia
    Poziom 11  
    Posty: 63
    Ocena: 1
    Racja z tym Config Portc = &B11111111 juz to pozmieniałem. Zadeklarowałem tez wewnętrzny kwarc 8MHz $crystal = 8000000 i efekt jest taki ze 'sekundy' na wyświetlaczu szybciej sie pojawiają.. co jakies 5 min i na dodatek dalej co 2 wartości;/
  • #12 4254531
    orson-pl
    Poziom 17  
    Posty: 250
    Pomógł: 18
    Ocena: 6
    Czytałem wiele razy, że warto dorzucić około 12pF (albo mniej, próbuj), potem jeżeli zależy Ci na dokładności dobierać wartości.
    Sam jakiś czas temu próbowałem uruchomić ATmega8 na zegarku kwarcowym, bez kondensatorów nie udało się, a z kondensatorami już nie próbowałem - postanowiłem użyć PCF8563 i zobaczymy co będzie dalej.
  • #13 4255393
    Zdzicho
    Poziom 25  
    Posty: 551
    Pomógł: 77
    Ocena: 71
    Liczy co 2 bo użyłeś w obsłudze przerwania Incr _sec, a instrukcja Config Clock sama odlicza sekundy, minuty i godziny w systemie 24h.
  • #14 4255863
    pycia
    Poziom 11  
    Posty: 63
    Ocena: 1
    Thx! faktycznie instrukcja incr nie była potrzebna. Noo teraz przynajmniej zlicza mi co 1.. ale nadal duuzo za wolno. Lece do elektronika po nowy kwarc zegarkowy i mniejsze kondensatory.. zobaczymy co z tego wyjdzie

    Dodano po 1 [godziny] 58 [minuty]:

    Oki, jak sie okazało miałem kwarc 32kHz a nie zegarkowy. Polutowalem wszystko na tym nowym + kondensatory 12pF i.. dziala! Co z dokładnością to jeszcze nie ustaliłem gdyż pojawił się nowy problem;//.. z wyświetlaczem. Układ naliczy kilka, kilkanascie albo nawet kilka minut i pojawiają sie krzaczki na lcd.. co o tym myslicie??

    $regfile = "m8535.dat"
    $crystal = 8000000

    Config Porta = &B11001111 'wyprowadzenia PA4 i PA5 to wejścia, reszta portu to wyjścia
    Porta = &B11111111
    Config Portb = &B11111111 'cały port jako wyjścia a wyjscia
    Portb = &B11111111
    Config Pinc.0 = 1 'lcd
    Config Pinc.1 = 1 'lcd
    Config Pinc.2 = 1 'lcd
    Config Pinc.3 = 1 'lcd
    Config Pinc.4 = 1 'lcd
    Config Pinc.5 = 1 'lcd

    Config Lcd = 16 * 2 'inicjalizacja wyswietlacza
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

    Cursor Off
    Cls

    Config Clock = Soft , Gosub = Sectic
    Enable Interrupts

    Time$ = "14:45:00"

    Do
    Home Upper
    Lcd "" ; _sec
    Loop
    End 'end program

    Sectic:
    Toggle Portb.0
    Return
  • #15 4256901
    Nostradamus
    Poziom 17  
    Posty: 233
    Pomógł: 14
    Ocena: 4
    bo w LCD powinieneś mieć: LCD Time$ jeśli chcesz mieć cały zegarek.
    A jeśli chcesz mieć same sekundy to piszesz LCD _sec bo nie potrzebne Ci jest LCD "";

    i po co Ci to:
    Config Pinc.0 = 1 'lcd
    Config Pinc.1 = 1 'lcd
    Config Pinc.2 = 1 'lcd
    Config Pinc.3 = 1 'lcd
    Config Pinc.4 = 1 'lcd
    Config Pinc.5 = 1 'lcd

    usuń to
  • #16 4259644
    pycia
    Poziom 11  
    Posty: 63
    Ocena: 1
    Hmm myślałem że trzeba deklarować te piny na których pracuje wyświetlacz jako wyjścia.. Pozmienialem jak mowiłeś i też działa, wyświatla całą godzinę ale dalej po pewnym czasie robią się krzaczki na wyświetlaczu ;//

Podsumowanie tematu

✨ Dyskusja dotyczy problemów z implementacją zegara RTC na mikrokontrolerze ATmega8535 (mylnie deklarowanym jako ATmega8) z wykorzystaniem kwarcu zegarkowego 32 kHz podłączonego do pinów TOSC1 i TOSC2 (PC6 i PC7). Użytkownik początkowo używał wewnętrznego oscylatora 8 MHz bez poprawnej konfiguracji fuse bitów i deklaracji kwarcu w BASCOMie, co powodowało błędne działanie timera i zliczanie czasu z dużym opóźnieniem. Zalecenia obejmowały poprawne ustawienie fuse bitów na zewnętrzny oscylator 8 MHz, deklarację kwarcu w programie ($crystal = 8000000) oraz podłączenie kwarcu 32,768 kHz do dedykowanych pinów TOSC1 i TOSC2 z kondensatorami około 12 pF dla stabilizacji. Po wymianie kwarcu na właściwy zegarkowy i dodaniu kondensatorów układ zaczął działać poprawnie, jednak pojawiły się problemy z wyświetlaczem LCD, który po pewnym czasie wyświetlał nieczytelne znaki. Wskazano, że konfiguracja portów dla LCD powinna być uproszczona, a piny LCD nie muszą być dodatkowo konfigurowane jako wyjścia. Dodatkowo zauważono, że instrukcja Incr _sec w przerwaniu jest zbędna, gdyż Config Clock w BASCOMie samodzielnie obsługuje odmierzanie czasu. Problemy z dokładnością i stabilnością działania RTC mogą wynikać z nieodpowiedniego doboru kondensatorów i kwarcu. W dyskusji pojawiła się także sugestia rozważenia użycia zewnętrznego układu RTC PCF8563 jako alternatywy.
REKLAMA