/*
\file TMP175.h
\version: 1.0
\brief Este fichero contiene funciones para control de TMP175/75
\web www.micros-designs.com.ar
\date 02/02/11
*- Version Log --------------------------------------------------------------*
* Fecha Autor Comentarios *
*----------------------------------------------------------------------------*
* 02/02/11 Suky Original *
*----------------------------------------------------------------------------*/
///////////////////////////////////////////////////////////////////////////
//// ////
//// ////
//// (C) Copyright 2011 www.micros-designs.com.ar ////
//// Este código puede ser usado, modificado y distribuido libremente ////
//// sin eliminar esta cabecera y sin garantía de ningún tipo. ////
//// ////
//// ////
///////////////////////////////////////////////////////////////////////////
#define SHUTDOWN_MODE_OFF 0x00
#define SHUTDOWN_MODE_ON 0x01
#define COMPARATOR_MODE 0x00
#define INTERRUPT_MODE 0x02
#define POLARITY_0 0x00
#define POLARITY_1 0x04
#define FAULT_QUEUE_1 0x00
#define FAULT_QUEUE_2 0x08
#define FAULT_QUEUE_4 0x10
#define FAULT_QUEUE_6 0x18
#define RESOLUTION_9 0x00
#define RESOLUTION_10 0x20
#define RESOLUTION_11 0x40
#define RESOLUTION_12 0x60
#define ONE_SHOT 0x80
char _Address;
float Factor;
long Mascara;
char Rotar;
void vSetConfigurationTMP175(char Config,char Address){
_Address=Address<<1;
switch(Config&0x60){
case 0x00:
Factor=0.5;
Mascara=0x00FF;
Rotar=3;
break;
case 0x20:
Factor=0.25;
Mascara=0x01FF;
Rotar=2;
break;
case 0x40:
Factor=0.125;
Mascara=0x03FF;
Rotar=1;
break;
case 0x60:
Factor=0.0625;
Mascara=0x07FF;
Rotar=0;
break;
}
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x01);
i2c_write(Config);
i2c_stop();
}
void vSetTemperatureLowTMP175(float Value){
long Temp;
if(Value>=0.0){
Temp=Value/0.0625;
}else{
Temp=(Value+128.0)/0.0625;
Temp!=0x0800;
}
Temp<<=4;
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x02);
i2c_write(*((char *)&Temp+1));
i2c_write(*((char *)&Temp));
i2c_stop();
}
float fReadTemperatureLowTMP175(void){
long Temp;
float Cal;
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x02);
i2c_start();
i2c_write(_Address | 0x01);
*((char *)&Temp+1)=i2c_read();
*((char *)&Temp)=i2c_read(0);
i2c_stop();
Temp>>=4;
Cal=Temp*0.0625;
if((0x0800&Temp)!=0x0000){
Cal-=128.0;
}
return(Cal);
}
void vSetTemperatureHighTMP175(float Value){
long Temp;
if(Value>=0.0){
Temp=Value/0.0625;
}else{
Temp=(Value+128.0)/0.0625;
Temp!=0x0800;
}
Temp<<=4;
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x03);
i2c_write(*((char *)&Temp+1));
i2c_write(*((char *)&Temp));
i2c_stop();
}
float fReadTemperatureHighTMP175(void){
long Temp;
float Cal;
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x03);
i2c_start();
i2c_write(_Address | 0x01);
*((char *)&Temp+1)=i2c_read();
*((char *)&Temp)=i2c_read(0);
i2c_stop();
Temp>>=4;
Cal=Temp*0.0625;
if((0x0800&Temp)!=0x0000){
Cal-=128.0;
}
return(Cal);
}
float fReadTemperatureTMP175(void){
long Temp;
float Cal;
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x00);
i2c_start();
i2c_write(_Address | 0x01);
*((char *)&Temp+1)=i2c_read();
*((char *)&Temp)=i2c_read(0);
i2c_stop();
Temp>>=(Rotar+4);
Cal=((float)Factor*(Temp&Mascara));
if(((~Mascara)&Temp)!=0x0000){
Cal-=128.0;
}
return(Cal);
}
// Only SHUTDOWN MODE
void vStartSingleConversionTMP175(void){
char Temp;
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x01);
i2c_start();
i2c_write(_Address | 0x01);
Temp=i2c_read(0);
i2c_stop();
i2c_start();
i2c_write(_Address&0xFE);
i2c_write(0x01);
i2c_write(Temp|0x80);
i2c_stop();
}