TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: halowin en 19 de Agosto de 2012, 18:42:10
-
Hola amigos.
Me estoy vovlviendo loco con este dispositivo.
Estoy leyendo el datasheet y creo que en la codificacion que hace del numero -55 en la tabla de ejemplos está mal porque parace que ha hecho el complemento a 2, pero en los de -10 y -25 solo hace el complemento a 1.
Y para remate lo que no comprendo NADA es la codificación de la parte decimal cuando el numero es negativo.
Si alguien me lo aclara podré seguir.
Aclaro que el "DS18B20" es un sensor de temperatura que usa el protocolo One-Wire.
Gracias.
-
No entiendo a que te refieres, a donde pone Table 1. Temperature/Data Relationship??
Si te refieres a esta si esta bien, cada valor equivale a 0.0625º, para el valor negativo usando un int por ejemplo -55 seria: 0.0625/55=880; 0-880=-880 en signed o bien 0xFC90 en hexadecimal.
-
No entiendo a que te refieres, a donde pone Table 1. Temperature/Data Relationship??
Si te refieres a esta si esta bien, cada valor equivale a 0.0625º, para el valor negativo usando un int por ejemplo -55 seria: 0.0625/55=880; 0-880=-880 en signed o bien 0xFC90 en hexadecimal.
Hola Merlin.
Si, me refiero a esa tabla.
Pero ahora me lo has puesto peor todavia. Esa division de 0.0625/55=880 ¿de donde sale ese 880???????
-
No entiendo a que te refieres, a donde pone Table 1. Temperature/Data Relationship??
Si te refieres a esta si esta bien, cada valor equivale a 0.0625º, para el valor negativo usando un int por ejemplo -55 seria: 0.0625/55=880; 0-880=-880 en signed o bien 0xFC90 en hexadecimal.
Hola Merlin.
Si, me refiero a esa tabla.
Pero ahora me lo has puesto peor todavia. Esa division de 0.0625/55=880 ¿de donde sale ese 880???????
La puse al reves: 55/0.0625=880
-
No entiendo a que te refieres, a donde pone Table 1. Temperature/Data Relationship??
Si te refieres a esta si esta bien, cada valor equivale a 0.0625º, para el valor negativo usando un int por ejemplo -55 seria: 0.0625/55=880; 0-880=-880 en signed o bien 0xFC90 en hexadecimal.
Hola Merlin.
Si, me refiero a esa tabla.
Pero ahora me lo has puesto peor todavia. Esa division de 0.0625/55=880 ¿de donde sale ese 880???????
La puse al reves: 55/0.0625=880
Pues o soy muy burro, o aqui hay algo mal.
Segun esa operacion si hago lo mismo para el -25 a mi me da FE70h y en la tabla le da FE6Fh
Para -10 a mi me da FF60h y en la tabla le da FF5Eh
-
Yaaaaaa lo entendí.... pufffff!!!!!
Es que hay que hacer la cuenta con los decimales incluidos, yo estaba haciendo la cuenta solo para la parte entera del valor, es decir, para -10 o para -25.
Por tanto para numeros positivos, se multiplica el código devuelto por 0.0625 y ya tenemos la temperatura y para numeros negativos (los que empiezen por "F" una formula valida seria:
10000h - (numero_devuelto) x 0.0625
esto no dará el valor absoluto pero como empezaba por "F" con plantarle un "-" delante obtenemos la temperatura correcta.
Gracias Merlin
-
es mas simple usar un signed int (no se con que compilador trabajas, pero variable de 16bits), el mismo compilador distinge el signo sin necesidad de hacer cuenta alguna.