Hola amigos del foro
... espero que se encuentren bien y de maravilla. Aqui de nuevo saludando a los amigos y aprobechando para preguntar, si alguno de ustedes ha utilizado este chip thermocouple MCP9600, y pidiendo un consejo para terminar el programa que me facilite la escritura en los registros internos y lectura de los mismos para monitoreo de la temperatura. este tipo de chip soporta 8 tipos de thermopares K,J,T,N,S,E,B Y R... uso lenguaje ccs compiler, y en espera de algunas ideas por que no funciona del todo.. saludos..
#include <18f45k50.h>
#fuses intrc_io,pllen,pll3x,nocpudiv,fcmen,noieso,noput,nobrownout,nolpbor,nowdt
#fuses mclr,stvren,nolvp,noxinst,nodebug
#fuses noprotect,nocpb,nocpd,nowrtc,nowrtb,nowrtd,noebtrb //de proteccion or not
#use delay(clock = 48mhz)
#use i2c(master, scl = pin_b0, sda = pin_b1, slow)
unsigned int8 temperatura;
void read(void);
void main (void)
{
for(;;) {
read();
output_d(temperatura);
delay_ms(100);
}
}
//rutina que lee la temperatura del thermopar
void read(void)
{
unsigned int8 upperbyte,lowerbyte;
i2c_start();
i2c_write(0xc0);
i2c_write(0x00); //escribe th, t^ o tcelsius
i2c_stop();
i2c_start();
i2c_write(0xc1); //comando de lectura el ultimo bit se pone a 1
upperbyte = i2c_read(); //lectura de los 8 bits
i2c_ack(); //esperando el ack
lowerbyte = i2c_read(); //lectura de los 8 bits menos signf
i2c_nack(); //espoerando el nack
i2c_stop();
//conviertiendo la temperatura leida
if((upperbyte & 0x80) == 0x80) { //ta < 0°c
upperbyte = upperbyte & 0x7f; //checando el signno
temperatura = (1024 - ((upperbyte * 16) + lowerbyte / 16));
} else {
temperatura = ((upperbyte * 16 ) + lowerbyte / 16); //temperaura ambiente a °c
}
}