TCC89 触摸存在跳点或者手写不圆滑问题。就这个问题,我仔细的看了一下驱动原代码,特将解决办法记录下来。
本人发现TCC8902的两个触摸驱动都有跳点或者不好用的情况。
1.TSC2003的驱动,这种外加I2C AD的模式,只有一个读中断,并且是低电平有效。有如下缺点:
(1)UP与DWON 不能直接用中断来判断。
(2)I2C 读数比较占资源,
(3)驱动里面没有加定时,直接用的延时(3个WAITFOR等待),双击不好操作。
(4)如果X+,X-或者Y+,Y-接错不能通过校屏,校过来。
(5)由于(3)的原因,如果这个延时太大,手写的时候取的点就少了,就会发现笔画不够圆滑。是由许多小折线组成的。
由于上面多种问题,所以本人对TOUCHPANEL驱动做了改进。具体如下:
(1).在DdsiTouchPanelGetPoint()函数里面通过读IO口的电平来判断是UP或是DWON。
这种机制可以将TCHMAIN.c里面中断线程里面的waitforsigleobject()减小到1个。但这里要做一个小处理,就是DWON下去以后,要设超时(因为我们没有定时器中断当做定时用),这个时间可以调整,时间越小,手写时越圆滑,UP之后又要设为无限等待。
(2)在判断是UP还是DOWN的时候有个注意的地方,会了防止跳点,中断来的第一次只置DWON 状态,不读数据,等waitforsigleobject超时后再来读。但这个时候就会有个问题,超时设得太大,就会出现快速轻点可能无效,原因是因为这个超时还没有到,就已是UP了,超时太短,在长按屏的时候访问I2C太频繁,影响系统资源。所以设置超时的时候要注意短按就尽量短点,长按时要长一些。
(3)TSC2003这类的IC,读完数据后,如果中断脚为高就说明是UP了,所以要在读完I2C读据之后马上判断,这样才能最快速的判断出UP的动作。
(4)对于接反触摸屏的线不对校正过来的原因是因为,tca_rawtoscreen()函数的原因。去掉这个函数。
(5)自带的驱动采样的坐标算法是:压力判断---》采样点排序——》去掉最大最小-》取平均。个人认为还要加一点比较好。
压力判断---》采样点排序——》去掉最大最小-》
剩下有效数据最大最小取差值,差值要做限制——》取平均。
经过上面这几个步骤改进之后。触摸好用很多。
2.自带AD的触摸屏
这个我还没有仔细调过,但也在开发板上用了一下,发现跳点很严重。后来我仔细看了一下代码,发现如下问题:
(1)也没有用定时,用的是三个WAITFORSINGLEOBJECT().双击不好用。跳点。
(2)中断只用了一个DWON中断,UP中断没有用起来。(中断是不能同时支持 UP与DOWN的,但可以动态设置)
改进办法:
(1)还是跟上面一样,在DdsiTouchPanelGetPoint()函数里面来判断UP还是DOWN.但这里都可以用中断。
这点很重要。虽然触摸中断只有一个,但可以通过寄存器设为是UP中断,还是DWON中断。可以动态的改变。不按的时候中断设为DOWN触发,当按下去之后要将中断设为UP触发。(pTSADC->ADCTSC的第八位来设置)
(2)中断来的时候只设状态,不读AD值。
(3)同样要在TCHMAIN里面的ISR线程里面设超时,因为我们没有定时器中断。超时时间到再来读AD值。这样可以有效防止 跳点。
(4)算法同上。
这里面影响比较大的是采样的点数量,如果太多会占用系统资源多。另一个是定时取点时间,太小也会占用系统资源多。
要调试后取一个比较适中的值。
文笔有限写得不够清楚。