DS18B20 interpretación de la temperatura

1

Tengo un problema al interpretar la lectura de temperatura de un chip DS18B20. Hay una cierta situación que no puedo resolver. Esta es la tabla temporal de ejemplo para el chip de la hoja de datos:

un ejemplo para leer -0.5 * C se muestra como FFF8. Cortando los 4 LSBits obtenemos 0x0FFF. En una estructura de datos firmados que es igual a -1, no a 0. ¿Cómo puedo resolver la diferencia entre 2 lecturas: -0.5 * C y -1.5 * C? Si 0xFFF8 = -0.5, ¿cuál es la forma de -1.5?

La tabla muestra un ejemplo para -10.125 * C. Cortar los 4 LSBits da 0x0FF5, que en realidad es -10, entonces no hay razón para pensar que hay algún tipo de cambio para leer valores negativos ...

    
pregunta Bremen

1 respuesta

2

No cambias, divides.

El valor es un entero con signo de 16 bits simple que es 16 veces mayor que la temperatura. Simplemente asigne el valor a un entero de 16 bits, luego divídalo por 16.0 como un número de punto flotante:

int16_t min5s = 0xFF5E;
double d = (double)min5s / 16.0;
printf("%g\n", d);

>>> -10.125
    
respondido por el Majenko

Lea otras preguntas en las etiquetas