From: Thorsten W. <tho...@we...> - 2008-01-08 08:39:50
|
I tried to translate the C code to Perl... This is my result, it is not tested yet... I have copy and pasted the original DS18B20 code and changed the bytepositions in the array @data and i changed the devider from 16 to 256. maybe this will work, i try it next weekend... my @data = unpack("C*",$result); my $sign = $data[4] > 128 ? 0 : 1; if ($sign) #Positive Number { $temp = ($data[4]* 256 + $data[3]) / 256; } else #2's Compliment { $temp = ($data[4]* 256 + $data[3]); $temp = (~$temp +1); $temp = ($temp & 0x7FF); $temp = ($temp /256 * -1); } $temp = sprintf ("%3.2f",$temp); return $temp; -- View this message in context: http://www.nabble.com/DS2438-get_temp-fails-if-Temperature-is-below-0%C2%B0C-tp14452485p14684985.html Sent from the Misterhouse - User mailing list archive at Nabble.com. |