Mam mały problem. Chciałem przy wykorzystaniu czujnika DS1820 i AT89C2051 zrobić dość dokładny termostat. Jednak mam pewne problemy z kodem źródłowym. gdyż na pinie 8 atmela cały czas mam stan wysoki i nie wiem gdzie jest problem. Może ktoś z was potrafiłby mi pomóc?
Oto kod źródłowy programu.
Config 1wire = P3.3
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
Dim T0 As Integer 'temp włączania grzałki
Reset P3.4
Do
T0 = 160
1wwrite &HCC : 1wwrite &H44
Call Read1820
Waitms 400
Cls
If T <= T0 Then
Set P3.4
Waitms 100
Else
Reset P3.4
Waitms 100
End If
Loop
End
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
W załączniku podesłałem jeszcze sposób podłączenia czujnika do Atmela.
Oto kod źródłowy programu.
Config 1wire = P3.3
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
Dim T0 As Integer 'temp włączania grzałki
Reset P3.4
Do
T0 = 160
1wwrite &HCC : 1wwrite &H44
Call Read1820
Waitms 400
Cls
If T <= T0 Then
Set P3.4
Waitms 100
Else
Reset P3.4
Waitms 100
End If
Loop
End
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
W załączniku podesłałem jeszcze sposób podłączenia czujnika do Atmela.