Witam.
Żeby się nie rozpisywać, mam taki kod do zegara:
Ustawianie czasu zrealizowane jest na dwóch przyciskach, niby wszystko działa ok ale czasami po ustawieniu czasu zegar stoi tak jakby RTC nie ruszył. Problem na pewno leży po stronie programu bo to nie pierwszy zegar z tym wsadem i takim problemem.
Proszę o pomoc w znalezieniu błedu.
Pozdrawiam.
Żeby się nie rozpisywać, mam taki kod do zegara:
'----Zegar nixie LC-531----.'
'opis złącza ISP
'czerwony - "+"
'zielony - RESET
'biały - MISO
'niebieski - SCK
'brązowy - MOSI
'czarny - "-"
'------opis podłączenia lamp----.'
'segmenty-sterowanie 74141:
'A-pb.0
'B-pb.1
'C-pb.2
'D-pb.3
'pozycje:
'godziny dziesiatki-pc.0
'godziny jednosci-pc.1
'minuty dziesiatki-pc.2
'minuty jednosci-pc.3
'sekundy dziesiatki-pc.4
'sekundy jednosci-pc.5
$regfile = "M8def.dat"
Dim Ktorywysw As Byte
Dim Sekundy As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Minutyjed As Byte
Dim Minutydzies As Byte
Dim Godzinyjed As Byte
Dim Godzinydzies As Byte
Dim Sekundyjed As Byte
Dim Sekundydzies As Byte
Dim Sekundy1 As Byte
Dim Minuty1 As Byte
Dim Godziny1 As Byte
Dim Byt As Bit
Declare Sub Odczyt
Declare Sub Zapis
Config Sda = Portd.0
Config Scl = Portd.1
Config Portc = Output : Portc = &B00000000
Config Portb = Output
Config Pinb.4 = 0
Config Pinb.5 = 0
Portb = &B11110000
Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
On Timer0 Coms
Przyciskgodz Alias Pinb.4
Przyciskmin Alias Pinb.5
Byt = 0
Do
If Przyciskgodz = 0 And Przyciskmin = 1 Then
Byt = 1
Incr Godziny
Waitms 200
If Godziny > 23 Then Godziny = 0
If Przyciskgodz = 1 Then
Godziny1 = Godziny
Minuty1 = Minuty
Sekundy1 = Sekundy
Call Zapis
Byt = 0
End If
End If
If Przyciskmin = 0 And Przyciskgodz = 1 Then
Byt = 1
Incr Minuty
Sekundy = 0
Waitms 200
If Minuty > 59 Then Minuty = 0
If Przyciskmin = 1 Then
Godziny1 = Godziny
Minuty1 = Minuty
Sekundy1 = Sekundy
Call Zapis
Byt = 0
End If
End If
If Byt = 0 Then
Call Odczyt
End If
Waitms 500
Sekundyjed = Sekundy Mod 10
Sekundydzies = Sekundy / 10
Minutyjed = Minuty Mod 10
Minutydzies = Minuty / 10
Godzinyjed = Godziny Mod 10
Godzinydzies = Godziny / 10
Loop : End
Coms:
Incr Ktorywysw : If Ktorywysw = 6 Then Ktorywysw = 0
Select Case Ktorywysw
Case 0:
Portb = Godzinydzies : Portc = &B00000001
Case 1:
Portb = Godzinyjed : Portc = &B00000010
Case 2:
Portb = Minutydzies : Portc = &B00000100
Case 3:
Portb = Minutyjed : Portc = &B00001000
Case 4:
Portb = Sekundydzies : Portc = &B00010000
Case 5:
Portb = Sekundyjed : Portc = &B00100000
End Select
Return
'PROCEDURA ODCZYTU CZASU.'
Sub Odczyt
I2cstart 'INICJALIZACJA MAGISTRALI I2C.'
I2cwbyte 160 'PODANIE ADRESU DLA PCF 8583; ZAPIS.'
I2cwbyte 2 'WYBÓR DRUGIEGO REJESTRU, REJESTR SEKUND.'
I2cstart 'POWTÓRNA INICJALIZACJA MAGISTRALI I2C.'
I2cwbyte 161 'PODANIE ADRESU DLA PCF 8583; ODCZYT.'
I2crbyte Sekundy , Ack
I2crbyte Minuty , Ack 'ODCZYT MINUT Z POTWIERDZENIE TRANSMISJI.'
I2crbyte Godziny , Nack 'ODCZYT GODZIN BEZ POTWIERDZENIA TRANSMISJI.'
I2cstop 'KONIEC TRANSMISJI I2C.'
Sekundy = Makedec(sekundy)
Minuty = Makedec(minuty) 'KONWERSJA MINUT Z LICZBY W FORMACIE BCD NA DEC.'
Godziny = Makedec(godziny) 'KONWERSJA GODZIN Z LICZBY W FORMACIE BCD NA DEC.'
End Sub
'PROCEDURA ZMIANY CZASU.'
Sub Zapis
Sekundy1 = Makebcd(sekundy1)
Minuty1 = Makebcd(minuty1) 'KONWERSJA MINUT Z LICZBY W FORMACIE DEC NA BCD.'
Godziny1 = Makebcd(godziny1) 'KONWERSJA GODZIN Z LICZBY W FORMACIE DEC NA BCD.'
I2cstart 'INICJALIZACJA MAGISTRALI I2C.'
I2cwbyte 160 'PODANIE ADRESU DLA PCF 8583; ZAPIS.'
I2cwbyte 0 'WYBRANIE PIERWSZEGO KONTROLNEGO REJESTRU.'
I2cwbyte 8
I2cstop
I2cstart
I2cwbyte 160 'USTAWIENIE TRYBU ZAPISU.'
I2cwbyte 2 'WYBÓR DRUGIEGO REJESTRU, REJESTR SEKUND.'
I2cwbyte Sekundy1 'ZAPIS SEKUND.'
I2cwbyte Minuty1 'ZAPIS MINUT.'
I2cwbyte Godziny1 'ZAPIS GODZIN.'
I2cstop 'KONIEC TRANSMISJI I2C.'
End Sub
Ustawianie czasu zrealizowane jest na dwóch przyciskach, niby wszystko działa ok ale czasami po ustawieniu czasu zegar stoi tak jakby RTC nie ruszył. Problem na pewno leży po stronie programu bo to nie pierwszy zegar z tym wsadem i takim problemem.
Proszę o pomoc w znalezieniu błedu.
Pozdrawiam.