Go Down

### Topic: DS 18S20+ Temperatur Umrechnungsfaktor? (Read 1 time)previous topic - next topic

#### Mebus

##### Nov 10, 2012, 04:46 pm
Hallo,

ich versuche die Temperatur aus einem DS18S20+ auszulesen, bekomme aber eine etwas zu hohe Temperatur heraus (~26 statt 21 °C):

Code: [Select]
`int temperatur(void) {  byte i;  byte present = 0;  byte data[12];  int Tc_100 = 0;  int HighByte, LowByte, TReading, SignBit;    byte addr[8]={16,98,181,116,2,8,0,84}; // Adresse meines Sensors    if ( OneWire::crc8( addr, 7) != addr[7]) {      //Serial.print("CRC is not valid!\n");      return -2000;  }    if ( addr[0] != 0x10) {      //Serial.print("Device is not a DS18S20 family device.\n");      return -2000;  }  // The DallasTemperature library can do all this work for you!  ds.reset();  ds.select(addr);  ds.write(0x44,1);         // start conversion, with parasite power on at the end    delay(1000);     // maybe 750ms is enough, maybe not  // we might do a ds.depower() here, but the reset will take care of it.    present = ds.reset();  ds.select(addr);      ds.write(0xBE);         // Read Scratchpad    for ( i = 0; i < 9; i++) {           // we need 9 bytes    data[i] = ds.read();   }        // Temeperatur bestimmen  LowByte = data[0];  HighByte = data[1];      TReading = (HighByte << 8) + LowByte;    SignBit = TReading & 0x8000;  // test most sig bit    if (SignBit) // negative  {    TReading = (TReading ^ 0xffff) + 1; // 2's comp  }    Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25    return Tc_100;  }`

Ist der Umrechnungsfaktor möglicherweise falsch?

Danke

Gruß

Mebus

#### maverick1509

#1
##### Nov 10, 2012, 05:00 pm
warum so kompliziert mit umrechnen?
Es gibt doch ganz einfache Befehle:

sensors.requestTemperatures();
Temperatur[0] = sensors.getTempC(Sensor0); Temperatur[1] = sensors.getTempC(Sensor1);
Temperatur[2] = sensors.getTempC(Sensor2); Temperatur[3] = sensors.getTempC(Sensor3);
Temperatur[4] = sensors.getTempC(Sensor4); Temperatur[5] = sensors.getTempC(Sensor5);

und schon hat man 6 Temperaturen eingelesen in °C.
gruß
Bernward

#### uwefed

#2
##### Nov 10, 2012, 05:05 pm

warum so kompliziert mit umrechnen?
Es gibt doch ganz einfache Befehle:

sensors.requestTemperatures();
Temperatur[0] = sensors.getTempC(Sensor0); Temperatur[1] = sensors.getTempC(Sensor1);
Temperatur[2] = sensors.getTempC(Sensor2); Temperatur[3] = sensors.getTempC(Sensor3);
Temperatur[4] = sensors.getTempC(Sensor4); Temperatur[5] = sensors.getTempC(Sensor5);

und schon hat man 6 Temperaturen eingelesen in °C.
gruß
Bernward

Dann müßtest Du noch sagen, welche Bibliothek zu verwenden ist?
Grüße Uwe

#### maverick1509

#3
##### Nov 11, 2012, 12:06 pm
ja stimmt,

#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#### Mebus

#4
##### Nov 12, 2012, 11:02 am
So geht's auch: siehe Anhang.

Go Up