Sure Gordon...it is possible to make a lib to handle both DS1820 and DS18B20!
The only difference (as @tickTock correctly sad) is the resolution:
- DS1820 has fixed 9bit resolution (0,5°C per bit);
- DS18B20 has a register (Byte 4 of the scratchpad) that permits to choose the resolution( 9, 10, 11, or 12 bits, corresponding to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively);
What i've done in the previous post, was to raise the fixed 9 bit resolution by using some additional register value in the scratchpad.
In a nutshell for:
- DS1820 9bit resolution : temp = (byte_0 + (byte_1<<8)) * 0,5;
- DS1820 higher resolution: temp = ( (byte_1<<8) + byte_0 - 1)/2-0,25+(byte_7-byte_6)/byte_6;
- DS18B20 : temp = (byte_0 + (byte_1<<8)) * RES (where RES=0.5, 0.25, 0.125 or 0.0625 depending from the resolution set)
Note: is it possible that formulas above doesn't work for temp below zero....in that case you have to play with bits (2 complements...and so on)
...finally reading the LSB of 64bit ROM you can understand if you are using either the DS1820 sensor (0x10) or DS18B20 (0x28) one.