网站导航: 首页 > 设计参考 > 正文 文章搜索
S3C2410上触摸屏的应用实例
 
文章编号:
090104165251
文章分类: 单片机 ARM
点 击:
...
关 键 词: S3C2410,触摸屏,滤波
文章来源:
网络
摘 要:
给出S3C2410上触摸屏的实现原理、硬件结构和软件程序;对软件进行优化,改进软件滤波的实现方法。其算法使用C语言实现,可移植到任何操作系统的触摸屏驱动程序中

引言

随着个人数字助理(PDA)、瘦容户机等的普及,触摸屏作为终端与用户交互的媒介,在我们的生活中使用得越来普遍。触摸屏分为电阻式、电容式、声表面波式和红外线扫描式等类型,使用得最多的是4线电阻式触摸屏。

本文以三星公司ARM9内核芯片S3C2410触摸屏接口为基础,通过外接4线电阻式触摸屏构成硬件基础。在此基础上,开发了触摸屏面图板程序。

1 触摸屏原理
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坐标点采集。

2 S3C2410触摸屏控制器

S3C2410触摸屏控制器有2种处理模式:

①X/Y位置分别转换模式。触摸屏控制器包括两个控制阶段,X坐标转换阶段和Y坐标转换阶段。

②X/Y位置自动转换模式。触摸屏控制器将自动转换X和Y坐标。

本文使用X/Y位置自动转换模式。

3 S3C2410触摸屏编程

由于触摸屏程序中参数的选取优化需要多次试验,而加入操作系统试验参数,每次编译下载耗费时间过多,不易于试验的进行,因而我们直接编写裸机触摸屏程序。三星公司开放了S3C2410测试程序2410test (可在三星网站下载),提供了触摸屏接口自动转换模式的程序范例ts_auto.c,见本刊网站www.dpj.com.cn。本文在此范例的基础上编写了触摸屏画图板程序——在显示屏上画出触摸笔的流走痕迹。

针对坐标点采样时产生的噪声,本文采用噪声滤波算法,编写了相应的噪声滤波程序,滤除干扰采样点。整个触摸屏画图板程序的处理流程如图3所示。

3.1 程序初始化

初始化触摸屏控制器为自动转换模式。其中寄存器 ADCDLY的值需要根据具体的试验选取,可运行本文提供的程序看画线的效果来选取具体的参数。触摸屏中断处理程序Adc_or_TsAuto是判断触摸屏是否被按下了。触摸屏被按下,给全局变量 Flag_Touch赋值为Touch_Down,否则赋值为Touch_Up。

    初始化脉宽调制计时器(PWM TIMER),选择计时器4为时钟,定义10ms中断1次,提供触摸屏采样时间基准,即10ms触摸屏采样1次。计数器中断处理程序Timer4Intr 中判断Flag_Touch被赋值为Touch_Down,则给全局变量gTouchStartSample置位,以控制触摸屏采样。

之后清除触摸屏中断和计时器中断屏蔽位,接受中断响应,同时计时器开始计时。

3.2 触摸屏采样程序

如果gTouchStartSample为TRUE,触摸屏接口开始对坐标X和Y的模拟量进行采样,根据试验选取适合的的采集次数。本文中使用9次采集,分别记入到ptx[TouchSample]和pty [TouchSample]数组中, TouchSample为采集次数。

为了减少运算量,将ptx[]和pty[]分别分三组取平均值,存储在px[3]和py[3]中。这里以处理X坐标为例:

 
  1. px[0]=(ptx[0]+ptx[1]+ptx[2])/3;   
  2.   
  3. px[1]=(ptx[3]+ptx[4]+ptx[5])/3;   
  4.   
  5. px[2]=(ptx[6]+ptx[7]+ptx[8])/3;   

计算以上三组数据的差值:

 
  1. dlXDiff0=px[0]-px[1];   
  2.   
  3. dlXDiff1=px[1]-px[2];   
  4.   
  5. dlXDiff2=px[2]-px[0];   

