Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Station, OSOPT V3.1
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)