Hallo,
ich habe es inzwischen auch hinbekommen, im Datasheet steht ja, dass die ausgeleseneTemperatur durch zwei geteilt werden muss. Ich lese nur die ersten zwei Bytes aus, das reicht ja, ich mache auch keine CRC Prüfung oder so, mir reichen 0,5° Genauigkeit. Im ersten Byte steht ja die Temp und im zweiten das Vorzeichen, mehr brauch ich nicht und es funktioniert auch so.
Hier also mein endgültiger Code:
Code:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config 1wire = Portb.0
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2
Dim ___lcdno As Bit
Dim T1 As Byte
Dim T2 As Byte
Dim I As Byte
Dim Id1(8) As Byte
Dim Id2(8) As Byte
Dim Ar1(2) As Byte
Dim Ar2(2) As Byte
___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls
Id1(1) = 1wsearchfirst()
Id2(1) = 1wsearchnext()
Do
1wreset 'reset
1wwrite &H55 'Match Rom command
1wwrite Id1(1) , 8 'Id von Sensor 1
1wwrite &H44 'Convert T
Waitms 300 'warten bis convert T fertig ist
1wreset 'reset
1wwrite &H55 'match rom command
1wwrite Id1(1) , 8 'id von sensor 1
1wwrite &HBE 'scratchpad lesen
Ar1(1) = 1wread(1) 'erstes byte auslesen, da steht Temp drin
Ar1(2) = 1wread(1) 'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
Waitms 500
1wreset 'reset
1wwrite &H55 'Match Rom command
1wwrite Id2(1) , 8 'Id von Sensor 2
1wwrite &H44 'Convert T
Waitms 300 'warten bis convert T fertig ist
1wreset 'reset
1wwrite &H55 'match rom command
1wwrite Id2(1) , 8 'id von sensor 2
1wwrite &HBE 'scratchpad lesen
Ar2(1) = 1wread(1) 'erstes byte auslesen, da steht Temp drin
Ar2(2) = 1wread(1) 'zweites Byte auslesen, wenn 00000000 dann pos vorzeichen, wenn 11111111 dann neg vorzeichen
T1 = Ar1(1) / 2
T2 = Ar2(1) / 2
___lcdno = 0
Upperline
If Ar1(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
Lcd "Temperatur 1:" ; " " ; T1
Else
Lcd "Temperatur 1:" ; "-" ; T1
End If
Lowerline
If Ar2(2) = 0 Then 'wenn byte 2 aus dem sensor = 0 dann temp pos, sonst neg
Lcd "Temperatur 2:" ; " " ; T2
Else
Lcd "Temperatur 2:" ; "-" ; T2
End If
___lcdno = 1
Upperline
Lcd "ID 1:" ; Id1(1) ; Id1(2) ; Id1(3) ; Id1(4) ; Id1(5) ; Id1(6) ; Id1(7) ; Id1(8)
Lowerline
Lcd "ID 2:" ; Id2(1) ; Id2(2) ; Id2(3) ; Id2(4) ; Id2(5) ; Id2(6) ; Id2(7) ; Id2(8)
Waitms 500
Loop
Gruß und Danke
Florian
Lesezeichen