BASTIUniversal
10.01.2005, 17:54
Hallo,
ich bin schon wieder etwas verwirrt! Diesmal geht's um nen DS1820 (entweder DS1820 oder DS18B20, bestellt hatte ich nen DS18S20, drauf steht DS1820 und hat die ID von nem DS18B20 und DS1820).
Ich hab den Sensor schon mal am laufen gehabt, aber nur mit fertigem Code. Also hab ich mir gedacht, nutz doch mal die 64Bit ID von dem Ding. Gesagt getan, hat auch geklappt, aber jetzt hab ich die internen Register von dem DS18X20 entdeckt.
Ich folgendes tun:
- Auslesen und schreiben der Alarm Temperaturen im Scratchpad Byte 2 und 3
- Auslesen und schreiben der Bit zahl mit der der ADC läuft (Scratchpad Byte 4 Bit's 5&6)
Mein Code ist folgendermaßen:
Dim Idendity(8) as byte
Dim Scratchpad(9) as byte
Dim S as byte
config 1wire = Portb.1
1wreset
Idendity(1) = 1wsearchfirst()
1wreset 'Leitung reseten, damit alle Sensoren "zuhören"
1wverify Idendity(1) 'Einen Sensor mit 64bit nummer Identifizieren und ansprechen
1wwrite &H4E
1wwrite &B00000000
1wwrite &B00000000
1wwrite &B01111111
Call Status(callsub) 'Status des Sensors wird erfasst (ob Bereit für neue Befehle oder nicht)
1wverify Idendity(1)
1wwrite &H48
Call Status(callsub)
1wreset
1wverify Idendity(1)
1wwrite &H44
Call Status(callsub)
1wreset
1wverify Idendity(1)
1wwrite &HBE
Scratchpad(1) = 1wread(9)
For S = 1 To 9 'Inhalt des Scratchpad wiedergeben
Print Bin(scratchpad(s))
Next
End
Sub Status:
Sub Status: 'Wenn der Sensor bereit ist sendet er 1er, wenn nich 0er.
Do
V = 1wread() 'Lesen was Sensor gerade ausgibt
If V = &B00000000 Then 'Wenn Sensor nicht bereit ist (0er), If-Then Schleife beenden
End If
Loop Until V = &B11111111 'So lange If-Then Schleife ausführen bis Sensor bereit ist (also 1er sendet)
End Sub
Nun, und an der UART kommt dann folgendes zurück:
00011111 -> LSB der Temperatur (stimmt wenn Sensor im 9 Bit Modus)
00000000 -> MSB der Temperatur (stimmt auch)
00000000 -> Th Register (müsste &B00000000 betragen)
00000000 -> Tl Register (müsste auch &B00000000 betragen)
11111111 -> Config. Register müsste &B01111111 betragen
11111111 -> Reserved, stimmt (laut Datenblatt &HFF)
00000011 -> Reserved, sollte laut Datenblatt &H0C sein, ist aber &H03
00010000 -> Reserved, sollte laut Datenblatt &H10 sein, ist aber &H20
01011111 -> CRC Byte, hab ich nicht überprüft
Hab ich da wieder irgendwo nen gravierenden Denkfehler drinnen, oder stimmt da was nicht?
Wäre nett wenn ihr mir weiterhelfen könntet!
MfG
Basti
ich bin schon wieder etwas verwirrt! Diesmal geht's um nen DS1820 (entweder DS1820 oder DS18B20, bestellt hatte ich nen DS18S20, drauf steht DS1820 und hat die ID von nem DS18B20 und DS1820).
Ich hab den Sensor schon mal am laufen gehabt, aber nur mit fertigem Code. Also hab ich mir gedacht, nutz doch mal die 64Bit ID von dem Ding. Gesagt getan, hat auch geklappt, aber jetzt hab ich die internen Register von dem DS18X20 entdeckt.
Ich folgendes tun:
- Auslesen und schreiben der Alarm Temperaturen im Scratchpad Byte 2 und 3
- Auslesen und schreiben der Bit zahl mit der der ADC läuft (Scratchpad Byte 4 Bit's 5&6)
Mein Code ist folgendermaßen:
Dim Idendity(8) as byte
Dim Scratchpad(9) as byte
Dim S as byte
config 1wire = Portb.1
1wreset
Idendity(1) = 1wsearchfirst()
1wreset 'Leitung reseten, damit alle Sensoren "zuhören"
1wverify Idendity(1) 'Einen Sensor mit 64bit nummer Identifizieren und ansprechen
1wwrite &H4E
1wwrite &B00000000
1wwrite &B00000000
1wwrite &B01111111
Call Status(callsub) 'Status des Sensors wird erfasst (ob Bereit für neue Befehle oder nicht)
1wverify Idendity(1)
1wwrite &H48
Call Status(callsub)
1wreset
1wverify Idendity(1)
1wwrite &H44
Call Status(callsub)
1wreset
1wverify Idendity(1)
1wwrite &HBE
Scratchpad(1) = 1wread(9)
For S = 1 To 9 'Inhalt des Scratchpad wiedergeben
Print Bin(scratchpad(s))
Next
End
Sub Status:
Sub Status: 'Wenn der Sensor bereit ist sendet er 1er, wenn nich 0er.
Do
V = 1wread() 'Lesen was Sensor gerade ausgibt
If V = &B00000000 Then 'Wenn Sensor nicht bereit ist (0er), If-Then Schleife beenden
End If
Loop Until V = &B11111111 'So lange If-Then Schleife ausführen bis Sensor bereit ist (also 1er sendet)
End Sub
Nun, und an der UART kommt dann folgendes zurück:
00011111 -> LSB der Temperatur (stimmt wenn Sensor im 9 Bit Modus)
00000000 -> MSB der Temperatur (stimmt auch)
00000000 -> Th Register (müsste &B00000000 betragen)
00000000 -> Tl Register (müsste auch &B00000000 betragen)
11111111 -> Config. Register müsste &B01111111 betragen
11111111 -> Reserved, stimmt (laut Datenblatt &HFF)
00000011 -> Reserved, sollte laut Datenblatt &H0C sein, ist aber &H03
00010000 -> Reserved, sollte laut Datenblatt &H10 sein, ist aber &H20
01011111 -> CRC Byte, hab ich nicht überprüft
Hab ich da wieder irgendwo nen gravierenden Denkfehler drinnen, oder stimmt da was nicht?
Wäre nett wenn ihr mir weiterhelfen könntet!
MfG
Basti