S3C2440触摸屏消除跳点及抖动

来源:互联网 发布:永远神剑2知乎 编辑:程序博客网 时间:2024/04/27 14:41

(部分转载)


其实2440触摸屏跳点问题在前一个多月已经得到解决,在我解决6410 触摸屏抖动的时候,偶然发现6410 不会任何跳点,只是抖动,后来比较2440 和6410 的触摸屏驱动写法,发现6410的比较惊异,算法避免了天外飞仙跳点。

      ooo,下班了,明天再写吧。

      ——续@2010-11-19

  我仔细比较6410 触摸屏驱动和2440 驱动,发现6410 的写法比较合理一些,最大区别是DdsiTouchPanelGetPoint函数写法,下面是2440 会跳点的写法。


  从上面可以看出,这个DdsiTouchPanelGetPoint里面只进行了一步采样,尽管采样次数大于1次,但是也绝对不能消除天外飞仙跳点。因为这几次采样时间太靠近了,所以采样值都会很相近,即使是多次采样(我曾经试过20 次,没有多大改善。),求平均值,效果也会很微小。这个情况就说明,要想触摸屏不跳点,就要消除错误的采样点,那么怎么做呢?上面每隔10ms 连续采样多次无效,原因是每次采样间隔时间太短,数据太密集,接近,导致仍然获得的是误差数据。假设想想,如果扩大采样时间间隔去采样,这样获得的数据就不会太接近就可以判断了吧?看看6410 的触摸屏驱动,果然是每隔10ms 采样两组数据的,并且这两组数据进行比较分析,误差过大就说明采样点是无效的,这样就把天外飞仙的现象去掉了。下面也贴出改好的2440 代码,希望大家有帮助。


现在测试2440 的触摸屏,我们会惊奇的发现,真的没有天外飞仙跳点了,不过又引入了一个新的问题,触摸屏抖动!以前的那种写法采样时间间隔短,数据集中,是不会抖动的,现在数据差异大,触摸屏抖动的相当的厉害了!怎么办呢?这个时候增大采样次数求平均值会有一些效果,不过还是不能完全消除抖动的!现在就要用一个简单的算法了:就是采样八个点,然后从小到大排序之后,把最大和最小值去掉,因为这两个值通常都是在受力不均的时候产生的,不是真实的值,所以丢了,再求剩余几个点的平均值,这样就可以完美的消除触摸屏抖动了,下面贴出代码,希望大家也来改进一下。

(代码请看原帖)

----------------------------------------------------

转自 http://www.cnblogs.com/gooogleman/archive/2010/11/18/1881017.html

-----------------------------------------------------------------------------------

/* Comment:

LZ觉得,每隔10ms采样两组数据并比较其差异,因为在电阻屏上滑动,坐标值的变化应该是连续变化的,这种filter是Hysteresis迟滞作用,类似电感,阻碍过于快速的变化。

而将采样八个点的值进行排序,去掉最大最小值,这种filter类似于带通滤波器。

LZ试过,如果不进行filter过滤,任何一种平均算法都不能有效的消除跳点和抖动。因此,只有过滤掉那些误差较大的采样点,才可能消除跳点和抖动。

 */


原创粉丝点击