Oto wycinek kodu odpowiadający za odczyt i zapis zegara:
Config Sda = Portc.4
Config Scl = Portc.5
Declare Sub Odczyt_rtc(sekunda As Byte , Minuta As Byte , Godzina As Byte)
Declare Sub Zapis_rtc
...
do
Call Odczyt_rtc(sekunda , Minuta , Godzina)
if Pind.3 = 0 Or Pind.2 = 0 Then Gosub Menu
...
loop
Menu:
Call Odczyt_rtc(sekunda , Minuta , Godzina)
Licznikmenu = 0
if Pind.3 = 0 Or Pind.2 = 0 Then Gosub Czekaj1
Minuta1 = Minuta
Godzina1 = Godzina
Do
If Licznikmenu < 40 Then Incr Licznikmenu
If Pind.2 = 0 Then
Incr Godzina1 : Licznikmenu = 0
If Godzina1 = 24 Then Godzina1 = 0
Waitms 250
End If
If Pind.3 = 0 Then
Incr Minuta1 : Licznikmenu = 0
If Minuta1 = 60 Then Minuta1 = 0
Waitms 250
End If
Locate 1 , 1
Lcd " USTAWIANIE ZEGARA "
Locate 2 , 1
Lcd " "
Locate 3 , 1
Lcd "AKTUALNY CZAS-"
If Godzina < 10 Then
Lcd "0" ; Godzina
Else
Lcd Godzina
End If
Lcd ":"
If Minuta < 10 Then
Lcd "0" ; Minuta ; " "
Else
Lcd Minuta ; " "
End If
Locate 4 , 1
Lcd " USTAW CZAS-"
If Godzina1 < 10 Then
Lcd "0" ; Godzina1
Else
Lcd Godzina1
End If
Lcd ":"
If Minuta1 < 10 Then
Lcd "0" ; Minuta1 ; " "
Else
Lcd Minuta1 ; " "
End If
If Licznikmenu = 40 Then
Call Zapis_rtc
Return
End If
Loop
End
Sub Odczyt_rtc(sekunda As Byte , Minuta As Byte , Godzina As Byte)
I2cstart 'INICJALIZACJA MAGISTRALI I2C.'
I2cwbyte 162 'PODANIE ADRESU DLA PCF 8583; ZAPIS.'
I2cwbyte 2 'WYBÓR DRUGIEGO REJESTRU, REJESTR SEKUND.'
I2cstart 'POWTÓRNA INICJALIZACJA MAGISTRALI I2C.'
I2cwbyte 163 'PODANIE ADRESU DLA PCF 8583; ODCZYT.'
I2crbyte Sekunda , Ack 'ODCZYT SEKUND Z POTWIERDZENIE TRANSMISJI.'
I2crbyte Minuta , Ack 'ODCZYT MINUT Z POTWIERDZENIE TRANSMISJI.'
I2crbyte Godzina , Nack 'ODCZYT GODZIN BEZ POTWIERDZENIA TRANSMISJI.'
I2cstop 'KONIEC TRANSMISJI I2C.'
Sekunda = Makedec(sekunda) 'KONWERSJA SEKUND Z LICZBY W FORMACIE BCD NA DEC.'
Minuta = Makedec(minuta) 'KONWERSJA MINUT Z LICZBY W FORMACIE BCD NA DEC.'
Godzina = Makedec(godzina)
End Sub
Sub Zapis_rtc
Sekunda1 = Makebcd(sekunda1) 'KONWERSJA SEKUND Z LICZBY W FORMACIE DEC NA BCD.'
Minuta1 = Makebcd(minuta1) 'KONWERSJA MINUT Z LICZBY W FORMACIE DEC NA DEC BCD.'
Godzina1 = Makebcd(godzina1) 'KONWERSJA GODZIN Z LICZBY W FORMACIE DEC NA BCD.'
I2cstart 'INICJALIZACJA MAGISTRALI I2C.'
I2cwbyte 162 'PODANIE ADRESU DLA PCF 8583; ZAPIS.'
I2cwbyte 0 'WYBRANIE PIERWSZEGO KONTROLNEGO REJESTRU.'
I2cwbyte 8
I2cstop
I2cstart
I2cwbyte 162 'USTAWIENIE TRYBU ZAPISU.'
I2cwbyte 2 'WYBÓR DRUGIEGO REJESTRU, REJESTR SEKUND.'
I2cwbyte Sekunda1 'ZAPIS SEKUND.'
I2cwbyte Minuta1 'ZAPIS MINUT.'
I2cwbyte Godzina1 'ZAPIS GODZIN.'
I2cstop 'KONIEC TRANSMISJI I2C.'
Cls
Locate 1 , 1
Lcd Spc(20)
Locate 2 , 1
Lcd " ZEGAR "
Locate 3 , 1
Lcd " USTAWIONY "
Wait 2
Najgorsze jest to że nie można określić czasu startu.
Nieraz zaczyna działać po 2 min. nie raz po 1,a nie raz po kilku restartach.
W każdym razie jak zacznie działać to później nie ma żadnych problemów.
Co do schematu to jest tak jak w nocie PCF :
Zasilanie 5V z kondensatorem 100uF.
