I have three DS18B20's (or I believe at least two of them are DS18B20's). I am currently reading them through an embedded Linux board (Raspberry Pi in this case).
I have two of the sensors in a breadboard, they give seemingly accurate temperatures. The third one is one of those DS18B20's enclosed in a "waterproof" cable from Ebay like this:
When I read the sensors I get the following readings:
pi@raspberrypi:~ $ cat /sys/bus/w1/devices/28-*/w1_slave 45 01 4b 46 7f ff 0b 10 84 : crc=84 YES 45 01 4b 46 7f ff 0b 10 84 t=20312 57 01 4b 46 7f ff 09 10 c7 : crc=c7 YES 57 01 4b 46 7f ff 09 10 c7 t=21437 60 01 80 80 1f ff 80 80 2e : crc=2e YES 60 01 80 80 1f ff 80 80 2e t=22000
So what this command does is simply get all the sensors and read from them. Pretty simple. Divide
t=20312 by 1000 and you get 20.312°C
But the odd thing is that the third sensor will only ever give temperature measurements that are to within 0.5 degrees, whereas the other two are capable of measuring down to what seems to be 0.1 degrees. At first I thought that the third one was broken, but when I checked the datasheet it clearly specifies that the part is accurate to ~0.5 degrees.
I have made a table of the values I'm getting:
Breadboard Sensor #1 | Breadboard Sensor #2 | Cable Sensor 21.937 21.562 22.00 21.812 21.562 22.00 20.468 20.478 22.50 19.584 20.201 27.00 19.625 19.687 28.00
So now I'm totally confused. Are the breadboard sensors broken, or is the cable? If they are all working, they why is that two of them seem to have a higher resolution?
Edit: I've been searching around more and it seems that there a few people who have encountered this, and other people have suggested that they might be fake chips!
Update: The device driver for the sensors (https://www.kernel.org/doc/Documentation/w1/slaves/w1_therm):
The driver also doesn't support reduced precision (which would also reduce the conversion time).