Autor Tema: sensor temperatura i2c mcp9801 ayuda  (Leído 2971 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Alumno

  • PIC10
  • *
  • Mensajes: 39
sensor temperatura i2c mcp9801 ayuda
« en: 18 de Noviembre de 2009, 19:21:58 »
Hola a todos, felicito a toda la gente que participa de este foro y en especial a aquellos que parecen siempre estar ahi
bueno mi problema es este: dispongo de un sensor de temperatura I2C MCP9801 de MICROCHIP el cual es muy preciso
segun su hoja de datos puede medir temperaturas desde -55 a 125 pero lo que conseguido hasta ahora es solo leer desde
-55 a 63ºc ya que a partir de ahi el bit 7 ( bit de signo ) se vuelve 1 y entonces tiene que ser considerado una temperatura
negativa y ya no puedo leer mas de 63ºc la resolucion a la que trabaja el sensor es de 12 bits, para mas datos les envio la simulacion esta hecho en proteus 7.5 sp3 y el código esta editado en el entorno del MPLAB 8.4,  compilado con la version 3.34 del C18 y espero que se bajen la hoja de datos del MCP9801 es muy pesado y no lo puedo adjuntar gracias por la ayuda ue me pudiesen brindar.

Desconectado Alumno

  • PIC10
  • *
  • Mensajes: 39
Re: sensor temperatura i2c mcp9801 ayuda
« Respuesta #1 en: 27 de Noviembre de 2009, 02:21:20 »
Por favor podrian ayudarme aun no logro entender como leer temperaturas superiores a los 63 y lo necesito para la siguiente semana

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: sensor temperatura i2c mcp9801 ayuda
« Respuesta #2 en: 27 de Noviembre de 2009, 13:28:27 »
Hola, está muy interesante el funcionamiento de este sensor.

http://ww1.microchip.com/downloads/en/DeviceDoc/21909b.pdf

En la datasheet menciona que la salida la da en complemento a 2 y pone una ecuación para obtener la temperatura ambiente TA a partir de esta palabra (ver página 10 ecuación 4-2).

Veo también en la misma página tabla 4-1 que cuando el bit 15 es 1 hay que negar bit a bit la solución y sumar 1 (nota 3), pero eso no lo encuentro en tu código

Código: [Seleccionar]
if( leonidas.bits.bit15 )
               {
                   leonidas.pelaez = ~leonidas.pelaez; //aquí está bien la inversión pero después hay que sumar 1
                   signo_temp = negativo;
               }

Yo modificaría el código, salvo que tú opines lo contrario, de la siguiente manera:

Código: [Seleccionar]
unsigned int temp = 0; //me parece que un int de c18 mide 16bits
float temp_f;

EESequentialRead( MCP9801_CTRL, DIR_TEMP, Buffer_I2C, BYTE_READ ); // Lectura de temperatura

temp = (Buffer_I2C[0] << 8) | Buffer_I2C[1];

if( (temp & 0x8000) == 0x8000) //si el bit 15 está levantado
   temp = ~temp + 1;

temp_f = (float) temp * 0.0625; //esto es 2^-4

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: sensor temperatura i2c mcp9801 ayuda
« Respuesta #3 en: 27 de Noviembre de 2009, 13:31:36 »
Ah y olvidé el signo...

Código: [Seleccionar]
unsigned int temp = 0; //me parece que un int de c18 mide 16bits
float temp_f;

EESequentialRead( MCP9801_CTRL, DIR_TEMP, Buffer_I2C, BYTE_READ ); // Lectura de temperatura

temp = (Buffer_I2C[0] << 8) | Buffer_I2C[1];

if( (temp & 0x8000) == 0x8000) //si el bit 15 está levantado
{
   temp = ~temp + 1;
   temp_f = (float) temp * (-0.0625); //esto es 2^-4
}
else
   temp_f = (float) temp * 0.0625; //esto es 2^-4