然后对上述差值取绝对值,所得结果简称绝对差值:

 
  1. dlXDiff0=dlXDiff0>0?dlXDiff0:-dlXDiff0;   
  2.   
  3. dlXDiff1=dlXDiff1>0?dlXDiff1:-dlXDiff1;   
  4.   
  5. dlXDiff2=dlXDiff2>0?dlXDiff2:-dlXDiff2;   

判断上述计算的色对差值是否都超过差值门限,如果这3个绝对差值都超过门限值,判定这次采样点为野点,抛弃采样点,程序返回等待下次采样。其中的差值门限需要根据试验测试得到,本文取值为2。

找出其中绝对差值最小的2组数据,再将它们作平均,同时赋值给tmx:

 
  1. if(dlXDiff0<dlXDiff1)   
  2. {   
  3.     if(dlXDiff2<dlXDiff0)   
  4.     {   
  5.     tmx=((px[0]+px[2]>>1);   
  6.     }   
  7.     else  
  8.     {   
  9.         tmx=((px[0]+px[1])>>1);   
  10.     }   
  11. }   
  12. else if(dlXDiff2<dlXDiff1)   
  13. {   
  14.     tmx=((px[0]+px[2])>>1);   
  15. }   
  16.   
  17. else  
  18. {   
  19.     tmx=((px[1]+px[2])>>1);   
  20. }  


  点击查看大图

    函数Touch_Coordinate Conversion完成触摸屏采样值转换成显示坐标,根据不同的硬件有不同的转换方法。本触摸屏采样坐标及显示坐标如图4、图5所示。其中 TOUCH_MAX_X和TOUCH_MIN_X是触摸屏X坐标采样值的最大和最小值;Y坐标同理。可以运行本文程序,同时使用触摸笔在触摸屏的4个角取得最大最小采样值。这里使用的是320×240的TFT屏,所以TOUCH_X值为320。下面是X坐标的转换程序:

 
  1. Touch_CoordinateConversio(int*px)   
  2. {   
  3.     TmpX=(tmx>=TOUCH_MAX_X)?(TOUCH_MAX_X):*px;   
  4.     TmpX-=TOUCH_MIN_X;   
  5.     TmpX=(TmpX)?TmpX:0;   
  6.     *px=(TmpX*TOUCH_X)/(TOUCH_MAX_X-TOUCH_MIN_X);   
  7. }  

3.3 坐标滤波程序

坐标滤波程序Touch_Pen_filtering,考虑人机界面中对触摸屏的操作有3种:

*触摸笔在触摸屏上的位置不变;

*触摸笔在触摸屏上连续滑过;

*触摸笔在触摸屏上有大幅度的跳跃。

假设三次连续采样时刻为T1、T2、T3(T3> T2>T1),采样间隔为 10ms。由于采样间隔远小于人的反应时间,所以在前两种操作模式下,如果采样点有效,将T1和T3时刻的采样值作平均。其平均值和T2时刻的采样值比较一般不会大于某个门限,否则判定此次采样点为野点。而对于第三种模式下,采样点数据会有很大的跳变。跳变过程中的数据是不稳定的,虽然记入了数据,但被判定成无效的采样点,所以需要在程序中定义一个静态数组x[2]记录相邻的两次采样数据。只有当前后数据持续稳定一段时间,才认为这时的采样点有效。程序中使用的间隔门限FILTER_LIMIT是需要经过试验来选取的。这里只给出X坐标的滤波过程。

 
  1. //*px为T3时刻的采样值,count是记录连续有效采样点次数的静态变量,标志当前数据持续稳定时间,一旦发现大于//FILTER_LIMIT,count的值又要从0开始计数。   
  2.   
  3. Int Touch_Pen_filtering(int *px)      
  4. {      
  5.     BOOL retVal;      
  6.        
  7.     Static int count=0;      
  8.        
  9.     count++;      
  10.        
  11.     //如果连续有效采样点次数大于2次,开始进行滤波算法      
  12.        
  13.     if(count>2)      
  14.     {      
  15.            
  16.         count=2;      
  17.            
  18.         //将T3时刻采样值和T1时刻采样值作平均      
  19.            
  20.         TmpX=(x[0]+*px)/2;      
  21.            
  22.         //计算平均值和T2时刻采样值的差值      
  23.            
  24.         dx=(x[1]>TmpX)?(x[1]-TmpX):(TmpX-x[1]);      
  25.            
  26.            
  27.         //如果差值大于门限值,说明T3的采样值无效,判为野点返回值为FALSE。为了避免过大的跳跃,认为触摸笔坐标沿变,使用T2时刻采样值来代替本次采样点,同时静态变量x[]中的数据不变,count重新开始记录连续有效采样点次数   
  28.            
  29.         if((dx>FIL TER_LIMIT))   
  30.         {   
  31.                
  32.             *px=x[1];   
  33.                
  34.             retVal=FLASE;   
  35.                
  36.             count=0;   
  37.                
  38.         }   
  39.            
  40.         //否则采样点有效返回值为TRUE,将T3的采样点记入到x[1]中,T2的采样点移到x[0]中   
  41.            
  42.         else    
  43.         {   
  44.                
  45.             x[0]=x[1];   
  46.                
  47.             x[1]=*px;   
  48.                
  49.             retVal=TRUE;   
  50.                
  51.         }   
  52.     }   
  53.        
  54.        
  55.     else  
  56.     {   
  57.            
  58.         //连续有效采样次数小于2,将T3的采样值记入到x[1],T2的采样值移动到x[0],并不进行滤波处理   
  59.            
  60.         x[0]=x[1];   
  61.            
  62.         x[1]=*px;   
  63.            
  64.         retVal=FLASE;   
  65.            
  66.     }   
  67.        
  68.     return retVal;   
  69.        
  70. }   
  71.   

3.4 后续处理

经过上述的筛选和滤波,如果被判定采样值有效,则将其滤波值送给操作系统进行后续处理,否则程序返回,等待下一次采样。在2410 test程序中,可以结合LCD的画点函数,将有效的采样点在LCD上画出,以此检验参数设置是否合理。

结语

本文以三星公司ARM9内核芯片S3C2410和4线电阻式触摸屏为硬件基础。基于此硬件结构,开发了触摸屏画图板程序。通过软件滤波,提高了系统性能,得到了很好的处理效果,有很强的实用性。用此算法实现的 Windows CE触摸屏驱动,在汉王手写输入软件的测试下得到了很高的识别率。软件使用C语言实现,可以方便地移植到任何操作系统上。

 
相关文章:
s3c2410 Timer工作原理[图]
虚拟SPI时序在TC77与S3C2410通信中的应用[图]
s3c2410 MMU(存储器管理单元)讲解[图]
s3c2410 CACHES,WRITE BUFFER讲解[图]
S3C2410中的脉宽调制定时器(PWM)
S3C2410 中断程序的实现
s3c2410 watchdog详解
s3c2410 中断异常处理[图]
基于ARM9芯片S3C2410a的GPRS数据终端设计
ARM系统中DMA方式在数据采集中的应用[图]
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现[图]
基于s3c2410的ARMer9开发平台的使用
ARM S3C2410硬件手册重点
基于ARM S3C2410与TMS320C6416的接口设计[图]
S3C2410上Jffs2的移植
ARM S3C2410驱动TFT-LCD的研究[图]
MINIGUI在S3C2410开发板的移植
mplayer在S3C2410上的移植
在S3C2410上移植yaffs2文件系统
S3C2410 bootloader(vivi)阅读笔记
s3c2410 LCD图片显示
S3C2410 LCD 驱动程序移植及GUI程序编写[图]
S3C2410X开发总结及心得
U-Boot在S3C2410开发板上的移植
S3C2410初始化
S3C2410通过IIS总线与音频芯片UDA1380进行通信
在S3C2410上移植bluetooth(蓝牙)
S3c2410软件调试总结
S3c2410的触摸屏及模数转换
S3C2410的快速启动技术
基于嵌入式linux和s3c2410平台的视频采集
S3c2410 LCD驱动学习心得
s3c2410移植MPlayer到linux2.6

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4