TI中文支持网
TI专业的中文技术问题搜集分享网站

am335x触摸屏(电阻屏)校准问题?

我目前在基于am335x的板子做一个电阻屏校准应用程序。根据原理,tp坐标是(Xt ,Yt)分辨率是(Wt x Ht ),lcd坐标是(X,Y),分辨率是(W x H),则 X=(Xt *W)/Wt Y=(Yt *H)/Ht 。在java中就像这样:

cal.x = (int)(event.getX()*4096.0/(float)X_RES );  

cal.y = (int)(event.getY()*4096.0/(float)Y_RES ); 

然后可以获得a0~a6七个系数 ,带入其中: xfb = (x*a[1]+y*a[2]+a[0])/a[6]     yfb = (x*a[4]+y*a[5]+a[3])/a[6]  ,校准基本完成。

可是我在实际中发现触摸屏的分辨率并不是4096*4096. 而是跟内核board-am335xevm.c中触摸屏的结构体有关:

static struct tsc_data am335xevm_touchscreen_data = {
 .wires = 4,
 .x = {
  .min = 0x13A,
  .max = 0xF29,
  .inverted = 0,
 },
 .y = {
  .min = 0xB8,
  .max = 0xF1E,
  .inverted = 0,
 },
 .x_plate_resistance = 200,
 .steps_to_configure = 5,
};

触摸屏分辨率等于最大值减最小值。我想知道最大值和最小值是怎么获得的??是不是实际测出来的。而且,由于每个屏幕特性不一样,导致每个屏幕的最大值和最小值不一样,导致每个屏幕分辨率不一样??假如每个屏幕的特性相差很远,是不是每个屏幕的这个结构体都需要修正,我后面的校准程序才会正常使用。

Steven Liu1:

4096的定义并不是我们对于屏幕分辨率的限制,而是ADC是12bit的,那么采样出来的结果精度就是2的12次方,电阻触摸屏,在两个边缘,一个是0,一个是4096,你点在中间的坐标就可以通过ADC的电压采样值算得。个人理解,每个屏幕的特性相差再远,你点在触屏的某一点的相对位置的测量电压是一定的,因为电阻在X轴上是连续均分的,所以不管触屏多大,你点在X轴中间的话,采样算出来的一定是2048。由此能计算出你点的相对位置。

话说,你是用的linux吗?为啥不用ts_calibrate来校准呢?

Steven Liu1:

4096的定义并不是我们对于屏幕分辨率的限制,而是ADC是12bit的,那么采样出来的结果精度就是2的12次方,电阻触摸屏,在两个边缘,一个是0,一个是4096,你点在中间的坐标就可以通过ADC的电压采样值算得。个人理解,每个屏幕的特性相差再远,你点在触屏的某一点的相对位置的测量电压是一定的,因为电阻在X轴上是连续均分的,所以不管触屏多大,你点在X轴中间的话,采样算出来的一定是2048。由此能计算出你点的相对位置。

话说,你是用的linux吗?为啥不用ts_calibrate来校准呢?

赞(0)
未经允许不得转载:TI中文支持网 » am335x触摸屏(电阻屏)校准问题?
分享到: 更多 (0)