触摸屏在S3C2410上的应用实例
上一篇 / 下一篇 2007-09-10 19:13:42 / 个人分类:嵌入式开发
来源:单片机及嵌入式系统应用 作者:国防科技大学 宋 成 孙广富木铎校园 BBS 社区Rq4\/zKO[
木铎校园 BBS 社区$e&rG#@jF0i]4]lv摘要:给出S3C2410上触摸屏的实现原理、硬件结构和软件程序;对软件进行优化,改进软件滤波的实现方法。其算法使用C语言实现,可移植到任何操作系统的触摸屏驱动程序中。
关键词:触摸屏 S3C2410 滤波木铎校园 BBS 社区l#s5Hb9k*Q
引言木铎校园 BBS 社区W7iw6N"p8N*A
随着个人数字助理(PDA)、瘦容户机等的普及,触摸屏作为终端与用户交互的媒介,在我们的生活中使用得越来普遍。触摸屏分为电阻式、电容式、声表面波式和红外线扫描式等类型,使用得最多的是4线电阻式触摸屏。
?*e+m|:ey0本文以三星公司ARM9内核芯片S3C2410触摸屏接口为基础,通过外接4线电阻式触摸屏构成硬件基础。在此基础上,开发了触摸屏面图板程序。
-f~9e]$Y01 触摸屏原理木铎校园 BBS 社区+Xs `P `P^}r
S3C2410接4线电阻式触摸屏的电路原理如图1所示。整个触摸屏由模向电阻比和纵向电阻线组成,由nYPON、YMON、nXPON、XMON四个控制信号控制4个MOS管(S1、S2、S3、S4)的通断。S3C2410有8个模拟输入通道。其中,通道7作为触摸屏接口的X坐标输入(图1的AIN[7]),通道5作为触摸屏接口的Y坐标输入(图1的AIN[5])。电路如图2所示。在接入S3C2410触摸屏接口前,它们都通过一个阻容式低通滤器滤除坐标信号噪声。这里的滤波十分重要,如果传递给S3C2410模拟输入接口的信号中干扰过大,不利于后续的软件处理。在采样过程中,软件只用给特殊寄存器置位,S3C2410的触摸屏控制器就会自动控制触摸屏接口打开或关闭各MOS管,按顺序完成X坐标点采集和Y坐标点采集。木铎校园 BBS 社区A&h6Ns
U nD
木铎校园 BBS 社区r*@R\6OTX
木铎校园 BBS 社区4cD5l.wa]
2 S3C2410触摸屏控制器木铎校园 BBS 社区+Hx3e7K0zQ^7W
S3C2410触摸屏控制器有2种处理模式:木铎校园 BBS 社区V UXWrJ
①X/Y位置分别转换模式。触摸屏控制器包括两个控制阶段,X坐标转换阶段和Y坐标转换阶段。木铎校园 BBS 社区Y_V3Q,~A
②X/Y位置自动转换模式。触摸屏控制器将自动转换X和Y坐标。
(Q9~6x"i$cO$| W0本文使用X/Y位置自动转换模式。木铎校园 BBS 社区;F}w8]uK
3 S3C2410触摸屏编程木铎校园 BBS 社区 adk*D1uu
由于触摸屏程序中参数的选取优化需要多次试验,而加入操作系统试验参数,每次编译下载耗费时间过多,不易于试验的进行,因而我们直接编写裸机触摸屏程序。三星公司开放了S3C2410测试程序2410test(可在三星网站下载),提供了触摸屏接口自动转换模式的程序范例ts_auto.c,见本刊网站www.dpj.com.cn。本文在此范例的基础上编写了触摸屏画图板程序——在显示屏上画出触摸笔的流走痕迹。木铎校园 BBS 社区s k T LQEU3OHr
针对坐标点采样时产生的噪声,本文采用噪声滤波算法,编写了相应的噪声滤波程序,滤除干扰采样点。整个触摸屏画图板程序的处理流程如图3所示。木铎校园 BBS 社区X hFv?,x
3.1 程序初始化
.^'A;T }j[0初始化触摸屏控制器为自动转换模式。其中寄存器ADCDLY的值需要根据具体的试验选取,可运行本文提供的程序看画线的效果来选取具体的参数。触摸屏中断处理程序Adc_or_TsAuto是判断触摸屏是否被按下了。触摸屏被按下,给全局变量Flag_Touch赋值为Touch_Down,否则赋值为Touch_Up。
cN-a%c$tA/Yv }/k0
木铎校园 BBS 社区[0@md_;W
初始化脉宽调制计时器(PWM TIMER),选择计时器4为时钟,定义10ms中断1次,提供触摸屏采样时间基准,即10ms触摸屏采样1次。计数器中断处理程序Timer4Intr中判断Flag_Touch被赋值为Touch_Down,则给全局变量gTouchStartSample置位,以控制触摸屏采样。木铎校园 BBS 社区*[9TS]_*}
之后清除触摸屏中断和计时器中断屏蔽位,接受中断响应,同时计时器开始计时。木铎校园 BBS 社区&G-eBSb
3.2 触摸屏采样程序
;nu#t&Yf0如果gTouchStartSample为TRUE,触摸屏接口开始对坐标X和Y的模拟量进行采样,根据试验选取适合的的采集次数。本文中使用9次采集,分别记入到ptx[TouchSample]和pty[TouchSample]数组中,TouchSample为采集次数。木铎校园 BBS 社区6t-l/tvM K
为了减少运算量,将ptx[]和pty[]分别分三组取平均值,存储在px[3]和py[3]中。这里以处理X坐标为例:
F2X|e/w6W/S9i0px[0]=(ptx[0]+ptx[1]+ptx[2])/3;木铎校园 BBS 社区.@Zfu @y,~ {
px[1]=(ptx[3]+ptx[4]+ptx[5])/3;
-W,_kQ2_'V0px[2]=(ptx[6]+ptx[7]+ptx[8])/3;
ny!Sc*S(M5r |i0计算以上三组数据的差值:
n RY y Sn/p0dlXDiff0=px[0]-px[1];
2v@,u+x4f+|lX&A0dlXDiff1=px[1]-px[2];木铎校园 BBS 社区'\~[H9l"WE
dlXDiff2=px[2]-px[0];
)}(W_Le0nJ:o0然后对上述差值取绝对值,所得结果简称绝对差值:
W+f#}_-XriH6\2_"o:\0dlXDiff0=dlXDiff0>0?dlXDiff0:-dlXDiff0;木铎校园 BBS 社区/L?Lk4Rb(y
dlXDiff1=dlXDiff1>0?dlXDiff1:-dlXDiff1;木铎校园 BBS 社区D+K?9_.f
dlXDiff2=dlXDiff2>0?dlXDiff2:-dlXDiff2;木铎校园 BBS 社区E#IN-pH_ao
判断上述计算的色对差值是否都超过差值门限,如果这3个绝对差值都超过门限值,判定这次采样点为野点,抛弃采样点,程序返回等待下次采样。其中的差值门限需要根据试验测试得到,本文取值为2。
OQB%WRi jbO6[0找出其中绝对差值最小的2组数据,再将它们作平均,同时赋值给tmx:木铎校园 BBS 社区sFg5w[ U
if(dlXDiff0<dlXDiff1){
,[%R9W"ny$n0cQ0if(dlXDiff2<dlXDiff0){
#z3hO3Jd&F5Y@9`8m1M0tmx=((px[0]+px[2]>>1);木铎校园 BBS 社区 tx*M zyb&b/ydku
}木铎校园 BBS 社区 tuw UE'yN@ D0qV.`f
else{
#v{ tp9CJz]0tmx=((px[0]+px[1])>>1);木铎校园 BBS 社区/wU7DRdE+J&K@/NZ
}
UQY&pcB6an(t0}木铎校园 BBS 社区 U [?/@DZ*w1U
else if(dlXDiff2<dlXDiff1){
*w(I%}.} ehK!ko ez0tmx=((px[0]+px[2])>>1);
[x pvO,NIF5V0}
{)paPqt Lj4_tk0else{
i pHH:P:ah?0tmx=((px[1]+px[2])>>1);
U*{0T\K5NJ@0}木铎校园 BBS 社区0[:l!^#EU
木铎校园 BBS 社区QF
l0i2g6^*Z
rF~
木铎校园 BBS 社区0^Jv`]k+\0Y.u
木铎校园 BBS 社区Vu'A&km
函数Touch_Coordinate Conversion完成触摸屏采样值转换成显示坐标,根据不同的硬件有不同的转换方法。本触摸屏采样坐标及显示坐标如图4、图5所示。其中TOUCH_MAX_X和TOUCH_MIN_X是触摸屏X坐标采样值的最大和最小值;Y坐标同理。可以运行本文程序,同时使用触摸笔在触摸屏的4个角取得最大最小采样值。这里使用的是320×240的TFT屏,所以TOUCH_X值为320。下面是X坐标的转换程序:木铎校园 BBS 社区4B$pq$W#u&c
Touch_CoordinateConversio(int*px){
%Qf6\N7S LG0TmpX=(tmx>=TOUCH_MAX_X)?(TOUCH_MAX_X):*px;
9i(D5ml!hJjuC:k0TmpX-=TOUCH_MIN_X;木铎校园 BBS 社区yv`\9w2`H/W9R)H6X {
TmpX=(TmpX)?TmpX:0;木铎校园 BBS 社区n Syz^2d bs+rW
*px=(TmpX*TOUCH_X)/(TOUCH_MAX_X-TOUCH_MIN_X);
7yWm)bU;w+W!q/s5y8\0}
,iz+g _6C3} v03.3 坐标滤波程序木铎校园 BBS 社区+{l;L[c_!RD
坐标滤波程序Touch_Pen_filtering,考虑人机界面中对触摸屏的操作有3种:木铎校园 BBS 社区 X^n&gM
*触摸笔在触摸屏上的位置不变;
F2r x2S&J q.vS0*触摸笔在触摸屏上连续滑过;木铎校园 BBS 社区2o~Q*rl,w]i
*触摸笔在触摸屏上有大幅度的跳跃。木铎校园 BBS 社区 ~Fb/|\%rH
假设三次连续采样时刻为T1、T2、T3(T3>T2>T1),采样间隔为10ms。由于采样间隔远小于人的反应时间,所以在前两种操作模式下,如果采样点有效,将T1和T3时刻的采样值作平均。其平均值和T2时刻的采样值比较一般不会大于某个门限,否则判定此次采样点为野点。而对于第三种模式下,采样点数据会有很大的跳变。跳变过程中的数据是不稳定的,虽然记入了数据,但被判定成无效的采样点,所以需要在程序中定义一个静态数组x[2]记录相邻的两次采样数据。只有当前后数据持续稳定一段时间,才认为这时的采样点有效。程序中使用的间隔门限FILTER_LIMIT是需要经过试验来选取的。这里只给出X坐标的滤波过程。
N ``%gM0//*px为T3时刻的采样值,count是记录连续有效采样点次数的静态变量,标志当前数据持续稳定时间,一旦发现大于//FILTER_LIMIT,count的值又要从0开始计数。木铎校园 BBS 社区2Ool8d @+^$T^ eg
Int Touch_Pen_filtering(int *px){
