The famous 85°C

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

The famous 85°C

Guy COLIN

Hello,

regarding this 85°C error: it looks like it's not only the power-up state:
we get this value everytime we dont wait enought time after requesting a
temperature convertion and reading the scratchpad.
I did a small program on an arduino connected on a DS18B20, this programm
start with a 600ms delay decrease it 1 by 1 down to 580 then set it back to
600.
We can see the output here: when we reach 590ms the reading is 85 and will
remain at 85 until we set it back to 600.



  Temperature = 21.31 Celsius, Time to convert =600
  Temperature = 21.37 Celsius, Time to convert =599
  Temperature = 21.37 Celsius, Time to convert =598
  Temperature = 21.37 Celsius, Time to convert =597
  Temperature = 21.37 Celsius, Time to convert =596
  Temperature = 21.37 Celsius, Time to convert =595
  Temperature = 21.37 Celsius, Time to convert =594
  Temperature = 21.37 Celsius, Time to convert =593
  Temperature = 21.37 Celsius, Time to convert =592
  Temperature = 21.37 Celsius, Time to convert =591
  Temperature = 85.00 Celsius, Time to convert =590
  Temperature = 85.00 Celsius, Time to convert =589
  Temperature = 85.00 Celsius, Time to convert =588
  Temperature = 85.00 Celsius, Time to convert =587
  Temperature = 85.00 Celsius, Time to convert =586
  Temperature = 85.00 Celsius, Time to convert =585
  Temperature = 85.00 Celsius, Time to convert =584
  Temperature = 85.00 Celsius, Time to convert =583
  Temperature = 85.00 Celsius, Time to convert =582
  Temperature = 85.00 Celsius, Time to convert =581
  Temperature = 21.44 Celsius, Time to convert =600
  Temperature = 21.44 Celsius, Time to convert =599
  Temperature = 21.44 Celsius, Time to convert =598
  Temperature = 21.44 Celsius, Time to convert =597

Here is the code

#include <OneWire.h>

int TimeToConvert = 600;

// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library

OneWire  ds(11);  // on pin 10 (a 4.7K resistor is necessary)

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
 
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
 
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at
the end
 
  delay(TimeToConvert);     // 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

  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.println("");
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  // Serial.print(fahrenheit);
  // Serial.println(" Fahrenheit");
  Serial.print("Time to convert =");
  Serial.println(TimeToConvert);
  TimeToConvert = TimeToConvert-1;
  if ( TimeToConvert == 580){
    TimeToConvert = 600;
  }
}



Best regards
--
Guy
------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Owfs-developers mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/owfs-developers
Reply | Threaded
Open this post in threaded view
|

Re: The famous 85°C

Jan Kandziora
Am 03.07.2016 um 17:14 schrieb Guy COLIN:
>
> OneWire  ds(11);  // on pin 10 (a 4.7K resistor is necessary)
>
A 1,5k resistor to 5V! Or 1k to 3V.


>   ds.write(0x44, 1);        // start conversion, with parasite power on at
> the end
>
Please retry with a statically powered chip.

When you use parasite power and read the out the chip prematurely it
means the chip is *unpowered* right at the moment when you want to read
out the chip. Because it still wants to draw 1mA but you don't supply
this needed current to it. The initial bus reset of a readout command is
enough to de-power a DS18B20 which is in conversion mode.

Kind regards

        Jan



------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Owfs-developers mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/owfs-developers
Reply | Threaded
Open this post in threaded view
|

Re: The famous 85°C

Ekki_b
In reply to this post by Guy COLIN
2016-07-03 17:14 GMT+02:00 Guy COLIN <[hidden email]>:
> DS18B20

Agree to Jans comment.

Have a look at the 18B20 spec ! 85 Degree is a 18B20 code to tell
something went wrong.

OWFS is completely right to send the code out.

Very poor design of 18B20. If there is a design to tell there was an
error, they should have use something else,
+ 155 degrees
- 300 degrees

or else. Maybe simply be quiet.

To use a temperature, which could also be measured is not the best idea.

Typically temperatures don't change higher than 5 degrees between two readings.

We filter :

if Temp = 85 and last reading more then 5 degrees away : ignore the value.

Of course, you could also fix your supply issue, ;-) .

Regards
Ekkehard

------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Owfs-developers mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/owfs-developers
Reply | Threaded
Open this post in threaded view
|

Re: The famous 85°C

Guy COLIN
Hello,

both of you are right.
I feel stupid for having posted this, because I have now read the DS18B20
datasheet and understood that I knew almost nothing. I didn't know that there
is 2 pullup modes, one weak and one strong. And that we have to activate the
strong pullup 10micro-seconds after issuing a convert command in parasite mode.
My Arduino isn't doing that. My DS2482-800 does.
I was comparing apples and raspberries ;-)
Anyway we learn every day. Thanks for that!
--
Guy


------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Owfs-developers mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/owfs-developers