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.

am335x 触摸屏跳点

Other Parts Discussed in Thread: AM3358

AM3358

SDK:SDK-PROCESSOR-03.02

4线电阻触摸屏

现象:触摸屏跳点,在点某一个位置的时候,在屏幕的另一个位置也会出现被点触。

在ti_am335x_tsc.c的中断函数中,添加了调试信息来测试,发现跳点有两种情况

第一种跳点的时候读取到的数如下:下面的信息第一次是正常点的采样值,第二次是跳点的采样值。

[ 212.548514]
[huzz]***:y[0]=3259
[huzz]***:y[1]=3246
[huzz]***:y[2]=3277
[huzz]***:y[3]=3265
[huzz]***:y[4]=3267
[huzz]***:x[0]=2417
[huzz]***:x[1]=2410
[huzz]***:x[2]=2404
[huzz]***:x[3]=2410
[huzz]***:x[4]=2408
[huzz]***:calc,x=2409,y=3263,z=152
[ 212.586826] [huzz]***:IRQENB_HW_PEN
[ 212.592463] [huzz]***:IRQENB_FIFO0THRES
[ 212.596856]
[huzz]***:y[0]=2713
[huzz]***:y[1]=3037
[huzz]***:y[2]=3170
[huzz]***:y[3]=3211
[huzz]***:y[4]=3229
[huzz]***:x[0]=1862
[huzz]***:x[1]=1861
[huzz]***:x[2]=1849
[huzz]***:x[3]=1861
[huzz]***:x[4]=1871
[huzz]***:calc,x=1861,y=3139,z=168

第二种如下,第一组数是跳点的采样值,第二组数是正常触摸点的采样值

[ 72.039910]
[huzz]***:y[0]=3093
[huzz]***:y[1]=2468
[huzz]***:y[2]=2029
[huzz]***:y[3]=1662
[huzz]***:y[4]=1412
[huzz]***:x[0]=625
[huzz]***:x[1]=637
[huzz]***:x[2]=633
[huzz]***:x[3]=638
[huzz]***:x[4]=635
[huzz]***:calc,x=635,y=2053,z=243
[ 72.079348] [huzz]***:IRQENB_FIFO0THRES
[ 72.083730]
[huzz]***:y[0]=1250
[huzz]***:y[1]=1235
[huzz]***:y[2]=1260
[huzz]***:y[3]=1236
[huzz]***:y[4]=1231
[huzz]***:x[0]=636
[huzz]***:x[1]=650
[huzz]***:x[2]=642
[huzz]***:x[3]=628
[huzz]***:x[4]=636
[huzz]***:calc,x=638,y=1240,z=257
[ 72.121496] [huzz]***:IRQENB_HW_PEN
[ 72.125525] [huzz]***:IRQENB_PENUP

请教下,在第二种的情况下,还有可能通过软件来排除,因为跳点时候,Y轴采集到的数据不稳定,但是如第一种,采集到的数据很稳定,该如何剔除?

am335x是否有这样的配置,类似压力大小,压力大的采集到的数据有效,而低于某个数值的压力下采集到的数据无效?

或则有其他办法?请指教,谢谢。

  • 所有的板子都有这个问题么?感觉像是触摸屏本身有干扰。

  • 嗯,所有板子都是有跳点。而且是几率出现,大概点几十次会出现一次跳点,跳点位置不固定。如果触摸屏本身的问题的话,应该是屏幕固定位置会产生跳点吧。

    另外,我想请教下,代码里面有如下片段,从注释里看,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);
        }
    }

    }