Add negative temp handling; fix multiplier
Negative temperatures (less than 0°C) are returned as a sign-extended two's complement number. Subtract 0x10000 to recover the proper negative value. Also, do not multiply by 625 twice (thanks to @TerryE). Signed-off-by: Nick Andrew <nick@nick-andrew.net>
This commit is contained in:
parent
de692f3540
commit
99f94acacf
|
@ -40,7 +40,13 @@ else
|
||||||
crc = ow.crc8(string.sub(data,1,8))
|
crc = ow.crc8(string.sub(data,1,8))
|
||||||
print("CRC="..crc)
|
print("CRC="..crc)
|
||||||
if (crc == data:byte(9)) then
|
if (crc == data:byte(9)) then
|
||||||
t = (data:byte(1) + data:byte(2) * 256) * 625
|
t = (data:byte(1) + data:byte(2) * 256)
|
||||||
|
|
||||||
|
-- handle negative temperatures
|
||||||
|
if (t > 0x7fff) then
|
||||||
|
t = t - 0x10000
|
||||||
|
end
|
||||||
|
|
||||||
if (addr:byte(1) == 0x28) then
|
if (addr:byte(1) == 0x28) then
|
||||||
t = t * 625 -- DS18B20, 4 fractional bits
|
t = t * 625 -- DS18B20, 4 fractional bits
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue