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
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.
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 SubWzorowalem 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.