AM3358
SDK:SDK-PROCESSOR-03.02
4线电阻触摸屏
现象:触摸屏跳点,在点某一个位置的时候,在屏幕的另一个位置也会出现被点触。
在ti_am335x_tsc.c的中断函数中,添加了调试信息来测试,发现跳点有两种情况
第一种跳点的时候读取到的数如下:下面的信息第一次是正常点的采样值,第二次是跳点的采样值。
[ 212.548514][huzz]titsc_read_coordinates:y[0]=3259
[huzz]titsc_read_coordinates:y[1]=3246
[huzz]titsc_read_coordinates:y[2]=3277
[huzz]titsc_read_coordinates:y[3]=3265
[huzz]titsc_read_coordinates:y[4]=3267
[huzz]titsc_read_coordinates:x[0]=2417
[huzz]titsc_read_coordinates:x[1]=2410
[huzz]titsc_read_coordinates:x[2]=2404
[huzz]titsc_read_coordinates:x[3]=2410
[huzz]titsc_read_coordinates:x[4]=2408
[huzz]titsc_irq:calc,x=2409,y=3263,z=152
[ 212.586826] [huzz]titsc_irq:IRQENB_HW_PEN
[ 212.592463] [huzz]titsc_irq:IRQENB_FIFO0THRES
[ 212.596856][huzz]titsc_read_coordinates:y[0]=2713
[huzz]titsc_read_coordinates:y[1]=3037
[huzz]titsc_read_coordinates:y[2]=3170
[huzz]titsc_read_coordinates:y[3]=3211
[huzz]titsc_read_coordinates:y[4]=3229
[huzz]titsc_read_coordinates:x[0]=1862
[huzz]titsc_read_coordinates:x[1]=1861
[huzz]titsc_read_coordinates:x[2]=1849
[huzz]titsc_read_coordinates:x[3]=1861
[huzz]titsc_read_coordinates:x[4]=1871
[huzz]titsc_irq:calc,x=1861,y=3139,z=168
第二种如下,第一组数是跳点的采样值,第二组数是正常触摸点的采样值
[ 72.039910][huzz]titsc_read_coordinates:y[0]=3093
[huzz]titsc_read_coordinates:y[1]=2468
[huzz]titsc_read_coordinates:y[2]=2029
[huzz]titsc_read_coordinates:y[3]=1662
[huzz]titsc_read_coordinates:y[4]=1412
[huzz]titsc_read_coordinates:x[0]=625
[huzz]titsc_read_coordinates:x[1]=637
[huzz]titsc_read_coordinates:x[2]=633
[huzz]titsc_read_coordinates:x[3]=638
[huzz]titsc_read_coordinates:x[4]=635
[huzz]titsc_irq:calc,x=635,y=2053,z=243
[ 72.079348] [huzz]titsc_irq:IRQENB_FIFO0THRES
[ 72.083730][huzz]titsc_read_coordinates:y[0]=1250
[huzz]titsc_read_coordinates:y[1]=1235
[huzz]titsc_read_coordinates:y[2]=1260
[huzz]titsc_read_coordinates:y[3]=1236
[huzz]titsc_read_coordinates:y[4]=1231
[huzz]titsc_read_coordinates:x[0]=636
[huzz]titsc_read_coordinates:x[1]=650
[huzz]titsc_read_coordinates:x[2]=642
[huzz]titsc_read_coordinates:x[3]=628
[huzz]titsc_read_coordinates:x[4]=636
[huzz]titsc_irq:calc,x=638,y=1240,z=257
[ 72.121496] [huzz]titsc_irq:IRQENB_HW_PEN
[ 72.125525] [huzz]titsc_irq:IRQENB_PENUP
请教下,在第二种的情况下,还有可能通过软件来排除,因为跳点时候,Y轴采集到的数据不稳定,但是如第一种,采集到的数据很稳定,该如何剔除?
am335x是否有这样的配置,类似压力大小,压力大的采集到的数据有效,而低于某个数值的压力下采集到的数据无效?
或则有其他办法?请指教,谢谢。
Jian Zhou:
所有的板子都有这个问题么?感觉像是触摸屏本身有干扰。
zizhen hu:
回复 Jian Zhou:
嗯,所有板子都是有跳点。而且是几率出现,大概点几十次会出现一次跳点,跳点位置不固定。如果触摸屏本身的问题的话,应该是屏幕固定位置会产生跳点吧。
另外,我想请教下,代码里面有如下片段,从注释里看,z1,z2是和压力有关的,但是从调试结果来看,左上角的z值最小70多,右上角的z值最大250左右,而按下屏幕的用力大小,z值无变化,那这个代码应该怎么理解?请帮忙分析下,谢谢。
titsc_read_coordinates(){
*z1 = titsc_readl(ts_dev, REG_FIFO0); *z1 &= 0xfff; *z2 = titsc_readl(ts_dev, REG_FIFO0); *z2 &= 0xfff;
}
static irqreturn_t titsc_irq(int irq, void *dev){
if (status & IRQENB_FIFO0THRES) {
titsc_read_coordinates(ts_dev, &x, &y, &z1, &z2);
if (ts_dev->pen_down && z1 != 0 && z2 != 0) { /* * Calculate pressure using formula * Resistance(touch) = x plate resistance * * x postion/4096 * ((z2 / z1) – 1) */ z = z1 – z2; z *= x; z *= ts_dev->x_plate_resistance; z /= z2; z = (z + 2047) >> 12;
if ( z <= MAX_12BIT) { input_report_abs(input_dev, ABS_X, x); input_report_abs(input_dev, ABS_Y, y); input_report_abs(input_dev, ABS_PRESSURE, z); input_report_key(input_dev, BTN_TOUCH, 1); input_sync(input_dev); } }
}