2012-08-28 34 views
0

我没有时间尝试将下表转换为c#中的某些值。温度转换 - 2的补码 - 13位

我有一个2字节数组如

byte[] data = new byte[2]; 

data [ 0 ] = 0x00; 
data [ 1 ] = 0xc9; 

是否anyhone得下列图表转换为C#方法的方法?

格式为DS2438智能电池监控器IC - http://datasheets.maxim-ic.com/en/ds/DS2438.pdf

注:底部3位始终为0,因此不应该是下式的部分和排除。

该值乘以0.03125以产生最终温度。

因此,在点的情况下是0xc900这等于-1760或-1760 * 0.03125 = -55℃

enter image description here

任何帮助理解。

回答

4

看起来这只是(float)(sbyte)data[1] + (float)data[0]/256

它不是问题它是13位而不是16位;因为达拉斯进行了位移,使得它有一个不错的8.8定点表示。如果你的传感器具有更多的分辨率,那么将使用这些低位,但数学仍然是完全相同的。

+0

Nope - 这是不正确的,你的结果会产生0.78515625 \t的温度,但它应该是-1760,然后再乘以0.03125 – Chris

+0

两次错误;这会产生-55.0的结果,正确的答案是-55.0。我认为你的错误顺序是你的字节数。 – hobbs

+0

尝试用其他方式编制索引,哪一个字节是MSB数据[0]或数据[1] –