2015-03-10 4 views
-1

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. Я не понимаю, откуда это происходит.

+1

@ NathanHughes действительно ли это имеет значение в этой проблеме? – helpmeout

+0

Посмотрите на таблицу 1 в листке данных, к которому вы привязаны, - температуры имеют разрешение 0,0625 градусов C, например. 07D0h = 125 градусов C. –

+0

И в качестве бонуса, тегирование на соответствующем языке позволяет выделить синтаксис, тем самым делая код более читаемым. –

ответ

1

Необработанные данные о температуре в единицах шестнадцатого градуса, поэтому значение должно быть разделено на 16, чтобы преобразовать его в градусы.