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.

TSC2046: skewed data across panel

Part Number: TSC2046

Tool/software:

STM32F746 using TSC2046 touch

I am getting repeatable, but skewed data across 5" resistive screen.  tsc2046 is setup as 12 bit Differential PD1 =0 PD0 =0

Raw data without touch is 2047, 2047

Average readings from corners

TL = 1175,1950 

TR = 1640, 1806

BL = 1180,1606

BR = 1959, 1175

Center 1600,1620

These numbers are repeatable, but why are they skewed?  Is this normal?  How can I calibrate screen?

From code below I wait for PENIRQ line to go low before reading.  Z, X, Y

I tried several screens, same results.

//8. Get touch screen data
TS_TOUCH_DATA_Def TSC2046_GetTouchData(void)
{
	TS_TOUCH_DATA_Def myTsData;
	uint16_t temp16x=0, temp16y=0;
	//Is screen pressed


	if(HAL_GPIO_ReadPin(PEN_INT_GPIO_Port, PEN_INT_Pin) == GPIO_PIN_RESET)
	 {
		 if(TSC2046_getRaw_Z()<2000)
	{
		myTsData.isPressed = true;
		//Read touch data
		for(uint8_t i=0; i<10; i++)
		{
			localRawTouch = TSC2046_GetRawTouch();
			temp16x += localRawTouch.x_touch;
			temp16y += localRawTouch.y_touch;
		}
		localRawTouch.x_touch = temp16x*0.1;
		localRawTouch.y_touch = temp16y*0.1;


	}
	 }
	

	else
		myTsData.isPressed = false;


	//X_Touch value
	myTsData.X = myTS_Calibrate.Scale_X*localRawTouch.x_touch + myTS_Calibrate.Bias_X;
	//Y_Touch value
	myTsData.Y =  myTS_Calibrate.Scale_Y*localRawTouch.y_touch + myTS_Calibrate.Bias_Y;



	
	if (myTsData.isPressed == true)
			{

	printf("cal_x %u \n", myTsData.X);
	printf("cal_y %u \n", myTsData.Y);

			}
	return myTsData;
}