From: Chris B. <ch...@ba...> - 2004-12-09 13:07:58
|
I don't have a DS2438 but the following works for all of the examples on page 4 of the specification document (http://pdfserv.maxim-ic.com/en/ds/DS2438.pdf) $temp = ($data[4] * 256 + $data[3])/256; $temp -= 256 if ($data[4] > 128); $temp = sprintf ("%3.2f",$temp); return $temp; From what I can tell the code isn't taking into account the two-complement encoding system. ----- Original Message ----- From: "Jason I. Comander" <jcomand@MIT.EDU> To: <mis...@li...> Sent: Tuesday, December 07, 2004 2:23 PM Subject: [misterhouse-users] DS2438 sensor Get_Temp_2438 fails when Temp < 0 > > Now that the temperature in Boston has dropped down below zero C > for the first time since I installed my DS2438-based temperature/humidity > sensor from AAG Electronica, I see that temperatures just below 0 C get > mangled. Anyone seen/fixed this? At the end of a logn day, I don't have > the brain power left right now to fix it! Anyone see any obvious errors > in Get_Temp_2438{} in devices.pm. A true temperature somewhere around 0 > degrees C is reported as -254.84. > > Thanks! > Jason > > # Byte 3&4 - Voltage > sub Get_Temp_2438{ > ... > my @data = unpack("C*",$result); > ... > my $sign = $data[4] > 128 ? -1 : 1; > my $temp = sprintf ("%3.2f",((($data[4] * 256) + $data[3]) * $sign * > 0.03125 / 8)); > #$temp = sprintf ("%3.2f",$temp); > return $temp; > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from real users. > Discover which products truly live up to the hype. Start reading now. > http://productguide.itmanagersjournal.com/ > ________________________________________________________ > To unsubscribe from this list, go to: > http://sourceforge.net/mail/?group_id=1365 > > |