This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:连接到 TM4C1294NCPDT 的 TSC2003触摸屏控制器温度存在问题

Guru**** 2330830 points
Other Parts Discussed in Thread: TSC2003
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/592940/tm4c1294ncpdt-problem-with-tsc2003-touch-screen-controller-temperature-connected-to-tm4c1294ncpdt

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    如果您能够正确读取 X 和 Y 的测量值、那么我认为硬件设置基本上是正确的。

    我建议您使用执行 ReadTouchByte (0x90)时 TSC2003返回的范围监视器。 数据在范围上是否正确? 如果示波器上的数据正确、则问题可能是由软件引起的。

    我阅读了 TSC2003数据表、它说您在发出命令后需要等待10us 才能读取数据? 您的 PollTimer0Delay()是否满足此要求? 发出命令后、TSC2003需要开始采集、然后转换。 如果您在数据准备就绪之前过早读取数据、则数据可能会出错。 只是一个思考。