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:
Nun, und an der UART kommt dann folgendes zurück:Code: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
Hab ich da wieder irgendwo nen gravierenden Denkfehler drinnen, oder stimmt da was nicht?Code: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
Wäre nett wenn ihr mir weiterhelfen könntet!
MfG
Basti
Lesezeichen