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

[PCF8583][atmega8][bascom] Nie dziala wyslanie danych do RTC

gomes 10 Sty 2012 00:39 2115 2
REKLAMA
  • #1 10375374
    gomes
    Poziom 15  
    Witam,
    Mam problem z wyslaniem danych do rejestrow PCF8583.
    Odczyt przebiega prawidlowo lecz nie moge wyslac danych(godziny,daty itp) do pamieci pcfa. Oto moj przerobiony kod

    $regfile = "m8def.dat"
    $crystal = 8000000
    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 Portb.0 = Input
    Config Sda = Portb.2
    Config Scl = Portb.1
    I2cinit
    Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte
    Dim Dzien As Byte : Dim Miesiac As Byte
    Dim Rok As Byte : Dim Dzien_tygodnia As Byte
    Declare Sub Gettime
    Declare Sub Settime
    Declare Sub Senttime
    Cursor Off Blink
    
    Do
       If Pinb.0 = 0 Then
          Call Gettime
       End If
       If Pinb.3 = 0 Then
          Call Settime
       End If
       Locate 1 , 1
       Lcd "God: " ; Godziny ; ": " ; Minuty ; ": " ; Sekundy ; "   "
       Locate 2 , 1
       Lcd "D:" ; Dzien ; "-" ; Miesiac ; "-" ; Rok ; " : " ; Dzien_tygodnia ; "   "
       Waitms 250
    Loop
    End
    
    
    Sub Gettime()
       I2cstart
       I2cwbyte 160
       I2cwbyte 2
       I2cstart
       I2cwbyte 161
       I2crbyte Sekundy , Ack
       I2crbyte Minuty , Ack
       I2crbyte Godziny , Ack
       I2crbyte Dzien , Ack
       I2crbyte Miesiac , Nack
       I2cstop
       Sekundy = Makedec(sekundy)
       Minuty = Makedec(minuty)
       Godziny = Makedec(godziny)
       Rok = Dzien
       Shift Rok , Right , 6
       Rok = Makedec(rok)
       Dzien.7 = 0 : Dzien.6 = 0
       Dzien = Makedec(dzien)
       Dzien_tygodnia = Miesiac
       Shift Dzien_tygodnia , Right , 5
       Dzien_tygodnia = Makedec(dzien_tygodnia)
       Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
       Miesiac = Makedec(miesiac)
    End Sub
    
    
    Sub Settime()
       Godziny = 22
       Minuty = 12
       Sekundy = 13
       Rok = 12
       Dzien = 3
       Miesiac = 2
    End Sub
    
    
    Sub Senttime()
       Call Settime
       Godziny = Makebcd(godziny)
       Minuty = Makebcd(minuty)
       Sekundy = Makebcd(sekundy)
       Rok = Rok Mod 4
       Rok = Makebcd(rok)
       Shift Rok , Left , 6
       Dzien = Makebcd(dzien)
       Dzien = Rok Or Dzien
       Miesiac = Makebcd(miesiac)
       Dzien_tygodnia = Miesiac
       Shift Dzien_tygodnia , Left , 5
       Miesiac = Dzien_tygodnia Or Miesiac
       I2cstart
       I2cwbyte &HA0
       I2cwbyte 0
       I2cwbyte 8
       I2cstop
       I2cstart
       I2cwbyte &HA0
       I2cwbyte 2
       I2cwbyte Sekundy
       I2cwbyte Minuty
       I2cwbyte Godziny
       I2cwbyte Dzien
       I2cwbyte Miesiac
       I2cstop
    End Sub


    Wzorowalem sie na wielu rozwiazanich lecz bezskutecznie npnp wpisujac w I2cwbyte od 160 do 165 i nic.
    Analizowalem od 6 do 12 str noty katalogowej lecz nie bardzo wiem dlaczego dane sie nie zapisuja. Konwersja nastepuje poprawnie co mozna zaobserwowac przez podlaczenie pinu b.3 oraz b.0 do 5v ( na wyswietlaczu pojawiaja sie dane z funkcji settime).
    Pozdrawiam i czekam na sugestie.
  • REKLAMA
  • Pomocny post
    #2 10375593
    zumek
    Poziom 39  
    gomes napisał:
    ... lecz nie moge wyslac danych(godziny,daty itp) do pamieci pcfa.

    Skoro procedura zapisu do PCF-a nie jest wykonywana, to nic dziwnego :idea:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    gomes napisał:
    czekam na sugestie.

    Nie nazywaj etykiet, podobnie brzmiącymi nazwami (Settime,Senttime).
  • #3 10388661
    gomes
    Poziom 15  
    Dziekuje za pomoc.
REKLAMA