Go Down

### Topic: DS 18S20+ Temperatur Umrechnungsfaktor? (Read 906 times)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

Please enter a valid email to subscribe

### Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy