2026-03-20 21:16:58 +08:00
|
|
|
|
#include "../main/SystemInclude.h"
|
|
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
/* File start *****************************************************************/
|
|
|
|
|
|
#if ENABLE_USE_MCP9808
|
|
|
|
|
|
/******************************************************************************/
|
2026-03-20 21:16:58 +08:00
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
void WriteWordRegister(u8 regBuf, u16 regData)
|
|
|
|
|
|
{
|
|
|
|
|
|
SI2C_Start(); // send START command
|
2026-03-20 21:19:53 +08:00
|
|
|
|
SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 <20><>Address Byte<74><65>)
|
|
|
|
|
|
// also, make sure bit 0 is cleared <20><>0<EFBFBD><30>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
SI2C_Write(regBuf); // Write CONFIG Register
|
|
|
|
|
|
SI2C_Write(regData>>8); // Write data
|
|
|
|
|
|
SI2C_Write(regData); // Write data
|
|
|
|
|
|
SI2C_Stop(); // send STOP command
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
u16 ReadWordRegister(u8 regBuf)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeWord tempInt;
|
|
|
|
|
|
|
|
|
|
|
|
SI2C_Start(); // send START command
|
2026-03-20 21:19:53 +08:00
|
|
|
|
SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 <20><>Address Byte<74><65>)
|
|
|
|
|
|
// also, make sure bit 0 is cleared <20><>0<EFBFBD><30>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
SI2C_Write(regBuf); // Write CONFIG Register
|
|
|
|
|
|
|
|
|
|
|
|
SI2C_Start(); // send Repeat START command
|
2026-03-20 21:19:53 +08:00
|
|
|
|
SI2C_Write(MCP_ADR | 0x01); // READ Command
|
|
|
|
|
|
// also, make sure bit 0 is set <20><>1<EFBFBD><31>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
tempInt.Byte[1] = SI2C_Read(); // READ 8 bits
|
|
|
|
|
|
SI2C_Ack();
|
|
|
|
|
|
tempInt.Byte[0] = SI2C_Read(); // READ 8 bits
|
|
|
|
|
|
SI2C_NoAck();
|
|
|
|
|
|
SI2C_Stop(); // send STOP command
|
|
|
|
|
|
|
|
|
|
|
|
return tempInt.Word;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
void WriteByteRegister(u8 regBuf, u8 regData)
|
|
|
|
|
|
{
|
|
|
|
|
|
SI2C_Start(); // send START command
|
2026-03-20 21:19:53 +08:00
|
|
|
|
SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 <20><>Address Byte<74><65>)
|
|
|
|
|
|
// also, make sure bit 0 is cleared <20><>0<EFBFBD><30>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
SI2C_Write(regBuf); // Write CONFIG Register
|
|
|
|
|
|
SI2C_Write(regData); // Write data
|
|
|
|
|
|
SI2C_Stop(); // send STOP command
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
u16 ReadByteRegister(u8 regBuf)
|
|
|
|
|
|
{
|
|
|
|
|
|
u8 temp;
|
2026-03-20 21:19:53 +08:00
|
|
|
|
|
2026-03-20 21:16:58 +08:00
|
|
|
|
SI2C_Start(); // send START command
|
2026-03-20 21:19:53 +08:00
|
|
|
|
SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 <20><>Address Byte<74><65>)
|
|
|
|
|
|
// also, make sure bit 0 is cleared <20><>0<EFBFBD><30>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
SI2C_Write(regBuf); // Write CONFIG Register
|
|
|
|
|
|
|
|
|
|
|
|
SI2C_Start(); // send Repeat START command
|
2026-03-20 21:19:53 +08:00
|
|
|
|
SI2C_Write(MCP_ADR | 0x01); // READ Command
|
|
|
|
|
|
// also, make sure bit 0 is set <20><>1<EFBFBD><31>
|
2026-03-20 21:16:58 +08:00
|
|
|
|
temp = SI2C_Read(); // READ 8 bits
|
|
|
|
|
|
SI2C_NoAck();
|
|
|
|
|
|
SI2C_Stop(); // send STOP command
|
|
|
|
|
|
|
|
|
|
|
|
return temp;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
void TestTemperatureInit(u8 regValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
WriteWordRegister(CONFIG, CONVERSION);
|
|
|
|
|
|
//WriteByteRegister(RREG, RESULT_0_125_BIT);
|
|
|
|
|
|
WriteByteRegister(RREG, regValue);
|
|
|
|
|
|
HWState.EnableTempInit = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
s16 TestTemperature(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
u32 tempLongInt;
|
|
|
|
|
|
s16 tempTA;
|
|
|
|
|
|
|
|
|
|
|
|
tempTA = (u32)ReadWordRegister(TA);
|
|
|
|
|
|
tempTA &= 0x1fff;
|
|
|
|
|
|
tempLongInt = (u32)(tempTA & 0xFFF);
|
|
|
|
|
|
if(tempTA >= 0x1000) tempLongInt = 0xFFF - tempLongInt;
|
|
|
|
|
|
tempLongInt = (tempLongInt * 6400) >> 10; // 0.0625*1024*100 /1024
|
|
|
|
|
|
|
|
|
|
|
|
if(tempTA >= 0x1000){
|
|
|
|
|
|
tempTA *= -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
else tempTA = (u16)tempLongInt; // Temperature*100
|
|
|
|
|
|
if(voltageDetected[TPCB] >= 0x1000) tempTA *= -1;
|
|
|
|
|
|
|
|
|
|
|
|
return tempTA;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
void TemperatureLowPower(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
WriteWordRegister(CONFIG, SHUT_DOWN);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* File end *****************************************************************/
|
|
|
|
|
|
#endif
|
|
|
|
|
|
/****************************************************************************/
|