Witam.
Mam zamiar zrobić ten zegar.
Jest w nim również termometr tylko nigdzie nie mogę doczytać czy mierzy on temp. ujemne.
Czy ktoś z forumowiczów to składał?
proszę o pomoc.
pozdro Sjzwojtek
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięAVT-868 Programowany zegar z wyświetlaczem LCD
Moderatorzy:Jacek Bogusz, Grzegorz Becker, procesorowiec, robertw, Moderatorzy
Witam
Już wiem że termometr nie podaje temp. ujemnych.
Może ktoś z forumowiczów dopisze mi odczyt temp. ujemnych?
Załączam kod źródłowy
Będę bardzo wdzięczny za pomoc.
Już wiem że termometr nie podaje temp. ujemnych.
Może ktoś z forumowiczów dopisze mi odczyt temp. ujemnych?
Załączam kod źródłowy
Będę bardzo wdzięczny za pomoc.
Kod: Zaznacz cały
$large
Declare Sub Settime(s As Byte , M As Byte , H As Byte , D As Byte , Month As Byte)
Declare Sub Gettime
Declare Sub Displaytime
Declare Sub Displaydata
Declare Sub Zmgodz
Declare Sub Zmmin
Declare Sub Ustawdata
Declare Sub Zmdzien
Declare Sub Zmmies
Declare Sub Ustawalarm
Declare Sub Zmmal
Declare Sub Zmgal
Config 1wire = P1.1
Declare Sub Read1820
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim T As Integer , T1 As Integer
Dim X As Byte
Config Sda = P3.1
Config Scl = P3.0
Config Lcd = 16 * 2
Cursor Off
Dim S As Byte , M As Byte , H As Byte , D As Byte ', Month As Byte
Dim Wm As Byte , Yd As Byte
Dim Ma As Byte
Dim Ha As Byte
Dim Alarm As Bit
Dim Al As Bit
Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32
Cls
S4 Alias P3.7
S3 Alias P1.0
S1 Alias P3.5
S2 Alias P3.4
Reset P3.3
Lcd "****AVT-XXXX****"
Lowerline
Lcd "*****Witamy!*****"
Wait 3
Cls
Home
Lcd "***BASCOM CLUB***"
Lowerline
Lcd "*****DESIGN******"
Wait 3
Sub Displaytime
Cls
Do
1wwrite &HCC : 1wwrite &H44
Call Read1820
Call Gettime
If X <> S Then
Home
Lcd " Czas: " ; Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)
End If
Home
If X = 255 Then
Home
Lowerline
Lcd " Data: " ; Bcd(yd) ; " " ; Bcd(wm) ; " "
Else
If X <> 0.2 Then
Home
Lowerline
Lcd " " ; Bcd(yd) ; " " ; Bcd(wm) ; " " ; T ; Chr(0) ; "C"
Home
Lowerline
Locate 2 , 10
Lcd X ; ","
End If
End If
Set S1
If S1 = 0 Then
Call Ustawczas
End If
Set S2
If S2 = 0 Then
Call Ustawdata
End If
X = S
Set S4
If S4 = 0 Then
Call Ustawalarm
End If
Set S3
If S3 = 0 Then
Reset P3.3
End If
Loop
End Sub
Sub Displaydata
Call Gettime
Cls
Do
Home
Set S1
If S1 = 0 Then
Call Displaytime
End If
Set S4
If S4 = 0 Then
Call Ustawdata
End If
Loop
End Sub
Sub Gettime
I2cstart 'generate start
I2cwbyte &HA0 'write addres of PCF8583
I2cwbyte 2 'select second register
I2cstart 'generate repeated start
I2cwbyte &HA1 'write address for reading info
I2crbyte S , Ack 'read seconds
I2crbyte M , Ack 'read minuts
I2crbyte H , Ack 'read hours
I2crbyte Yd , Ack 'read year and days
I2crbyte Wm , Nack 'read weekday and month
I2cstop 'generate stop
I2cstart 'generate start
I2cwbyte &HA0 'write addres of PCF8583
I2cwbyte 100 'select second register
I2cstart 'generate repeated start
I2cwbyte &HA1 'write address for reading info
I2crbyte Ha , Ack 'read seconds
I2crbyte Ma , Nack 'read minuts
I2cstop
If Ha = H Then
If Ma = M Then
If Alarm = 1 Then
If S = 0 Then
Set P3.3
End If
End If
End If
End If
End Sub
Sub Settime(s As Byte , M As Byte , H As Byte , Yd As Byte , Month Wm Byte)
I2cstart 'generate start
I2cwbyte &HA0 'write address
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstop 'generate stop
I2cstart 'generate start
I2cwbyte &HA0 'write mode
I2cwbyte 2 'select seconds Register
I2cwbyte S 'write seconds
I2cwbyte M 'write minuts
I2cwbyte H 'Write Hours
I2cwbyte Yd 'write days
I2cwbyte Wm 'write months
I2cstop
I2cstart 'generate start
I2cwbyte &HA0 'write mode
I2cwbyte 100 'select seconds Register
I2cwbyte Ha
I2cwbyte Ma
I2cstop
End Sub
Sub Ustawczas
Cls
Wait 1
Do
Lcd "Set Time:" ; Bcd(h) ; " " ; Bcd(m)
Home
Set S1
If S1 = 0 Then
Call Zmgodz
Waitms 200
End If
Set S2
If S2 = 0 Then
Call Zmmin
Waitms 200
End If
Set S3
If S3 = 0 Then
S = 0
Call Settime
Call Displaytime
Exit Do
End If
Loop
End Sub
Sub Zmdzien
Yd = Makedec(yd)
Incr Yd
If Yd > 31 Then
Yd = 1
End If
Yd = Makebcd(yd)
End Sub
Sub Zmmies
Wm = Makedec(wm)
Incr Wm
If Wm > 12 Then
Wm = 1
End If
Wm = Makebcd(wm)
End Sub
Sub Ustawdata
Cls
Wait 1
Do
Lcd "Set Data:" ; Bcd(yd) ; " " ; Bcd(wm)
Home
Set S1
If S1 = 0 Then
Call Zmdzien
Waitms 200
End If
Set S2
If S2 = 0 Then
Call Zmmies
Waitms 200
End If
Set S3
If S3 = 0 Then
Call Settime
Call Displaytime
Exit Do
End If
Loop
End Sub
Sub Zmgodz
H = Makedec(h)
Incr H
If H > 23 Then
H = 0
End If
H = Makebcd(h)
End Sub
Sub Zmmin
M = Makedec(m)
Incr M
If M > 59 Then
M = 0
End If
M = Makebcd(m)
End Sub
Sub Ustawalarm
Cls
Wait 1
Do
Lcd "Set Alarm: " ; Bcd(ha) ; ":" ; Bcd(ma)
Lowerline
If Alarm = 1 Then
Lcd " Alarm ON "
Else
Lcd " Alarm OFF"
End If
Home
Set S1
If S1 = 0 Then
Call Zmgal
Waitms 200
End If
Set S2
If S2 = 0 Then
Call Zmmal
Waitms 200
End If
Set S3
If S3 = 0 Then
Call Settime
Call Displaytime
Exit Do
End If
Set S4
If S4 = 0 Then
Waitms 200
If Alarm = 1 Then
Alarm = 0
Else
Alarm = 1
End If
End If
Loop
End Sub
Sub Zmgal
Ha = Makedec(ha)
Incr Ha
If Ha > 23 Then
Ha = 0
End If
Ha = Makebcd(ha)
End Sub
Sub Zmmal
Ma = Makedec(ma)
Incr Ma
If Ma > 59 Then
Ma = 0
End If
Ma = Makebcd(ma)
End Sub
Sub Read1820 ' reads sensor ans calculate
Waitms 250
Waitms 100 ' T for 0.1 C
1wreset ' reset the bus
1wwrite &HCC ' read internal RAM
1wwrite &HBE ' read 9 data bytest
Bd(1) = 1wread(9) ' read bytes in array
1wreset ' reset the bus
Tmp = Bd(1) And 1 ' 0.1C precision
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
X = T / 10
End Sub
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości