#include "TMP75.h"
#if 1
/*UINT8 SearchDev(UINT8 add)
{
UINT8 ret;
I2C_Start();
ret=I2C_SendByte(add|I2C_READ);
I2C_Stop();
Delay_ms(10);
return ret;
}
UINT8 SearchTMP75(void)
{
UINT8 dev=0;
if(SearchDev(DEV1ADD)==0)
dev|=0x01;
if(SearchDev(DEV2ADD)==0)
dev|=0x02;
if(SearchDev(DEV3ADD)==0)
dev|=0x04;
if(SearchDev(DEV4ADD)==0)
dev|=0x08;
return dev;
}*/
/***************************************************
温度值格式转换,考虑两位小数点
****************************************************/
INT8 TemConversion(UINT16 indata,INT16* outdata)
{
if((indata>0x7FF)&&(indata<0xC90))//不在温度范围
{
return 1;
}
if(indata<=0x7FF)
{
if(indata<0x190)
{
*outdata=(25000/0x190)*indata;
*outdata=*outdata/10;
}
else if(indata<0x320)
{
*outdata=(25000/(0x320-0x190))*(indata-0x190);
*outdata=*outdata/10+25*100;
}
else if(indata<0x4B0)
{
*outdata=(25000/(0x4B0-0x320))*(indata-0x320);
*outdata=*outdata/10+50*100;
}
else if(indata<0x500)
{
*outdata=(5000/(0x500-0x4B0))*(indata-0x4B0);
*outdata=*outdata/10+75*100;
}
else if(indata<0x640)
{
*outdata=(20000/(0x640-0x500))*(indata-0x500);
*outdata=*outdata/10+80*100;
}
else
{
*outdata=(28000/(0x7FF-0x640))*(indata-0x640);
*outdata=*outdata/10+100*100;
}
}
else
{
if(indata>0xE70)
{
*outdata=(25000/(0xFFF-0xE70))*(indata-0xE70);
*outdata=*outdata/10;
}
else
{
*outdata=(30000/(0xE70-0xC90))*(indata-0xC90);
*outdata=*outdata/10+25*100;
}
*outdata|=0x8000;
}
return 0;
}
INT8 TMP75_ReadTenperature(UINT8 add,INT16* temdata)
{
INT8 ret;
UINT8 rdata;
UINT16 readdata=0;
I2C_Start();
ret=I2C_SendByte(add|I2C_WRITE);
if(ret!=0)
{
I2C_Stop();
return 1;
}
ret=I2C_SendByte(TEMREGISTER);
if(ret!=0)
{
I2C_Stop();
return 2;
}
Delay_ms(30);
I2C_Start();
ret=I2C_SendByte(add|I2C_READ);
if(ret!=0)
{
I2C_Stop();
return 3;
}
rdata=I2C_RcvByte();
I2C_SendACk();
readdata=I2C_RcvByte();
I2C_SendACk();
I2C_Stop();
readdata=readdata>>4;
readdata|=rdata*0x10;
ret=TemConversion(readdata,temdata);
if(ret!=0)
{
return 4;
}
return 0;
}
#endif