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

Jak skonfigurować zegarek RTC i termometr na LCD w Bascom na Atmega8?

fantasta 06 Sie 2006 21:59 8863 33
Najlepsze odpowiedzi

Jak w Bascomie na ATmega8 skonfigurować zegar RTC i wyświetlać czas oraz temperaturę na LCD?

Najprościej ustaw w programie właściwe taktowanie mikrokontrolera przez `$regfile = "m8def.dat"` i `$crystal = ...`, a sam czas wyświetlaj w BASCOM-ie komendą `Lcd Time$` lub `Lcd Date$` — nie musisz pisać osobnych liczników godzin i minut [#2887530][#2887568] Jeśli chcesz zegar programowy, użyj `Config Clock = Soft`, `Config Date = Mdy`/`Dmy`, wpisz startowe `Time$ = "20:29:01"` i `Date$ = "08/06/06"`, a do LCD po prostu rysuj `Time$` i `Date$` [#2887568] Do ustawiania czasu BASCOM używa zmiennych `_day`, `_month`, `_year`, `_sec`, `_hour`, `_min`, więc zmiana np. `_min = 15` od razu wpływa na `Time$` [#7710] Jeśli chcesz dokładniejszy RTC, w ATmega8 można użyć asynchronicznego Timer2 z kwarcem 32,768 kHz podłączonym do wejść zegarowych, a program może pracować z wewnętrznego RC lub innego źródła taktowania [#2887530][#2887568] Przy LCD najlepiej nie czyścić ekranu `Cls` co sekundę, tylko użyć `Home`, bo `Cls` powodował miganie [#2926833][#2926872] Do obsługi przycisków można użyć `Debounce`, a przy dłuższym wciśnięciu dodać skok np. o 5 do `hour` lub `_min` [#2896449][#2926872]
REKLAMA
  • #1 2887451
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Takie moze glupie pytania ale zaryzykuje i napisze. Jestem poczatkujacym w uC wiec pytam.

    Po pierwsze chcialbym zeby mi ktos wytlumaczyl jak obliczac czas z generatora i ile przerwan itd i jak ustawic procka. Mozna od razu na 12MHz generatorze.

    Po drugie jak obslugiwac LCD zeby wyswietlal mi czas. Czy pisze sie osobny pod program do minut i godz gdzie jest jakis warunek ktory dodaje ciagle jeden az do 59 i 23 dla godz i pozniej wyswielic to w danym miejscu LCD czy jakos inaczej.

    Po trzecie czytalem dokumentacje i Atmega8 ma RTC. Podobno ten system jest najbardziej dokladny. Dolacza sie kwarc zegarkowy tylko. Jak uaktywnic to w BASCOM`ie i pozniej jak to wyswietlic.

    Narazie tyle. Licze na pomoc ;)
  • REKLAMA
  • Pomocny post
    #2 2887530
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację
    $regfile = "m8def.dat"
    $crystal = 12000000

    Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana i bardzo uproszczona.
    Prezentację wyniku czasu wywołuje się komendą Lcd zmienna i tyle :)

    Tak, atmega8 może obsługiwać RTC, podłącza się wtedy kwarc zegarkowy 32768 pod wejścia XTAL, natomiast program goni się z wewnętrznego generatora taktującego RC. Sposobów na zrobienie zegarka jest wiele.

    W prezencie podsyłam przykładowy program na atmega8 zegarka wykorzystujący timer1 od przepełnienia...

    pozdr KN
    Załączniki:
    • zegar.txt (1.42 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #3 2887549
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Hmmm..Moze i myle asembler bo pisalem kilka prostych programow na 8051 ale wydaje mi sie ze trzeba obliczyc cos przeciez. Przeciez timer i jegoprescale, zlicza do ilus tam i jest przerwanie. Iles przerwan daje nam sek jak chcemy. Itd... Przynajmniej mi sie tak wydaje.

    Co do RTC to fajnie ze mozna ale jak to uruchomic w BASCOM`ie. No i jak z tym liczeniem minut i godz.
  • #4 2887568
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    A jeżeli chodzi o obliczenia to zobacz jak jest w przykładzie z timerem1 w pierwszym programie, preskaler ustalony wraz z wpisem do rejestru timera by zgłaszał przerwanie co 1s

    Napisałem szybki soft do RTC w atmega8, oczywiście timer2 taktowany asynchronicznie z XTAL reonatorem zegarkowym 32768

    Nie będę opisywał co jest z czego, sprawdz w help bascoma co oznaczają i jak konfiguruje się komendy, jezeli coś nie jasne pytaj :)

    $regfile = "m8def.dat"
    $crystal = 12000000


    Config Lcd = 16 * 2

    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

    Config Clock = Soft
    Config Date = Mdy , Separator = /

    Enable Interrupts

    Date$ = "08/06/06"
    Time$ = "20:29:01"

    Do

    Cls

    Lcd Time$

    Lowerline

    Lcd Date$

    Waitms 200

    Loop

    End

    pozdr KN
  • #5 2887584
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Hmmmm...nawet ciekawy.

    Czyli jak ustalasz godz wyzej to pozniej sam juz sobie dolicza itd ??

    I pytanko o LCD i ISP. Zrobilem sobie programatorek na bazie STK200 z jakies stronki i mam pytanko. Chcialem podlaczyc wyswietlacz do portu B, czyli akurat tam gdzie sa piny do programatora. Czy to nie koliduje ze soba itd ??

    EDIT.

    Po probie kompilacji wyskakuja bledy ze nieznany paramert "separator" i "time" Obydwa w lini zaczynajacej sie "Config date..."
  • REKLAMA
  • #6 2887618
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    Tak, od tego co wpiszesz, program będzie leciał dalej z czasem i datą :)

    Apropo LCD jezeli na PB3 PB4 i PB5 atmegi przypadną wejścia danych Dx LCD to nie powinno być problemów ze względu na duża impedancję wejścia, choć może się okazać, ża na czas programowania może być konieczne odłączenie tychże pinów od LCD... rozumiem, że LCD w pracy 4 bitowej ?

    pozdr KN

    Dodano po 3 [minuty]:

    Sprawdz poprawność programu, czy dobrze skopiowany... u mnie działa :)

    Jakiego kompliatora używasz, w której wersji ?

    pozdr KN
  • #7 2887644
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Tak w pracy 4-bitowej.

    A jak zrobic gdy chce wpisac np. przyciskami date i czas bo przeciez jak zrobie cos takiego to trzeba go pozniej ustawic :) Sadze ze program wtedysie troche rozrosnie i trzeba by uzyc min 2 przyciskow.
  • #8 2887710
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    Procedura kompilatora time$ czy date$ używa wewnętrznych zmiennych bajtowych zdeklarowanych jako: _day , _month, _year , _sec, _hour, _min

    Jeżeli przypiszesz jednej z tych zmiennych odpowiednią wartość taka będzie uwzględniona. Przypisanie odbywa się typowo np.

    _min = 15

    i tak podobnie dla pozostałych, tyle podpowiem :) Natomiast podprogram przypisujący odpowiednim zmiennym porządane wartości pozostawiam twojej inwencji twórczej :)

    pozdr KN
  • #9 2895227
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Wkoncu jutro bede mial chwilke czasu by sie pobawic i mam nastepne pytania :)

    Czy kazdy zegarek mial ten kwarc zegarkowy ?? Bo wyprulem z jednego starego zegareczka i sie zastnawiam czy bedzie dzialal.

    Jak mozna napisac w bascomie procedure taka ze przy przycisnieciu przycisku przz 2 sek przechodzi gdzies itd.
  • Pomocny post
    #10 2896449
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    Wszystko zależy jak rozwiązano w danym przypadku sposób liczenia interwałów taktowania zegara, ale typowo w elektronicznych układach odmierzających czas są montowane te typowe kwarce 32768 kHz w cylindrycznej oprawce. Owe kwarce znajdziesz w zegarkach czy to wskazówkowych kwarcowych z budzikiem czy też w płytach głównych PC :)

    Jeżeli przycisk masz na jednym z portów procesora to możesz wykorzystać instrukcję Debounce np

    Debounce Pind.1 , 0 , etykieta, Sub

    czyli gdy pind.1 ma stan 0 to skocz do podprogramu etykieta

    Instrukcja debounce wykorzystuje dwukrotne sprawdzenie warunku (tu sprawdzenie stanu portu czy 1 czy 0) w odstępach 25ms. Czas ten możemy zmienić wydłużyć odpowiednio konfigurując np:

    Config debounce = 50 dla 50ms odstepu

    Poczytaj w pomocy bascom o tych instrukcjach DEBOUNCE oraz Config DEBOUNCE, to proste i nie ma co tu opisywać :)

    pozdr KN
  • #11 2924402
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Jestem ponownie. Projeckt mam prawie ukonczony i mam jeszcze pytanka.

    To jest kod do termomertu na DS18B20 i zegarka.
    I teraz mam taki problem. Odczyt temp jest bardzo niestabilny. Cyfry po przecinku skacza tak o 2-3 jednostki. Raz jest 22.4 za sek 22.7 a za nastepna 22. 5 itp itp.

    Mam inny kod z forum ktory nie obsluguje temp ujemnych dla proby i tam odczyt jest stabilny. Co poprawic w moim zeby takze tak bylo.

    Po drugie czy da sie jakos ustawic wyswietlanie na LCD z wieksza czestotliwoscia bo teraz wyswietla co sek i tak glupio miga caly ekran co sek.

    I po trzecie jak wstawic procedure ustawiania godz aby nie czekac tej calej sek zanim program ponownie sie zapetli ?? Bo teraz trzymajac przycisk ustawiania min np. Co sek przestawia mi sie wartosc a chcialbym szybciej.

    $regfile = "m8def.DAT"
    
    Config 1wire = Portd.2
    Config Pind.1 = Input
    Config Pind.4 = Input
                                                             
    Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
    Config Lcd = 20 * 2
    Cursor Off                                                
    Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 
    
    Config Clock = Soft
    Enable Interrupts
    Time$ = "00:00:01"
    
    Dim T1 As Single
    Dim T2 As Single
    Dim B1 As Byte , B2 As Byte , R As Byte
    Dim Tmp As String * 6
    Dim Znak As String * 1
    R = &HFF
    Declare Sub 1wr                                             'podprogram resetujacy magistrale 1w
    Cursor Off
    Cls
    
    Do
    1wr                                                         'podprogram 1wr
    1wwrite &HCC                                                'komenda skip ROM
    1wwrite &H44                                                'komenda convert T
    Waitms 250
    Waitms 250
    1wr                                                         'podprogram 1wr
    1wwrite &HCC                                                'komenda skip ROM
    1wwrite &HBE                                                'komenda read
    
    B1 = 1wread()                                               'odczyt z termometru
    B2 = 1wread()
    
    1wr                                                         'podprogram 1wr
    
    If B2 >= 248 Then                                           'w przypadku temperatur ujemnych
    B1 = R - B1                                                 'Od 255 Odejmujemy B1
    B2 = R - B2                                                 'od 255 odejmujemy B2
    Znak = "-"
    Else
    Znak = "+"
    End If
    T1 = B1 / 16                                                'Przesuniecie w pawo o 4 bajty
    T2 = B2 * 16                                                'przesuniecie w lewo o 4 bajty
    T1 = T1 + T2
    
    Tmp = Fusing(t1 , "###.#")
    
    Cls
    Lcd Time$
    Lowerline
    Lcd Znak ; Tmp ; Chr(1) ; "C "
    
    If Pind.1 = 1 Then
    Incr _min
    If _min = 60 Then
    _min = 0
    End If
    End If
    
    If Pind.4 = 1 Then
    Incr _hour
    If _hour = 24 Then
    _hour = 0
    End If
    End If
    
    Waitms 500
    
    Loop
    
    Sub 1wr                                                     'podprogram resetujacy magistrale
    1wreset
    End Sub
  • #12 2926833
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    Soft nie jest napisany optymalnie, ale wiem że to ten co krąży po necie :) Oczywiście należało by go odchudzić o Single czy Fusing i te niepotrzebne podprogramy....

    Po pierwsze jak masz ustawione fusebit odnośnie taktowania wewnętrznego RC ??? W programie nie zdefiniowałeś jaki dajesz crystal i idzie domyslnie na wpisie z zakładki conf Complier>chip... sprawdz ! Miganie może wynikać z faktu, że procek idzie na domyślnym 1MHz, a soft inaczej !

    Nie wnikając w soft i jego optymalizację, ew miganie możesz usunąć stosując przed Lcd Time$ komendę Home zamiast Cls.

    Apropo ustawiania godzin, możesz zagniezdzić w procedurze dodatkową instrukcję lub podprogram który w chwili wykrycia przytrzymania dłuższego przycisku będzie dodawał do np 5 lub 10 pozycji np

    If pind.1 = 1 then
    wait 3
    If pind.1 = 1 then
    _min = _min + 5

    endif
    endif

    Pamietaj też, by pin atmega przycisku był domyślnie ustawiony w stan niski (podciagnięcie do masy), to ważne gdyż ew stany nieustalone (nawet indukcja napiecia w przewodach przycisku) itp będą same przestawiały czas :)

    pozdr KN
  • #13 2926846
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Z tym dodawaniem po 5 to mi jakos nie pasuje. Ciezko bedzie dobrze ustawic godz.

    Kawalek kodu do termometru jest z elektrody z dzialu download. Miganie moim zdaniem wynika z tego ze w petli programu jest duzo postojow i w sumie wychodzi na 1 sek jak podliczy sie wszystkie Wait`y

    Procesor ustawilem na 4MHz wewnetrzny. Czy w programie wtedy tez trzeba to ustawiac ??
  • Pomocny post
    #14 2926872
    knmp
    Poziom 26  
    Posty: 751
    Pomógł: 85
    Ocena: 31
    Jeżeli atmega idzie na 4MHz to naturalnie że soft trzeba o tym powiadomić

    $crystal = 4000000

    A postoje nie mają wpływu na miganie gdyż LCD w tym czasie powinien wyświetlać to co przed pętlą do chwili ponownego zapisu.. ustaw najpierw odpowiednie taktowanie, potem ew Home zamiadt cls i będzie ok

    A jeżeli chodzi o te + 5 to możesz dodać tę część programu do tego co już masz, i będzie tak że gdy nacisniesz raz przycisk to twoja część będzie dodawała po 1 a gdy przytrzymasz powyżej 3 sek to doda co 5

    pozdr KN
  • #15 2926911
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    knmp napisał:
    Jeżeli atmega idzie na 4MHz to naturalnie że soft trzeba o tym powiadomić

    $crystal = 4000000

    A postoje nie mają wpływu na miganie gdyż LCD w tym czasie powinien wyświetlać to co przed pętlą do chwili ponownego zapisu.. ustaw najpierw odpowiednie taktowanie, potem ew Home zamiadt cls i będzie ok

    pozdr KN


    Oki, zrobione.
    Myslalem ze w programie kwarc deklaruje sie w przypadku tylko zewnetrznego.

    Polecenie Home takze rozwiazalo problem i wyswietlacz juz nie miga.
    Odczyt temp tez jest jakby stabilniejszy ale to nie jest jeszcze to. Przeskakuje teraz np. 21.3 na 21.5 potem na 21.4 ti tak skacze co okolo sek lub 2. Nie wydaje mi sie ze temp tak skacze :|

    Noi jeszcze ustawianie tej godz. Moze na jakis przerwaniach mozna by to bylo zrobic by dzialalo to bez opoznien ??
  • REKLAMA
  • Pomocny post
    #16 2940845
    grabek_radek
    Poziom 21  
    Posty: 579
    Pomógł: 2
    Ocena: 37
    odnosnie zegarka to ja bym to zrobil na timer1 - 16 bitowy licznik, i uzaleznil to od przepelnienia tylko nalezy ustawic preskaler na 256
    wpisac poczatkowa counter=conter+34286
    oczywiscie przy rezonatorze 8 MHz
    8000000/256/(65536-34286) = 1 sekunda
    pozniej tylko zliczanie
    a i jeszcze jedna sprawa nalezalo by zmienic wartosc dwojkowa na kod BCD :)
  • #17 2940861
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Zegarek chodzi bardzo dobrze na RTC. 3 linijki kodu i zegarek z glowy.

    Co do tego skakania termometru to chyba jest wina zaokraglania ktore jest tam wstawione. Sam juz nie wiem.

    A jak z tymi przyciskami ?? Bo bede chcial tam jeszcze date wstawic czyli juz 4 przyciski beda potrzebne. Chyba ze ktos zna sposob na sterowanie za pomoca 2 przyciskow.

    I jeszcze jedno pytanko. Nie chce wyswietlac sekund bo mi sie nie zmiesci na 16 znakowym LCD data i czas w jednej lini. Jak chce wyswielic same zmienne _min i _hour to gdy godz jest 09:04 wyswietla sie 9:4 , jak zrobic zeby z tym zerem sie wyswietlalo. Moze jakies formatowanie ??
  • #18 2948805
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    fantasta napisał:
    I jeszcze jedno pytanko. Nie chce wyswietlac sekund bo mi sie nie zmiesci na 16 znakowym LCD data i czas w jednej lini. Jak chce wyswielic same zmienne _min i _hour to gdy godz jest 09:04 wyswietla sie 9:4 , jak zrobic zeby z tym zerem sie wyswietlalo. Moze jakies formatowanie ??


    I nikt nie wie jak to zrobic :( ??
  • Pomocny post
    #19 2949068
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    fantasta napisał:
    ...I nikt nie wie jak to zrobic :( ??

    Tak źle to nie jest , tylko pewnie nikomu nie chce się odpisywać , na tak proste zagadnienie ;)
    Spróbuj np.
    
    1)Ustaw kursor na dziesiątki godzin
    2) Jeśli _hour jest mniejszy od 10 , to wyświetl "0";
    3) Wyświetl _hour; Wyświetl dwukropek;
    Powtórz kroki 2 i 3 dla minut , ale bez dwukropka
    

    Możesz użyć funkcji Format , ale to przerost formy nad treścią :D

    Piotrek
  • #20 2950154
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Heh, to to chyba wlasnie za duzo pisania skoro mozna uzyc funcji format. Tylko z ta funkcja mam problemy.

    Wyskakuje mi blad ze cos ze zmiennymi jest nie tak. Wydaje mi sie ze nie wyda formatowac bezposrednio tych zmiennych (sa one jako Byte) i tylko dziala z typu String ale tu trzeba by bylo konwertowac.

    Wiec moze dasz cynk jak jej uzyc w tym przypadku??
  • #21 2950407
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    fantasta napisał:
    ...Wiec moze dasz cynk jak jej uzyc w tym przypadku??

    Wybierz tę , która Ci pasuje ;)
    
    
    Const Formatuj = 0 
    'dla 0 z If-ami , dla 1 z Format i sprawdź zajętość flash-a ;)
    
    Cls
    #if Formatuj = 0
    
    Dim I As Byte , J As Byte , S_time As String * 5
    For I = 0 To 23
       For J = 0 To 59
          Locate 1 , 1
          S_time = ""
          If I < 10 Then S_time = "0"
          S_time = S_time + Str(i) + ":"
          If J < 10 Then S_time = S_time + "0"
          S_time = S_time + Str(j)
          Lcd S_time;
       Next
    Next
    
    #else
    
    Dim I As Byte , J As Byte
    Dim S_format As String * 2 , S_time As String * 5
    For I = 0 To 23
       For J = 0 To 59
          Locate 1 , 1
          S_format = Str(i)
          S_format = Format(s_format , "00")
          S_time = S_format + ":"
          S_format = Str(j)
          S_format = Format(s_format , "00")
          S_time = S_time + S_format
          Lcd S_time
       Next
    Next
    
    #endif
    
    
    


    Piotrek
  • #22 3372461
    Michał~88
    Poziom 14  
    Posty: 167
    Pomógł: 7
    Ocena: 3
    Witam.
    Mam pytanie.
    Ja mam kwarc 12 MHz i jak wyliczyć te liczby i czy coś zmieniać w prescale.
    Dziękuję za odpowiedz i pozdrawiam.
  • #23 3372722
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Michał~88 napisał:
    Witam.
    Mam pytanie.
    Ja mam kwarc 12 MHz i jak wyliczyć te liczby i czy coś zmieniać w prescale.
    Dziękuję za odpowiedz i pozdrawiam.


    $crystal = 12000000

    i oczywiscie zmiana sposobu taktowania i czestotliwosci w FuseBitach jezeli masz ATmege.
  • #24 3372794
    Michał~88
    Poziom 14  
    Posty: 167
    Pomógł: 7
    Ocena: 3
    A można by było rozpisać to szerzej
    Cytat:
    zmiana sposobu taktowania i czestotliwosci w FuseBitach jezeli masz ATmege

    Jestem początkujący.
  • #25 3373632
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Michał~88 napisał:
    A można by było rozpisać to szerzej
    Cytat:
    zmiana sposobu taktowania i czestotliwosci w FuseBitach jezeli masz ATmege

    Jestem początkujący.


    Jezeli jestes poczatkujacy to zapraszam do tematu https://www.elektroda.pl/rtvforum/topic560687.html
    Zapoznania sie z HELPem Bacoma, dokumentacja swojego ukladu oraz przejzenia forum gdyz jest to najczestrze pytanie w tym dziale. Musisz takze wiedziec jaki masz uC aby wiedziec czego szukasz.
  • #27 3854858
    nicram_ac
    Poziom 11  
    Posty: 13
    Witam
    Mam zapytanie apropo tego tematu.............otóż mam zbudowany podobny zegar tylko na ATMEGA8535 taktowany zew. 4MHz i do pinów tosc mam podpięty kwarc 32kHz. Zegar fajnie leci tylko jest problem że juz po godzinie opóźnil mi sie o prawie minute.............Z tego co czytalem z pdf-ie to nie trzeba żadnych kondensatorów podlączać. Wyszukalem 3 przyczyny ale nie sprawdzone jeszcze:1. podpiąć obudowe kwarca zegarkowego do masy; 2. obniżyć zasilanie do 4 V; 3.do nóżek owefo kwarca zegarkowego połączyć 2 kondensatory rzędu 33p lub więcej ......... pozdrawiam
  • #28 3856183
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Po pierwsze musi to byc kwarc zegarkowy czyli 32768 Hz. Mam nadzieje ze taki masz i pisales na szybko.
    Drugie, pisza nie pisza daj kondensatory. Zawsze powinno sie dawac. Istnieje mozliwosc ze kwarc nie dosc sie wzbudza.

    Nie obnizaj napiec, nic nie masuj. Poprostu. Daj kondy. Napisz prosty prog, wyswietl na LCD i zrob kolejny pomiar. Zakladam ze bedzie ok.

    Moj juz chodzi sporo czasu i gdyby nie odpiecie kiedys klemy od aku nie musialbym go ani przestawiac ani nic robic.
  • #29 3856973
    autoservice
    Poziom 20  
    Posty: 516
    Pomógł: 7
    Ocena: 16
    ...a co jeśli procek wykona nieoczekiwany reset z powodu zakłóceń? Zegarak ustawiany od nowa??
    Pzdr.
  • #30 3857058
    fantasta
    Poziom 29  
    Posty: 1696
    Pomógł: 48
    Ocena: 100
    Heh, no od nowa, chyba ze bedziesz zapisaywal co jakis czas stan zegara.

    Ale nieoczekiwany reset od zaklucen ?? Hmmm...Z niczym takim sie nigdy nie spotkalem.

Podsumowanie tematu

✨ Dyskusja dotyczy konfiguracji zegarka RTC oraz termometru z wyświetlaczem LCD w BASCOM na mikrokontrolerze Atmega8 z kwarcem 12 MHz. Omówiono deklarację częstotliwości kwarcu w kodzie ($crystal = 12000000) oraz wykorzystanie timerów (timer1 i timer2) do odmierzania czasu i generowania przerwań co sekundę. Wskazano, że Atmega8 może obsługiwać RTC z kwarcem zegarkowym 32768 Hz podłączonym do wejść XTAL, a timer2 może być taktowany asynchronicznie tym kwarcem. Obsługa LCD HD44780 w BASCOM jest uproszczona, a wyświetlanie czasu można realizować przez bezpośrednie wywołanie komendy Lcd z odpowiednimi zmiennymi. Poruszono kwestie formatowania wyświetlania godzin i minut z zerami wiodącymi, z przykładami użycia instrukcji warunkowych lub funkcji Format. Omówiono stabilizację odczytu temperatury z czujnika DS18B20, wskazując na możliwe problemy z zaokrąglaniem i miganiem wyświetlacza, które można zredukować przez poprawne ustawienie częstotliwości taktowania procesora i użycie komendy Home zamiast Cls. Zaproponowano implementację obsługi przycisków z funkcją debounce i przyspieszonego zwiększania wartości przy dłuższym przytrzymaniu. Poruszono też temat kondensatorów do kwarcu zegarkowego 32768 Hz dla stabilności oscylatora oraz problemów z opóźnieniami i resetami procesora. Wskazano, że do sterowania datą i czasem można użyć kilku przycisków lub spróbować sterowania dwoma przyciskami. W dyskusji pojawiły się także przykładowe fragmenty kodu BASCOM do wyświetlania czasu, obsługi RTC i termometru oraz konfiguracji LCD i przycisków. Poruszono również problem pojawiania się zakłóceń na LCD przy dodaniu funkcji woltomierza, sugerując użycie pustych znaków do czyszczenia wyświetlacza.
REKLAMA