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.

[参考译文] TSC2003:读取TSC2003温度时出现问题

Guru**** 2513185 points


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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/592939/tsc2003-problem-reading-tsc2003-temperature

部件号:TSC2003

您好,

我正在尝试了解如何使用此芯片读取温度。 我似乎正确地实施了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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好AJ_ee

    我将着手处理此问题,并将很快回复更多信息。

    此致
    Jos é Luis Figueroa
    应用工程师