为什么要将原始数据除以 16?
Why do you divide the raw data by 16?
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。我不明白这是从哪里来的。
原始温度数据以十六分之一度为单位,因此该值必须除以 16 才能将其转换为度。
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。我不明白这是从哪里来的。
原始温度数据以十六分之一度为单位,因此该值必须除以 16 才能将其转换为度。