【问题标题】:Why do you divide the raw data by 16?为什么将原始数据除以 16?
【发布时间】:2015-05-12 00:07:18
【问题描述】:

http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

阅读第 3 页,操作 - 测量温度。以下代码用于获取温度。除了为什么他们将数字除以 16 之外,我完全理解。

local raw = (data[1] << 8) | data[0];
    local SignBit = raw & 0x8000;  // test most significant bit
    if (SignBit) {raw = (raw ^ 0xffff) + 1;} // negative, 2's compliment

    local celsius = raw / 16.0;
    if (SignBit) {celsius *= -1;}

我还有另一种情况http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Pressure/MPL3115A2.pdf 第 23 页,第 7.1.3 节,温度数据。它只有 12 位,所以上面的代码也适用于它(只需将左移更改为 4 而不是 8),但同样,最终结果需要 /16。我不明白这是从哪里来的。

【问题讨论】:

  • @NathanHughes 在这个问题中真的很重要吗?
  • 查看您链接到的数据表中的表 1 - 温度的分辨率为 0.0625 摄氏度,例如07D0h = 125 摄氏度。
  • 另外,使用相关语言进行标记可以突出显示语法,从而使代码更具可读性。
  • 我给你们加了。
  • @Nakilon 我希望我知道。

标签: math hex imp squirrel


【解决方案1】:

原始温度数据以度的十六分之一为单位,因此该值必须除以 16 才能将其转换为度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2017-09-10
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    相关资源
    最近更新 更多