9回答

0收藏

请教亮哥,ra8875的触摸功能

#开源分享 #开源分享 8954 人阅读 | 9 人回复 | 2013-02-27

今天试了一下ra8875的触摸功能,没有做校准直接把采回来的点直接打在lcd上发现偏差很大(大概2到3cm),这正常吗?
分享到:
回复

使用道具 举报

回答|共 9 个

倒序浏览

沙发

xqy281

发表于 2013-2-27 11:19:16 | 只看该作者

顶起~希望亮哥能看到!!
板凳

zhangb7309

发表于 2013-2-27 11:41:11 | 只看该作者

帮你顶起来      
地板

laoliang-67665

发表于 2013-2-27 18:54:04 | 只看该作者

不正常,请检查RA8875的AD的参考电压!
嵌入式,ucos,FPGA系统书籍作者
5#

xqy281

发表于 2013-2-27 21:48:17 | 只看该作者

亮点 发表于 2013-2-27 18:54
不正常,请检查RA8875的AD的参考电压!

参考电压我是用ra8875内部参考的。内部的参考电压有问题吗?
6#

laoliang-67665

发表于 2013-2-28 17:45:23 | 只看该作者

xqy281 发表于 2013-2-27 21:48
参考电压我是用ra8875内部参考的。内部的参考电压有问题吗?

我觉得首先要搞清楚偏差是向一个方向,还是随机的。是不是离左上角越远偏差越大。内部的参考电压一般不会有问题,建议你点击后,将获得的AD值输出到屏幕上,或输出到串口观察。
例如,4个角的X,Y值和ADX,ADY转换结果,好进行分析
如果没有滤波(多次求平均),试着增加滤波,如
亮点的代码:
void tft_gettouchpoint(INT16U *touchx,INT16U *touchy)
{
            INT16U databufx[8],databufy[8],count,temp1,temp2,i,j;

                //LcdClear(WHITE);
                delay_ms(500);
                while (1)
            {          
                          clear_TP_interrupt(); //清除RA8875触摸信息
                      delay_ms(2);           
                if(Touch_Status())                //如果有触摸
                {
                                clear_TP_interrupt();
                                led_turn1;                               
                                delay_ms(2);
                                count=0;
                    while(count<8)//循环读数8次
                    {
                                        clear_TP_interrupt();                //清除RA8875中断标志
                        databufx[count] = Get_X_ADC_Value_10bit();        //读取X轴AD值
                        databufy[count]=Get_Y_ADC_Value_10bit();        //读取Y轴AD值
                        count++;
                        delay_ms(2);
                                }
            
                                for(j=0;j<count-1;j++)
                            for(i=j;i<count-1;i++)
                            {
                                if(databufx>databufx[i+1])//升序排列
                                {
                                    temp1=databufx[i+1];
                                    databufx[i+1]=databufx;
                                    databufx=temp1;
       
                                    temp2=databufy[i+1];
                                    databufy[i+1]=databufy;
                                    databufy=temp2;

                                }
                            }

                *touchx=(databufx[3]+databufx[4]+databufx[5])/3;
                *touchy=(databufy[3]+databufy[4]+databufy[5])/3;
                                if(ISDEBUG) printf("%d,%d  ",touchx,touchy);
                                return;
                           }//if
                   delay_ms(50);
                   }
}
嵌入式,ucos,FPGA系统书籍作者
7#

xqy281

发表于 2013-3-1 16:45:16 | 只看该作者

亮点 发表于 2013-2-28 17:45
我觉得首先要搞清楚偏差是向一个方向,还是随机的。是不是离左上角越远偏差越大。内部的参考电压一般不会 ...

用了亮哥的升序滤波算法后,基本上就差不多了。但是越往右面越不准(已经校准过的)这是触摸屏的问题吗?
亮哥你这个算法加的延时那么大,如果要手写的话就很难识别了。请问还有别的方法?
我试过把延时减少结果同一个点读了两次(抬手的时候),电阻屏太灵敏了!郁闷的我..
8#

xqy281

发表于 2013-3-1 17:36:56 | 只看该作者

亮点 发表于 2013-2-28 17:45
我觉得首先要搞清楚偏差是向一个方向,还是随机的。是不是离左上角越远偏差越大。内部的参考电压一般不会 ...

补充: x轴正偏 y轴不偏。
9#

laoliang-67665

发表于 2013-3-2 15:22:36 | 只看该作者

xqy281 发表于 2013-3-1 17:36
补充: x轴正偏 y轴不偏。

我觉得延时要自己来调整, y轴不偏说明硬件没问题,x轴正偏且越往右越大那可能还是校准不准,比例系数不对,是不是最右边的点比中间的偏量大一倍呢,你已经接近成功了!
嵌入式,ucos,FPGA系统书籍作者
10#

xqy281

发表于 2013-3-3 14:40:16 | 只看该作者

亮点 发表于 2013-3-2 15:22
我觉得延时要自己来调整, y轴不偏说明硬件没问题,x轴正偏且越往右越大那可能还是校准不准,比例系数不 ...

换了新的电阻屏~一个下午就调好了!
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条