主题中讨论的其他器件:TSC2003
您好!
我还在触摸屏论坛上发布了这一信息、但我认为、由于我使用的是 TM4C1294、我可能在这里也会获得一些反馈。
我正在尝试使用 TSC2003确定如何读取温度。 我似乎正确地实现了 I2C 驱动器、因为我能够测量 X 和 Y 正常、并且能够实现触摸屏功能。 但我无法获得正确的温度读数。 有人对我的错误行为提出任何建议? 我使用的是 TM4C1294NCPDTI。 我写的一些行可能没有意义、因为我尝试了很多东西、但我无法读取温度以工作。
void InitializeTouch (void)(空)
{
//PENIRQ 引脚
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOC))
{
}//结束 while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOC))
GPIOPinTypeGPIOInput (GPIO_PORTC_BASE、GPIO_PIN_4);
GPIOIntTypeSet (GPIO_PORTC_BASE、GPIO_PIN_4、GPIO_FALLING_EDGE);
// GPIOPadConfigSet (GPIO_PORTC_BASE、GPIO_PIN_4、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);
GPIOIntRegister (GPIO_PORTC_BASE、PortCIntHandler);
GPIOIntEnable (GPIO_PORTC_BASE、GPIO_PIN_4);
//Touch I2C 引脚
SysCtlPeripheralEnable (SYSCTL_Periph_I2C6);
while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C6))
{
}//结束 while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C6))
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA))
{
}//结束 while (!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 (20、1000);
ReadTouchByte (0x90);
}//end void InitializeTouch (void)
/********* /
空 WriteTouchByte (uint8_t i2cADD、 uint8_t 命令字节)
{
i2cAdd = i2cAdd >> 1;
I2CMasterSlaveAddrSet (I2C6_BASE、i2cAdd、false);
I2CMasterDataPut (I2C6_BASE、命令字节);
I2CMasterControl (I2C6_BASE、I2C_MASTER_CMD_SINGLE_SEND);
PollTimer0Delay (50、1000000);
while (I2CMasterBusy (I2C6_BASE))
{
}
}//end void WriteTouchByte (uint8_t i2cADD、 uint8_t 命令字节)
/********* /
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 (50、1000000);
while (I2CMasterBusy (I2C6_BASE));
i2cByte = I2CMasterDataGet (I2C6_BASE);
return ((uint8_t) i2cByte);
}//end uint8_t ReadTouchByte (uint8_t i2cAdd)
/********* /
这是我的主代码
WriteUART0 ("\n\n\rTouch Temp1 =");
WriteTouchByte (0x90、0x0E);
PollTimer0Delay (20、1000);
TouchTemp1 = ReadTouchByte (0x90);
uint32ToASCII ((uint32_t) touchTemp1);
WriteUART0 (十进制字符串);
WriteTouchByte (0x90、0x02);
PollTimer0Delay (20、1000);
ReadTouchByte (0x90);
PollTimer0Delay (5、1);
WriteUART0 ("\n\n\rTouch Temp2 =");
WriteTouchByte (0x90、0x4E);
PollTimer0Delay (20、1000);
TouchTemp2 = ReadTouchByte (0x90);
uint32ToASCII ((uint32_t) touchTemp2);
WriteUART0 (十进制字符串);
WriteTouchByte (0x90、0x02);
PollTimer0Delay (20、1000);
ReadTouchByte (0x90);
温度= touchTemp1 * 2.5 / 255 * 1000.0 * 25.0/600;
WriteUART0 ("\n\n\rTemp0 (C)=");
DoubleToASCII (温度);
WriteUART0 (十进制字符串);
温度=(2.573 *(touchTemp2 - touchTemp1)* 2.5 / 255 * 1000)- 273;
WriteUART0 ("\n\n\rTemp1 (C)=");
DoubleToASCII (温度);
WriteUART0 (十进制字符串);
这就是我在超级终端上看到的内容。 无论周围的温度是多少、它始终与此类似。
轻触温度1 = 76
触摸 Temp2 = 92
Temp0 (C)= 31.04
TEMP1 (C)= 130.60
谢谢。
AJ