随笔-118  评论-133  文章-4  trackbacks-0
作者:刘旭晖 Raymond转载请注明出处
Email:colorant@163.com
BLOG:http://blog.csdn.net/colorant/
主页:http://sites.google.com/site/rgbbones/

原帖 http://blog.csdn.net/colorant/archive/2008/08/07/2782541.aspx

电阻式触摸屏的Controller从原理上,简单的说就是一个可切换通道的AD转换器,常见的有类似TSC2046这一系列的独立芯片,也有 Buildin在MPU里的集成模块。这里记录的主要是这类触摸屏驱动的调试中我所遇到过的一些问题,因为具体硬件平台和环境不同,有些问题,现象和原因 可能不一定与你的实际情况相同,仅供参考。

数据线上无法得到正确的数据

症状

读取的测量数据变化不定,几乎没有规律

分析

Tsc2046控制器在接收到8个bit的测量指令后,需要一段的时间完成测量和AD转换工作,这期间在其busy线上会输出高电平,直到电平拉低后在数 据线上才会输出数据。 而这期间,其片选信号从spec上看,应该要保持有效,所以在使用SPI接口时候,需要采用比如32位传送的方式,使得在传完8位指令后,继续保持片选和 时钟,已接收后续的测量结果数据,因为这期间无法测量busy信号,假定其为某一恒定时间,位移得到所需测量结果。分析数据不稳定的原因在于这段busy 等待时间在不同的测量情况下,长度可能不一定是确定的,导致无法准确判断应该提取SDO口上的哪段数据作为测量结果。

所以主要矛盾在于我所使用的CPU的SPI口的片选和时钟信号无法与数据线分开独立自由控制。

解决

采用GPIO口模拟SPI时序,从而可以自己控制clk和片选信号,因此此时可以测量busy线的信号,从而准确的得知何时tsc2046开始完成测量并输出测量结果。

busy线长期处于忙等待状态

症状

送完指令,等待busy拉低的过程中,busy信号始终为高

分析

仔细分析spec,发现在busy状态下,tsc2046依然需要clk来完成AD转换工作,所以在等待busy信号的时候,要同时继续保持CLK信号

解决

每读一次busy信号的同时,继续用GPIO口模拟一个周期的CLK信号

不断产生pendown中断

症状

在第一次触摸屏幕,pendown中断产生,并完成测量后,即使放开触摸屏,依然连续不断的有pendown中断信号产生,反复进入测量过程。

分析

测量触摸屏X+ pin 上的电平发现,即使在等待中断的过程中,X+ pin 也始终为低电平,而理论上,此时该pin应该为高电平,由于Y- pin 接地,在触摸屏被按下的时候,X+ pin 电压被拉低,从而产生pendown中断。

反复调试发现该pin电压为低的原因在于在上一次测量中,最后一次测量的是Z1,在触摸屏放开的时候,测量Z1的过程中,X+为低电平。而后回到等待中断 状态的时候,X+ pin 由于外部电容的原因,被上拉电阻重新拉高为高电平需要一段的时间,在此之前,如果打开中断,就会误判,错误的收到中断信号

解决

有几种办法可以解决:

减小外部电容
将中断由电平触发改为下降沿触发
在完成测量之后,打开中断之前,延迟一段时间。等待X+ Pin回到高电平状态

改变电容涉及到硬件电路改变,而改变触发方式则因为目前使用的中断线无法改成边沿触发,不可行,所以目前是用最后一种方式。


可以尝试改变测量顺序,先测Z1再测X,Y看是否这样可以避免最后一种方式所需的延迟。减小cpu占用率。

采集的数据有剧烈抖动

症状

触摸屏压下以后,即使保持位置不动,所取得的XY坐标也会不时发生较大范围的跳动,幅度达到十几个到几十个像素

分析

通常触摸屏的抖动是不可避免的,毕竟是一个模拟信号的AD转换的过程,但是正常抖动应该在几个像素以下。大范围的坐标抖动,说明AD转换采样取得的电压值有较大变化。理论上大致会有两类原因造成:

AD转换的参考电压跳动
取样PIN脚输入电压跳动

因此,外推一下,不外乎是:

参考电压或取样PIN脚电压受到干扰
取样时刻,对应PIN脚的电压值还未稳定
触摸屏本身质量原因(如贴合存在空隙等),触压时电阻值变化较大,造成输出电压的抖动

解决

具体解决时就要具体分析跳动的现象和规律了
通常如果是内置触摸屏控制模块的MPU,取样PIN脚数据受到干扰的可能性较大,因为这时候,电阻式触摸屏的4个PIN脚的走线相对独立的触摸屏控制芯片来说,可能会比较长,周边的其它信号线可能也比较多。要注意保护好信号。
后两者对应的措施包括延迟消抖,合理安排采样时间,间隔。 改进触摸屏本身等。

最后,抖动有时候是不能完全消除的,可以通过数据平滑的措施在一定程度上减弱抖动带来的干扰。

CPU占用率超高

症状

触摸笔压下后,CPU占用率迅速攀高到一个不合理的地步,松开后降低

分析

通常这种情况都是由于使用了不合理的查询手段来获取采样数据,例如忙等待AD转换的结束,采样频率过快等等

解决

理论上,所有这类IO设备都应该采用中断驱动的方式来获取数据。很遗憾的是,有些内置的触摸屏控制模块,转换结束后并不产生中断信号,只是设置一个状态寄 存器,需要由软件查询得到。这种情况下,如果转换完成时间不定,又没有较高精度的定时中断源,只能牺牲相应速度,在每次查询间隔之间睡眠一段足够长的时 间,让出CPU。 通常来说,在jiffies值为10ms间隔的系统上,最快每秒查询50-100次,也基本能够满足像手写输入这样的应用的需求了。
posted on 2009-07-24 11:17 lfc 阅读(1742) 评论(1)  编辑 收藏 引用

评论:
# 求助 2009-12-18 15:55 | hanchiqt
您好!
我是学生,现在在做设计,是用ADS7843来驱动7寸的四线电阻式触摸屏,我已经做好了板子,写好了程序,但是现在遇到了很麻烦的问题,我周围没有人做过这个,没人能帮到我,我很着急,希望您能在百忙之中帮帮我,非常感谢!
我的问题是这样的:
一、加电后ADS7843的X+和X-管脚的电压值都是4.3V;
二、ADS7843的dout管脚始终是高电平;
三、每次点击触摸屏后,从示波器上面看到的波形有变化,但是每次X和Y轴的电压值都是一样的,点击触摸屏任何一点,得到的电压值都是一样的;
四、从串口读到的触摸点的坐标值始终是(4095,0)。
我查找了所有地方,也不知道该怎么办了,求您能帮帮我。
谢谢谢谢!  回复  更多评论
  
只有注册用户登录后才能发表评论。