Autor Tema: Thermocouple MCP9600  (Leído 1061 veces)

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

Desconectado Byakuya

  • PIC10
  • *
  • Mensajes: 38
Thermocouple MCP9600
« en: 18 de Abril de 2016, 16:18:47 »
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..

Código: [Seleccionar]

#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
 }
}


« Última modificación: 27 de Abril de 2016, 18:10:06 por Byakuya »