Re: 18B20 misst falsch? Kategorie: I²C-Bus (von BerndK - 10.10.2010 17:06) | ||
Als Antwort auf 18B20 misst falsch? von ChristianS - 10.10.2010 14:45 | ||
| ||
Hallo Christian, mit und gegen die Temperatursensoren habe ich auch schon heftig gekämpft. Bei Recherchen habe ich verschiedene Codeschnipsel gefunden. Bei mir läuft seit einem Jahr in einer Heizungssteuerung (also eine "kritische Anwendung") die Auswertung der 18B20 mit folgendem Code: x=(ds2482.readByte(0) or ds2482.readByte(0) shl 8)*5/8; if x and 0xF000 temp[busNummer]= (x) or 0xf000; else temp[busNummer]= (x) ; Das ersetzt die Zeile "x=..." und das "return x*5;" Ein Möglichkeit, die Dallas-Sensoren auch ohne die CC2 auszulesen besteht unter Linux mit digitemp. Damit kann man mit zwei nebeneinanderliegenden Sensoren recht schnell feststellen, ob der CC2-Code taugt. RS232-1Ŵire-Adapter kursieren im Internet etliche. Der Quellcode von Digitemp ist auÃ?erdem sehr informativ für die Behandlung der 1-Wire-Sensoren. Hoffentlich konnte ich ein Stück weiterhelfen. Viele GrüÃ?e Bernd > Hallo, > ich habe folgende Routine um die Temperatur von einem 18B20 auszulesen. Ich muss > feststellen, dass ich andere Temperaturwerte kriege, als von einer DS1631, die ich an der > selben Stelle als Referenz angebracht habe. Ich habe bei dem 18B20 fast 2 Grad weniger als beim > DS1631. Ein externes MeÃ?gerät bestätigt, das der DS1631 richtig misst. Was ist an der > Ansteuerung des 18B20 falsch? > > > {long temp; > int x; > ds2482.matchROM(5,ROM); > ds2482.writeByte(ds2482addr,convertTEMP); > > sleep 750; > > ds2482.matchROM(5,ROM); > ds2482.writeByte(ds2482addr,readSCRATCHPAD); > x=ds2482.readByte(ds2482addr) or ds2482.readByte(ds2482addr) shl 8; > return x*5; > > > Die Routine wird 1 x pro Minute aufgerufen und im Programm über hwcom mit zwei > Nachkomastellen ausgegeben. > > > > DS1820_1=getTemp(5,DSAddress); > ..... > sendTemp2Com(DS1820_1); > ..... > > function sendTemp2Com(int temp) > /******************************************************************************/ > /* Routine zum Ausgeben der Temperatur über HWCOM */ > /* x:= Temperatur */ > /******************************************************************************/ > { > if temp < 0 > hwcom.print("-"); > else if temp < 1000 // wenn Wert positiv war => eine Null voranstellen? Bereich 0-999 > hwcom.print("0"); > temp = math.abs(temp); // Betrag bilden (Wert ist ab jetzt immer positiv) > hwcom.num(temp / 100); // Vorkommawert > hwcom.print(","); > temp = temp % 100; > if temp < 10 // eine Null voranstellen? > hwcom.print("0"); > hwcom.num(temp); // Nachkommawert > hwcom.print("°C"); > hwcom.ret(); > wait hwcom.ready(); > } //Ende function Temp_Ausgabe > /******************************************************************************/ > > > P.S.: ich habe den 18B20 in einen Schrumpfschlauch eingeschweiÃ?t, da sich der Sensor > im AuÃ?enbereich befindet. Die DS1631 ist nicht eingeschweiÃ?t.Das müsste eigentlich > bedeuten, dass der Sensor träger reagiert als der DS1631. Das sollte aber doch keine 2 > Grad auf Dauer ausmachen, oder? > > ChristianS. | ||
Antwort schreiben Antworten: Re: 18B20 misst falsch? (von ChristianS - 10.10.2010 20:15) Re: 18B20 misst falsch? (von BerndK - 10.10.2010 23:01) Re: 18B20 misst falsch? (von ChristianS - 11.10.2010 9:14) Re: 18B20 misst falsch? (von BerndK - 11.10.2010 21:52) Re: 18B20 misst falsch? (von ChristianS - 12.10.2010 22:01) |