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

RTC PCF8583 - Zegar wyświetla znaki zapytania zamiast czasu, temperatura OK

Rafał Piwowarczyk 13 Lis 2015 13:16 1362 5
  • #1 15147399
    Rafał Piwowarczyk
    Poziom 11  
    RTC PCF8583 - Zegar wyświetla znaki zapytania zamiast czasu, temperatura OK

    Czy może ma ktoś pomysł na zegar RTC PCF8583, gdyż walczę z programem od kilku dni i nie mogę sobie z nim poradzić. Zrobiłem sobie zegarek na w.w. układzie i zamiast czasu wyświetla mi same znaki zapytania. Temperatura jest wyświetlana poprawnie. PCF działa poprawnie gdyż generuje na wyjściu sygnał 1Hz, po podłączeniu LED pod wyjście dioda co sekundę miga. SCL i SDA też pracuje poprawnie, podciągnięte są rezystorami 4k7 do Ucc. Myślę że jest to sprawa programowa. Zrobiłem sobie kilka miesięcy temu sterownik z tym PCF na tym samym procu M16 i sterownik działa bez problemu lecz ten drugi zegar na tym samym PCF i M16 wyświetla same znaki zapytania. Już sam nie wiem co się z nim dzieje. Poniżej zamieszczam kod do zegara w Bascomie. Proszę o pomoc.

    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 2400
    $hwstack = 40
    $swstack = 16
    $framesize = 32

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Porta.1 , Db5 = Porta.0 , Db6 = Portb.2 , Db7 = Portb.3 , E = Porta.2 , Rs = Porta.3
    Config 1wire = Portb.4
    Config Sda = Portd.1
    Config Scl = Portd.2
    I2cinit

    Config Submode = New
    Config Int0 = Falling

    Config Porta.4 = Output : Porta.4 = 0
    Config Pinc.3 = Input : Portc.3 = 1
    Config Pind.3 = Input : Portd.3 = 1
    Config Pind.4 = Input : Portd.4 = 1
    Config Pind.5 = Input : Portd.5 = 1
    Config Pind.6 = Input : Portd.6 = 1
    Config Pind.7 = Input : Portd.7 = 1

    Sw1 Alias Pind.7
    Sw2 Alias Pind.6
    Sw3 Alias Pind.5
    Sw4 Alias Pind.4
    Lcd_led Alias Pina.4
    Rx_ Alias Pinc.3

    '*******
    'Zmienne
    '*******

    Dim Dsid1(8) As Byte
    Dim Bd(9) As Byte
    Dim T As Integer
    Dim W As String * 5
    Dim Sekundy As Byte
    Dim Minuty As Byte
    Dim Godziny As Byte
    Dim Ma As Byte
    Dim Ha As Byte

    Declare Sub Ds18b20
    Declare Sub Ustaw_czas
    Declare Sub Set_time

    Set Lcd_led

    Cursor Off
    Cls
    Lcd " ZEGAR RTC "
    Locate 2 , 1
    Lcd "TERMOMETR 433Mhz"
    Wait 3
    Cls

    '*********************
    'Petla glowna programu
    '*********************

    Do

    Gosub Get_time
    Call Ds18b20

    Locate 1 , 1
    Lcd "CZAS: " ; Bcd(godziny) ; ":" ; Bcd(minuty) ; ":" ; Bcd(sekundy)

    Locate 2 , 1
    Lcd "TEMPER.: " ; W ; Chr(223) ; "C "
    Home

    If Sw1 = 0 Then
    Call Ustaw_czas 'przycisk ustawiania czasu
    End If

    Loop
    End

    '****************
    'Odczyt z PCF8583
    '****************

    Get_time:
    I2cstart 'stert odczytu
    I2cwbyte 160 'zapis adresu do PCF8583
    I2cwbyte 2 'wybor rejestru sekund
    I2cstart 'ponowny start odczytu
    I2cwbyte 161 'zapis adresu
    I2crbyte Sekundy , Ack 'odczyt sekund
    I2crbyte Minuty , Ack 'odczyt minut
    I2crbyte Godziny , Ack 'odczyt godzin
    I2cstop 'stop odczytu
    I2cstart 'start odczytu
    I2cwbyte 160 'zapis adresu do PCF8583
    I2cwbyte 100 'wybor rejestru sekund
    I2cstart 'ponowny start odczytu
    I2cwbyte 161 'zapis adresu
    I2crbyte Ha , Ack 'odczyt sekund
    I2crbyte Ma , Nack 'odczyt minut
    I2cstop

    Return

    '****************
    'Zapis do PCF8583
    '****************

    Set_time:
    I2cstart 'start zapisu
    I2cwbyte 160 'zapis adresu
    I2cwbyte 2 'wybor rejestru kontrolnego
    I2cwbyte 8 'wybor roku lub dnia i maska bitu
    I2cstop 'stop zapisu

    I2cstart 'start zapisu
    I2cwbyte 160 'tryb zapisu
    I2cwbyte 2 'wybor rejestru sekund
    I2cwbyte Sekundy 'zapis sekund
    I2cwbyte Minuty 'zapis minut
    I2cwbyte Godziny 'zapis godzin
    I2cstop
    I2cstart 'start zapisu
    I2cwbyte 160 'tryb zapisu
    I2cwbyte 100 'wybor rejestru sekund
    I2cwbyte Ha
    I2cwbyte Ma
    I2cstop

    Return

    '*********************
    'Podprogram ustaw_czas
    '*********************

    Sub Ustaw_czas:
    Cls
    Wait 1

    Do
    Locate 1 , 4
    Lcd "USTAW CZAS:"
    Locate 2 , 7
    Lcd ; Bcd(godziny) ; " " ; Bcd(minuty)
    Home

    If Sw2 = 0 Then
    Godziny = Makedec(godziny)
    Incr Godziny
    If Godziny > 23 Then
    Godziny = 0
    End If
    Waitms 250
    Godziny = Makebcd(godziny)
    End If

    If Sw3 = 0 Then
    Minuty = Makedec(minuty)
    Incr Minuty
    If Minuty > 59 Then
    Minuty = 0
    End If
    Waitms 250
    Minuty = Makebcd(minuty)
    End If

    If Sw4 = 0 Then
    Gosub Set_time
    Exit Do
    End If
    Loop

    End Sub
    Return

    '******************
    'Pomiar temperatury
    '******************

    Sub Ds18b20:
    Dsid1(1) = 1wsearchfirst()

    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 750

    1wreset
    1wwrite &H55
    1wverify Dsid1(1)
    1wwrite &HBE
    T = 1wread(2)
    T = T * 8
    T = T / 16
    W = Str(t)
    W = Format(w , "+0.0")
    Lcd W ; Chr(223) ; "C "
    End Sub
    Return

    End
    Kod: Text
    Zaloguj się, aby zobaczyć kod
    [/syntax]
    Kod: Text
    Zaloguj się, aby zobaczyć kod
    [/syntax]
  • #2 15147708
    -psiak-
    Poziom 32  
    zrezygnuj z bcd nic ci to nie daje, jedynie spowalnia i robi niepotrzebne komplikacje.
  • #3 15155718
    Rafał Piwowarczyk
    Poziom 11  
    Zmiana z konwersji bcd na dziesiętną też nic nie dała. Zamiast znaków zapytania wyświetlacz ciągle pokazuje 165:165:165, data również jest wyświetlana w takiej postaci. Mam pytanie, Czy może być to spowodowane iż w procku M16 jako linie SDA i SCL wykorzystałem porty D1 i D2 zamiast C0 i C1?

    Dodano po 1 [godziny] 32 [minuty]:

    Jednak trafiłem w 10 z tą linią SDA i SCL. Zmontowałem na płytce stykowej zegarek, zmieniłem linie SDA i SCL na porty PC0 i PC1 i zegarek zaczął żyć, działa bez problemu. W jaki sposób zmienić soft żeby działał TWI na liniach PD1 i PD2? Próbowałem już zmianę config SDA i SCL w bascom ale nie przyniosło żadnych rezultatów. Macie jakieś pomysły? RTC PCF8583 - Zegar wyświetla znaki zapytania zamiast czasu, temperatura OK
  • #4 15156192
    -psiak-
    Poziom 32  
    Bo masz zmienić wszędzie, łącznie z inkrementacją.
  • Pomocny post
    #5 15156298
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA