历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2021年02月03日 | S3C2410上触摸屏的应用实例

2021-02-03 来源:eefocus

引言


随着个人数字助理(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, 本文在此范例的基础上编写了触摸屏画图板程序——在显示屏上画出触摸笔的流走痕迹。


针对坐标点采样时产生的噪声,本文采用噪声滤波算法,编写了相应的噪声滤波程序,滤除干扰采样点。整个触摸屏画图板程序的处理流程如图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坐标为例:


px[0]=(ptx[0]+ptx[1]+ptx[2])/3;


px[1]=(ptx[3]+ptx[4]+ptx[5])/3;


px[2]=(ptx[6]+ptx[7]+ptx[8])/3;


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


dlXDiff0=px[0]-px[1];


dlXDiff1=px[1]-px[2];


dlXDiff2=px[2]-px[0];


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


dlXDiff0=dlXDiff0>0?dlXDiff0:-dlXDiff0;


dlXDiff1=dlXDiff1>0?dlXDiff1:-dlXDiff1;


dlXDiff2=dlXDiff2>0?dlXDiff2:-dlXDiff2;


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


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


if(dlXDiff0

if(dlXDiff2

tmx=((px[0]+px[2]>>1);


}


else{


tmx=((px[0]+px[1])>>1);


}


}


else if(dlXDiff2

tmx=((px[0]+px[2])>>1);


}


else{


tmx=((px[1]+px[2])>>1);


}




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


Touch_CoordinateConversio(int*px){


TmpX=(tmx>=TOUCH_MAX_X)?(TOUCH_MAX_X):*px;


TmpX-=TOUCH_MIN_X;


TmpX=(TmpX)?TmpX:0;


*px=(TmpX*TOUCH_X)/(TOUCH_MAX_X-TOUCH_MIN_X);


}


3.3 坐标滤波程序


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


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


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


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


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


//*px为T3时刻的采样值,count是记录连续有效采样点次数的静态变量,标志当前数据持续稳定时间,一旦发现大于//FILTER_LIMIT,count的值又要从0开始计数。


Int Touch_Pen_filtering(int *px){


BOOL retVal;


Static int count=0;


count++;


//如果连续有效采样点次数大于2次,开始进行滤波算法


if(count>2){


count=2;


//将T3时刻采样值和T1时刻采样值作平均


TmpX=(x[0]+*px)/2;


//计算平均值和T2时刻采样值的差值


dx=(x[1]>TmpX)?(x[1]-TmpX):(TmpX-x[1]);


//如果差值大于门限值,说明T3的采样值无效,判为野点返回值为FALSE。为了避免过大的跳跃,认为触摸笔坐标沿变,使用T2时刻采样值来代替本次采样点,同时静态变量x[]中的数据不变,count重新开始记录连续有效采样点次数


if((dx>FIL TER_LIMIT)){


*px=x[1];


retVal=FLASE;


count=0;


}


//否则采样点有效返回值为TRUE,将T3的采样点记入到x[1]中,T2的采样点移到x[0]中


else{


x[0]=x[1];


x[1]=*px;


retVal=TRUE;


}


}


else{


//连续有效采样次数小于2,将T3的采样值记入到x[1],T2的采样值移动到x[0],并不进行滤波处理


x[0]=x[1];


x[1]=*px;


retVal=FLASE;


}


return retVal;


}


3.4 后续处理


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


结语


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


推荐阅读

史海拾趣

Computer Conversions Corp公司的发展小趣事

随着公司技术的成熟和知名度的提升,Computer Conversions Corp开始将目光投向国际市场。公司派出专业的市场拓展团队,深入欧洲、亚洲等多个地区进行市场调研。经过一系列精准的市场分析和产品定位,公司成功地将产品推向了全球市场。这一过程中,他们不仅赢得了众多国际客户的信赖,还通过与当地企业的合作,进一步提升了品牌的影响力和市场份额。

AXTAL公司的发展小趣事

近年来,电子行业面临着诸多市场挑战与机遇。在这场全球供应链的博弈中,AXTAL公司展现出了敏锐的市场洞察力和应变能力。面对中国发布的镓锗禁令,AXTAL巧妙地抓住了第一个漏洞,通过在中国设立的子公司申请出口镓锗的许可证,成功绕过了禁令的限制。这一睿智之举不仅为公司打开了新的市场窗口,也彰显了公司在应对市场挑战时的灵活性和创造力。

Artaflex公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈。为了保持领先地位,Artaflex公司积极寻求与其他企业的技术合作。通过与一家知名半导体公司的合作,双方共同研发了一款新型芯片,不仅提升了产品的性能,还降低了生产成本。这一合作不仅增强了Artaflex的技术实力,也为其打开了更广阔的市场空间。

Analog Modules Inc公司的发展小趣事

创新是Artaflex公司持续发展的核心动力。公司不断投入研发资金,加强技术创新和新产品开发。通过不断推出具有创新性和竞争力的产品,公司不仅满足了市场的多样化需求,也赢得了客户的信任和好评。同时,公司还注重人才培养和团队建设,为公司的长期发展奠定了坚实的基础。

CONTRINEX公司的发展小趣事

除了上述重要事件外,Contrinex还一直致力于产品创新和技术研发。多年来,公司不断推出新型传感器产品,如防磁防焊型电感式传感器、扩展型纤细型安全光幕等,以满足不同客户的需求。同时,Contrinex还积极与OEM和系统集成商合作,共同开发定制化解决方案,为客户提供更加全面和专业的服务。

这些故事只是Contrinex在电子行业发展历程中的一部分。作为一个不断追求卓越和创新的企业,Contrinex将继续致力于为客户提供高品质、高精度的传感器产品和解决方案,推动电子行业的持续发展。

Austek Microsystems公司的发展小趣事

面对行业技术的快速迭代,Austek Microsystems始终保持敏锐的洞察力。公司不断投入研发资金,引进先进的生产设备和技术人才,进行技术升级和产品迭代。通过不断地优化产品性能、提升生产效率,Austek Microsystems逐渐在市场中树立起了技术领先的形象。

问答坊 | AI 解惑

请问怎样才能查看自己的芯币!

请问怎样才能查看自己的芯币!谢谢了!…

查看全部问答>

linux文件的权限,一看就懂

一、文件和目录权限概述    在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。    通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问;允许一个 ...…

查看全部问答>

监控屏幕出现彩色斑点,求解决方法?

15个左右摄像头,传输方式采用光纤加光端机,但3个左右的摄像机屏幕总是出现彩色斑点,过1天又自动消失,再过一段时间又自动出现,把光端机的接头拔下来再插上能好,但过一段时间又有了, 请大家帮忙分析一下。…

查看全部问答>

在PDA上开发指纹识别

要在一个现场办公的PDA上实现指纹识别功能 ,通过该功能确认使用人的信息。现在没有思路,不知道有谁做过类似的系统,给推荐一款PDA或其他相应的设备以及相关资料。…

查看全部问答>

电脑自动重启

我的电脑只要一编译Nios工程,电脑就要自动的重启 运行其他的程度都没有问题,到底是什么原因啊..... 急。。。。。。。。。。。。。。。。。。。…

查看全部问答>

USB加密狗破解

有个程序,安装后看目录内有portalk.dll,porttalk.sys两个文件,估计可能和USB加密狗相关,哪个高手能给俺破解了,价格面议。 请联系:xuchangwei@126.com 拜托了…

查看全部问答>

EMSTM32V1与计算机相连是UNKNOWNDEVICE

但还是可以烧程序?至于其他的KEIL的东西还没做小白鼠先在flash上面download了几个程序看看板子应该么问题。。。跑BKL么问题,LCD的广告也对。对于标题的问题怎么解决?更新usb的驱动?…

查看全部问答>

有没有研究过IAR中是如何下载bin文件到flash的?

有没有研究过IAR中是如何下载bin文件到flash的?比如我想支持一款通用的ARM7,用的是外挂flash,如何下载生成的代码到flash上去?给个方向指点下,谢谢…

查看全部问答>

郁闷,STM8中断都进不了

芯片选的是STM8S103F3 进不了TIMER2中断,串口中断可以进 但是一样的程序下到STM8S207又可以进TIMER2中断,郁闷了 下载 (102.7 KB) 2010-9-21 23:24 …

查看全部问答>

AD转换 模拟量

对某一模拟量进行AD转换,但实际值与理论值有偏差,且实际值在一定范围内变化,这是由于什么情况造成的呢,有没有办法将实际值稳定住…

查看全部问答>