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
Kod: Text
