您好,
我正在尝试了解如何使用此芯片读取温度。 我似乎正确地实施了I2C驱动程序,因为我能够测量X和Y,并且能够实现触摸屏功能。 但我无法获得正确的温度读数。 对我做错了什么有什么建议? 我正在使用TM4C1294NCPDTI
void InitializeTouch(void)
{
//PENIRQ针脚
SysCtlPeripheralEnable(sysctl_Periph_gpicoc);
While (!SysPeripheralReady(sysctl_Periph_gpIOC))
{
}//end while (!SysCtlPeripheralReady(sysctl_Periph_gpIOC))
GPIOPinTypeGPIOInput (GPIO _PORTC_BASE,GPIO PIN_4);
GPIOIntTypeSet (GPIO _PORTC_BASE,GPIO PIN_4,GPIO下降边缘);
// GPIOPadConfigSet (GPIO_PORTC_BASE,GPIO PIN_4,GPIO强度2mA,GPIO PIN_TYPE_STD_WPU);
GPIOIntRegister (GPIO _PORTC_BASE,PortCIntHandler);
GPIOIntEnable (GPIO _PORTC_BASE,GPIO PIN_4);
//触摸I2C引脚
SysCtlPeripheralEnable(sysctl_Periph_I2C6);
while (!SysPeripheralReady(sysctl_Periph_I2C6))
{
}//end while (!SysCtlPeripheralReady(sysctl_Periph_I2C6))
SysCtlPeripheralEnable(sysctl_Periph_GPIOA);
While (!SysPeripheralReady(sysctl_Periph_GPIOA))
{
}//结束时间(!SysCtlPeripheralReady(sysctl_Periph_GPIOA))
GPIOPinConfigure(GPIO_PA6_I2C6SCL);
GPIOPinConfigure(GPIO_PA7_I2C6SDA);
GPIOPinTypeI2CSCL (GPIO_Porta_base,GPIO_PIN_6);
GPIOPinTypeI2C (GPIO_Porta_base,GPIO PIN_7);
//I2C1
I2CMasterInitExpClk (I2C6_base,FOSC_Hz,FALSE);
//芯片初始化
WriteTouchByte (0x90,0x02);
PollTimer0Delay(201000);
ReadTouchByte (0x90);
}//结束void InitializeTouch(void)
/*************************************** /
void WriteTouchByte (uint8_t i2cAdd, uint8_t命令字节)
{
i2cAdd = i2cAdd >> 1;
I2CMasterSlaveAddrSet (I2C6_BASE,i2cAdd,FALSE);
I2CMasterDataPut(I2C6_base, commandByte);
I2CMasterControl (I2C6_BASE,I2C_MASTER_CMD_SINGLE_SEND);
PollTimer0Delay(501000000);
While (I2CMasterBusy (I2C6_BASE))
{
}
}//End void WriteTouchByte(uint8_t i2cAdd, uint8_t命令Byte)
/*************************************** /
UINT8_t ReadTouchByte (uint8_t i2cAdd)
{
UINT32_t i2cByte;
i2cAdd = i2cAdd >> 1;
I2CMasterSlaveAddrSet (I2C6_BASE,i2cAdd,TRUE);
I2CMasterControl (I2C6_BASE,I2C_MASTER_CMD_SINGLE_Receive);
PollTimer0Delay(501000000);
while (I2CMasterBusy (I2C6_base));
i2cByte = I2CMasterDataGet (I2C6_BASE);
return(((uint8_t)i2cByte);
}//end uint8_t ReadTouchByte(uint8_t i2cAdd)
/*************************************** /
这是我的主页中的代码
WriteUART0 ("\n\rTouch Temp1 =");
WriteTouchByte (0x90,0x0E);
PollTimer0Delay(201000);
TouchTemp1 = ReadTouchByte (0x90);
UINT32ToASCII(UINT32_t)TouchTemp1);
WriteUART0 (十进制字符串);
WriteTouchByte (0x90,0x02);
PollTimer0Delay(201000);
ReadTouchByte (0x90);
PollTimer0Delay(5,1);
WriteUART0 ("\n\rTouch Temp2 =");
WriteTouchByte (0x90,0x4E);
PollTimer0Delay(201000);
TouchTemp2 = ReadTouchByte (0x90);
UINT32ToASCII(UINT32_t)TouchTemp2);
WriteUART0 (十进制字符串);
WriteTouchByte (0x90,0x02);
PollTimer0Delay(201000);
ReadTouchByte (0x90);
温度= TouchTemp1 * 2.5 / 255 * 1000.0 * 25.0 / 600;
WriteUART0 ("\n\rTemp0 (C)=");
DoubleToASCII (温度);
WriteUART0 (十进制字符串);
温度=(2.573 *(touchTemp2 - touchTemp1)* 2.5 / 255 * 1000)- 273;
WriteUART0 ("\n\rTemp1 (C)=");
DoubleToASCII (温度);
WriteUART0 (十进制字符串);
这是我在超级终端上看到的内容。 不管周围的温度是多少,都是这样的。
轻触Temp1 = 76
轻触Temp2 = 92
Temp0 (C)= 31.04
TEMP1 (C)= 130.60
谢谢。
AJ