DS1847和DS1848具有片内直接数字温度传感器。温度存储在地址位置 E2h 和 E3h 中。本应用笔记解释了如何将数字温度数据转换为十进制度摄氏度值。
将温度从十六进制转换为十进制
转换DS1847和DS1848的温度值的过程首先读取以字节E2h(温度的MSB)和E3h(温度的LSB)存储的十六进制值。这两个字节包含最新的温度读数。读取两个字节后,可以将它们转换为二进制。位权重如表1所示。
E2h (温度兆字节) | E3h (温度LSB) | ||||||||||||||
S | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 2-1 | 2-2 | 2-3 | 2-4 | 0 | 0 | 0 |
温度存储在二进制数据的 13 MSB 中。MSB 是符号位,指示 2 的补码二进制数是正数还是负数。如果 MSB 为 0,则该值为正。如果 MSB 为 1,则该值为负数。接下来的 12 位包含温度值,并通过不同的方法转换为正负值的十进制。
正温度转换
以下是如何转换正温度的示例。在此示例中,地址位置 E2h 和 E3h 分别包含 2Ah 和 88h。将这两个字节组合在一起得到 2A88h。接下来,将十六进制数据转换为二进制。2A88h 的二进制等价物是 0010 1010 1000 1000。由于MSB为0,因此温度为正。二进制数据的较低 3 位将被忽略,因此它们被 0 屏蔽。表 2 显示了从十六进制到二进制的转换以及低 3 位的屏蔽。
十六进制数据 | 二进制数据 | 屏蔽的二进制数据 |
2A88小时 | 0010 1010 1000 1000 | 0010 1010 1000 1000 |
由于温度为正,因此不需要2的补体转化。数据可以使用计算器直接转换为十进制数。二进制数 0010 1010 1000 1000 等于十进制值 10888。由于数据包含分数分量,因此必须除以十进制值才能获得真实温度。十进制值必须除以 128(或乘以 2-7) 以计算正确的十进制温度值。将十进制值 10888 除以 128 得到十进制温度值为 85.0625°C。
负温度转换
转换负温度值 (MSB = 1) 有点复杂。例如,地址 E2h 和 E3h 包含数据 F8h 和 08h。第一步是将十六进制值转换为二进制。同样,较低的 3 位将被忽略,因此它们将被 0 屏蔽。表 3 显示了从十六进制到二进制的转换以及 3 个低位的掩码。
十六进制数据 | 二进制数据 | 屏蔽的二进制数据 |
F808h | 1111 1000 0000 1000 | 1111 1000 0000 1000 |
下一步是获取掩码二进制值的 2 补码。这是通过首先反转屏蔽的二进制数,然后向其添加 1 来完成的。反转二进制数 1111 1000 0000 1000 会得到二进制数 0000 0111 1111 0111。将 1 相加得到二进制数 0000 0111 1111 1000。此值等于十进制数 2040。与正温度示例一样,转换后的十进制值除以 128,但也变为负值,因为温度为负,如 MSB 所示。因此,当十进制值 2040 除以 -128 时,结果是十进制温度值为 -15.9375°C。
结论
本应用笔记演示了将地址E2h和E3h中的十六进制数据转换为十进制度温度值的两种方法。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !