摘要:給出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坐標為例:
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_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]); 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語言實現,可以方便地移植到任何操作系統上。 相關推薦
圖3
函數Touch_Coordinate Conversion完成觸摸屏采樣值轉換成顯示坐標,根據不同的硬件有不同的轉換方法。本觸摸屏采樣坐標及顯示坐標如圖4、圖5所示。其中TOUCH_MAX_X和TOUCH_MIN_X是觸摸屏X坐標采樣值的最大和最小值;Y坐標同理。可以運行本文程序,同時使用觸摸筆在觸摸屏的4個角取得最大最小采樣值。這里使用的是320×240的TFT屏,所以TOUCH_X值為320。下面是X坐標的轉換程序:
//如果差值大于門限值,說明T3的采樣值無效,判為野點返回值為FALSE。為了避免過大的跳躍,認為觸摸筆坐標沿變,使用T2時刻采樣值來代替本次采樣點,同時靜態變量x[]中的數據不變,count重新開始記錄連續有效采樣點次數
S3C2410在光電測量仿真檢測系統中的應用
S3C2410處理器與Nand flash 的問題
S3C2410微處理器與CS8900A開發應用實例
S3C2410的UART0總是漏數據,求助
s3c2410 datasheet 中文數據手冊
s3c2410協處理器指令的意思是什么?
觸摸屏有哪些類型?
觸摸屏沒有反應
觸摸屏鐘控cd機,觸摸屏壞了,如何繞過觸摸屏的開關來開機?
AD7888與S3C2410的SPI接口及Linux下嵌入式驅動的實現
ARM9 S3C2410 串口通信
ARM9芯片S3C2410怎么驅動VGA接口?
Linux 系統移植(七)- 添加觸摸屏驅動
[求助]關于ARM9 S3C2410和GPRS的疑問
altium designer 9 s3c2410 的引腳怎么少了那么多
emwin的例程為什么一會兒不動觸摸屏,再動觸摸屏就沒反應了的原因是什么?
mini2440觸摸屏驅動分析
為什么7寸電容觸摸屏應用在F4探索板時觸摸無效?
關于8寸觸摸屏的問題
關于s3c2410開發平臺 GPS模塊 無法獲取數據的問題
關于觸摸屏的接法
初學者學習arm 是學習s3c2410還是STM32好?各位高手給意見啊...
基于S3C2410的黃金礦工游戲的設計資料分享
基于ARM S3C2410處理器的PDA人機接口電路設計
基于ARM9 s3c2410的SD卡驅動它的傳輸速度如何測試呢
基于FPGA的電阻觸摸屏接口設計
基于嵌入式Linux與S3C2410平臺的視頻采集
如何使用Harmony和觸摸屏LCD
如何修改ucGUI例程才能支持觸摸屏呢?
如何利用S3C2410設計氫氣濃度監測系統?
定制觸摸屏的價格貴嗎?
小弟arm新人 老師期末作業s3c2410 求大神指導
怎樣測試基于ARM9 s3c2410的SD卡驅動傳輸速度呢
接線端子設計和觸摸屏安裝設計是什么
用uCGUI在觸摸屏上顯示一個對話框
窮根究底linux內核函數之s3c2410_gpio_cfgpin()
若讓S3C2410的H端口除GPH8-GPH10設置為輸出外,GPHCON=?
請問觸摸屏校準原理是什么?
請問為什么beaglebone black 上觸摸屏用不了?
調試觸摸屏時觸摸屏一直發01 03 FF FF FF FF 00 01 73 38硬件環境是:觸摸屏---MODBUS協議的單片機開發板,觸摸屏做主機
觸摸屏在S3C2410 上的應用實例
觸臻屏在S3C2410上的應用實例
基于S3C2410的RTC模塊應用設計
評論
查看更多