Witam, mam problem z układem jak w tytule, polega on na tym że nie mogę programowo ustawić ani przestawić godziny. jak bym nie ustawił zmiennych odpowiedzialnych za czas, godzina startuje od 59s, 0m, 0h(napisałem w kolejności jak mi się wyświetla, ale to bez różnicy). Program wydaje mi się że działa dobrze, układ najwyraźniej też. A myślę tak, dlatego, że zaraz po włączeniu zegar rusza i "idzie dobrze" tzn zmieniają się sekundy, minuty i godziny, ale jak pisałem nie mogę ich w żaden sposób zmienić. Takiego problemu nie ma z dniem miesiąca, miesiącem i rokiem, te dane mogę zmieniać jak tylko chcę.
Oto kod programu:
Pewnie jest gdzieś jakiś mały błąd, którego nie jestem w satanie wyłapać, proszę Was o pomoc, proszę...
Oto kod programu:
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2 '16*2 type LCD screen
Cls
Config Sda = Portd.6
Config Scl = Portd.7
Config Sda = Portd.6
Config Scl = Portd.7
Config Pind.4 = Input
Config Pind.3 = Input
Ss Alias Pind.4
S Alias Pind.3
Dim D As Byte , Mo As Byte , Y As Byte , Tss As Byte
Dim Tm(7) As Byte , I As Byte , See As Byte , Ot As String * 10 , M As Byte , H As Byte 'At &H60 Overlay
Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte , Byval Year1 As Byte)
Declare Sub Gettime()
See = 1
M = 1
H = 1
D = 16
Mo = 7
Y = 10
Call Settime(see , M , H , D , Mo , Y)
Do
Debounce Ss , 0 , On_ss , Sub
Call Gettime
Cls
'
Lcd "s:" ; Makedec(tm(1)) ; "m:" ; Makedec(tm(2)) ; "g:" ; Makedec(tm(3)) ; "dz:" ; Makedec(tm(4))
Lowerline
Lcd "m: " ; Makedec(tm(6)) ; "r: " ; Makedec(tm(7))
Waitms 500
Loop
End
Sub Gettime()
i2cstart
i2cwbyte 162
I2cwbyte &H02
i2cstart
I2cwbyte 163
I2crbyte Tm(1) , Ack
I2crbyte Tm(2) , Ack
I2crbyte Tm(3) , Ack
I2crbyte Tm(4) , Ack
I2crbyte Tm(5) , Ack
I2crbyte Tm(6) , Nack
I2cstop
Tm(1) = Tm(1) And &B01111111 'sekundy
Tm(2) = Tm(2) And &B01111111 'minuty
Tm(3) = Tm(3) And &B00111111 'godziny
Tm(4) = Tm(4) And &B00111111 'dni miesiąca
Tm(5) = Tm(5) And &B00000111 'dni tygodnia (nie używane)
Tm(6) = Tm(6) And &B00011111 'miesiące
Tm(5) = Tm(5) And &B11111111 'lata
End Sub
'Funkcja ustawiająca zegar PCF8563
Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte , Year1 As Byte)
Tm(1) = Makebcd(s1) 'seconds
Tm(2) = Makebcd(m1) 'minutes
Tm(3) = Makebcd(h1) 'hours
Tm(4) = Makebcd(d1) 'days
Tm(6) = Makebcd(month1)
Tm(7) = Makebcd(year1)
I2cstart 'generate start
I2cwbyte &HA2 'write address
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstart 'repeated start
I2cwbyte &HA2 'write mode
I2cwbyte 2 'select seconds Register
For I = 1 To 7
I2cwbyte Tm(i)
Next 'write seconds
I2cstop
End Sub
On_ss:
Incr H
See = 55
M = 55
'H = 5
D = 16
Mo = 7
Y = 10
Call Settime(see , M , H , D , Mo , Y)
Return
Pewnie jest gdzieś jakiś mały błąd, którego nie jestem w satanie wyłapać, proszę Was o pomoc, proszę...
[/img]