http://datasheets.maximintegrated.com/en/ds/DS18B20.pdfПочему вы делят необработанные данные на 16?
Прочитать страницу 3, Эксплуатация - Температура измерения. Следующий код работает, чтобы получить temp. Я понимаю, все это, за исключением, почему они делят число на 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, данные о температуре. Это всего лишь двенадцать бит, поэтому приведенный выше код работает и для него (просто измените левый сдвиг на 4 вместо 8), но опять же, для окончательного результата требуется/16. Я не понимаю, откуда это происходит.
@ NathanHughes действительно ли это имеет значение в этой проблеме? – helpmeout
Посмотрите на таблицу 1 в листке данных, к которому вы привязаны, - температуры имеют разрешение 0,0625 градусов C, например. 07D0h = 125 градусов C. –
И в качестве бонуса, тегирование на соответствующем языке позволяет выделить синтаксис, тем самым делая код более читаемым. –