DS18B20

Hi,

I have what I think is a DS18B20 wired up sensor. It has 3 wires - Reg, Green & Yellow. Im using one of the sample sketches for this but cannot get a reading from it. I assume Yellow is Data, Green is GND and Red is +5V.
Im using the sketch below but it just keeps saying no more addresses, which I'm guessing means it cant find the sensor?
Any body able to help? I have Red going to +5V, Green at GND at Yellow on Digital Input 10

#include <OneWire.h>
OneWire ds(10); // on pin 10

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*, 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(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*

  • Serial.print(" Data = ");*

  • Serial.print(present,HEX);*

  • Serial.print(" ");*

  • for ( i = 0; i < 9; i++) { // we need 9 bytes*
    _ data = ds.read();_
    _ Serial.print(data*, HEX);
    Serial.print(" ");
    }
    Serial.print(" CRC=");
    Serial.print(OneWire::crc8(data, 8), HEX);
    Serial.println();
    // convert the data to actual temperature*
    * unsigned int 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);
    if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms*
    * else if (cfg == 0x20) raw = raw << 2; // 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.print(" Temperature = ");
    Serial.print(celsius);
    Serial.print(" Celsius, ");
    Serial.print(fahrenheit);
    Serial.println(" Fahrenheit");
    }*_

What is the value of the pull-up resistor?

Please remember to use code tags when posting code

I dont have a pull up resistor! Just stuck in a 10k and will try again

Success!!! Thanks for your help!

One wire relies on the pull up resistor! 10k is reasonable for short cable runs, 4k7 is wise for longer runs.