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

zegarek RTC i termometr na LCD w bascom

fantasta 09 Maj 2007 10:16 8329 33
  • #31
    nicram_ac
    Poziom 10  
    dzięki fanasta....
    sprawa sie wyjaśnila...prawie..........kwarc byl owszem 32768 Hz . Dolączylem kondensatory najpierw 22 pF i 27 pF..........zero efektu,potem dalem 30pF i nawet zegar nie ruszyl, chyba za duże obciążenie , uziemilem obudowe kwarca i też nic.............i i na końcu wziąlem PCF8583 na I2C i na tym samym kwarcu ruszyl bez problemu.........nie wiem czy to kwestia niedokadnosći czy braku synchronizacji z zegarem taktującym procka.........pozostawiam to do przemyslenia, może ini sobie z tym poradzą , może sie to komuś przyda ..............pozdrowienia:-)
  • #32
    fantasta
    Poziom 29  
    Witam.

    Po jakimś czasie musiałem wrócić do mojego projektu gdyż przydałby mi sie woltomierz w aucie teraz i postanowiłem dodać go do mojego zegarka z temp.

    Wszystko działa ok ale po kilku sekundach wyskakują mi jakieś krzaki na LCD. Może ktoś zerknąć na kod i zobaczyć gdzie dałem ciała ;)

    tak to wygląda:

    zegarek RTC i termometr na LCD w bascom

    zegarek RTC i termometr na LCD w bascom

    A tak kod:
    Code:
     
    
    $regfile = "m8def.DAT"
    $crystal = 4000000

    Config 1wire = Portd.0                                      '
    Config Pind.1 = Input
    Config Pind.3 = Input
    Config Pind.2 = Input
    Config Pind.6 = Input

    Set Portd.2
    Set Portd.1
    Set Portd.3
    Set Portd.6

    Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
    Config Lcd = 16 * 2
    Cursor Off                                                 
    Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32         

    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Dim Wartosc As Word
    Dim Volt As Single
    Dim Napiecie As String * 3

    Config Date = Dmy , Separator = -
    Config Clock = Soft
    Enable Interrupts
    Time$ = "14:40:01"
    Date$ = "19-05-09"

    Dim G_format As String * 2
    Dim M_format As String * 2
    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
    Start Adc                                                   
    Cursor Off
    Cls

    Do
    1wr                                                         
    1wwrite &HCC                                               
    1wwrite &H44                                               
    Waitms 250
    Waitms 250
    1wr                                                       
    1wwrite &HCC                                               
    1wwrite &HBE                                               

    B1 = 1wread()                                             
    B2 = 1wread()

    1wr                                                       

    If B2 >= 248 Then                                           
       B1 = R - B1                                             
       B2 = R - B2                                             
       Znak = "-"
    Else
       Znak = "+"
    End If
       T1 = B1 / 16                                             
       T2 = B2 * 16                                             
       T1 = T1 + T2

    Tmp = Fusing(t1 , "##.#")

    G_format = Str(_hour)
    G_format = Format(g_format , "00")
    M_format = Str(_min)
    M_format = Format(m_format , "00")

    Wartosc = Getadc(3)
    Volt = Wartosc * 0.0146
    Napiecie = Fusing(volt , "##.&")

    Home
    Locate 1 , 1
    Lcd G_format ; ":" ; M_format
    Locate 1 , 9
    Lcd Date$
    Locate 2 , 2
    Lcd Napiecie ; "V"
    Locate 2 , 9
    Lcd Znak ; Tmp ; Chr(1) ; "C "


    If Pind.1 = 0 Then
       Incr _min
          If _min = 60 Then
          _min = 0
       End If
    End If

    If Pind.2 = 0 Then
       Incr _hour
          If _hour = 24 Then
          _hour = 0
       End If
    End If

    If Pind.3 = 0 Then
       Incr _day
          If _day = 32 Then
          _day = 1
       End If
    End If

    If Pind.6 = 0 Then
       Incr _month
          If _month = 13 Then
          _month = 1
       End If
    End If


    Loop

    Sub 1wr                                                     
        1wreset
    End Sub
  • #33
    dawid512
    Poziom 32  
    Proponuję zdefiniować pusty znak i wstawić go wszędzie tam gdzie nic nie wyświetlasz.
  • #34
    fantasta
    Poziom 29  
    Niestety, nic nie dało.
    Poprostu teraz te śmieci tylko migną na pół sek na wyświetlaczu i znikają.