關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于μClinux的觸摸屏軟硬件關(guān)鍵技術(shù)分析

基于μClinux的觸摸屏軟硬件關(guān)鍵技術(shù)分析

作者: 時(shí)間:2008-11-26 來源:網(wǎng)絡(luò) 收藏

  的中斷處理函數(shù)

  當(dāng)筆中斷發(fā)生,程序進(jìn)入中斷處理函數(shù)。在中斷處理函數(shù)中,將完成對(duì)兩個(gè)中斷進(jìn)行處理,分別是外部的觸摸中斷(筆中斷)和SPI數(shù)據(jù)轉(zhuǎn)換中斷。與這兩個(gè)中斷對(duì)應(yīng)的中斷處理函數(shù),是觸摸屏軟件設(shè)計(jì)的關(guān)鍵所在。

  在中斷處理函數(shù)中使用定時(shí)器處理時(shí)間相關(guān)操作。定義函數(shù)set_timer_irq(),如下:

  staticvoidset_timer_irq(structtimer_list*timer,intdelay){

  del_timer(timer);

  timer->expires=jiffies+delay;

  add_timer(timer);

  }

  jiffies是一個(gè)表征系統(tǒng)自從啟動(dòng)以來到當(dāng)前為止所運(yùn)行時(shí)鐘數(shù)的變量,delay是設(shè)定的延長(zhǎng)時(shí)間(用時(shí)鐘數(shù)作為計(jì)數(shù)單位)。一旦時(shí)鐘數(shù)超過設(shè)定值,則觸發(fā)超時(shí)函數(shù),在本程序中是handle_timeout( )。引入定時(shí)器的目的有兩個(gè):一是可以較為精確地控制系統(tǒng)由于消除電平升降造成信號(hào)抖動(dòng)所需要時(shí)間,二是能夠有效控制采樣坐標(biāo)的數(shù)量,而不必引入占用大量系統(tǒng)資源的簡(jiǎn)單延時(shí)函數(shù)。使用SPI中斷而產(chǎn)生大量坐標(biāo)數(shù)據(jù)這一問題在文獻(xiàn)中沒有很好的解決辦法,只是簡(jiǎn)單地降低SPI時(shí)鐘頻率以取較少的數(shù)據(jù)量。本設(shè)計(jì)中引入定時(shí)器,可以很好地解決上述問題。

  在handle_timeout()函數(shù)中,程序利用條件選擇語(yǔ)句,對(duì)觸摸屏(ts_drv_state)進(jìn)行判斷,如果是非Error狀態(tài),則使能SPI,進(jìn)入handle_spi_irq(),與ADS7843進(jìn)行數(shù)據(jù)通訊。在handle_spi_irq()中,程序利用條件選擇語(yǔ)句,根據(jù)觸摸屏(ts_drv_state)來進(jìn)行數(shù)據(jù)轉(zhuǎn)換操作,通過向觸摸屏控制芯片發(fā)送前文中提到的,來得到X和Y方向的坐標(biāo)。具體邏輯可參見程序流程圖。一旦一次轉(zhuǎn)換完成,程序?qū)⒏鶕?jù)點(diǎn)擊狀態(tài)信息(state_counter)來鑒別點(diǎn)擊的性質(zhì),在cause_event()函數(shù)中,分別對(duì)點(diǎn)擊和移動(dòng)做出了判斷。判定方法較為簡(jiǎn)單,只需將前后兩次采樣坐標(biāo)之差與移動(dòng)閾值比較即可得出結(jié)論。此外,還區(qū)分了信號(hào)誤差和由于筆移動(dòng)造成的坐標(biāo)改變,判別閾值可以由用戶自己設(shè)定。

  I/O控制

  對(duì)于硬件各個(gè)參數(shù),包括采樣時(shí)間、消除抖動(dòng)開關(guān)、消除抖動(dòng)時(shí)間,都可以通過I/O()在用戶程序里進(jìn)行設(shè)定,避免每次都直接改變,并重新編譯內(nèi)核所帶來的時(shí)間開銷。本程序中對(duì)I/O的定義是:staticintts_(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg);其中,參數(shù)cmd有兩個(gè)值,分別為:TS_PARAMS_GET和TS_PARAMS_SET,它們用來指出是獲取參數(shù)還是設(shè)定參數(shù)。用戶在調(diào)用這個(gè)函數(shù)的時(shí)候,只需要對(duì)這個(gè)參數(shù)按照事先約定的格式賦值,就可以方便地獲取或者改變觸摸屏當(dāng)前參數(shù),arg是指向所傳遞參數(shù)的指針。

  結(jié)論

  在獲得觸摸點(diǎn)的原始坐標(biāo)(數(shù)值范圍由所選用的A/D轉(zhuǎn)換器位數(shù)決定)后,還要根據(jù)具體使用的液晶屏實(shí)際像素進(jìn)行轉(zhuǎn)換,以方便圖形界面的后續(xù)開發(fā)??紤]到相鄰兩次的移動(dòng)閾值,按照如下公式對(duì)觸摸屏坐標(biāo)進(jìn)行計(jì)算:

  

  其中XV為觸摸點(diǎn)X坐標(biāo)顯示值,XW為觸摸點(diǎn)X坐標(biāo)測(cè)量值(原始坐標(biāo)值),(1)、(2)、(3)式在觸摸屏初始化時(shí)得到,方法是任取觸摸屏X方向左側(cè)和右側(cè)各一點(diǎn),以X△V=X△W=1,Xoffrer=0為初始值進(jìn)行測(cè)量得到新的3個(gè)參數(shù):X△V、X△W和Xoffrer(在實(shí)際使用中此項(xiàng)工作屬于校準(zhǔn)零點(diǎn)偏移),然后這3個(gè)參數(shù)就不再變動(dòng),對(duì)于每次測(cè)量到的任意觸摸點(diǎn)原始坐標(biāo)XW,直接代入(4)式求出觸摸點(diǎn)的像素顯示坐標(biāo)XV。 其中,XV1為觸摸屏左側(cè)點(diǎn)坐標(biāo)顯示值;XV2為觸摸屏右側(cè)點(diǎn)坐標(biāo)顯示值;XW1為觸摸屏左側(cè)點(diǎn)坐標(biāo)測(cè)量值;XW2為觸摸屏右側(cè)點(diǎn)坐標(biāo)測(cè)量值。

  本設(shè)計(jì)使用MicroWindows作為用戶界面,定制出每個(gè)桌面圖標(biāo)的坐標(biāo)區(qū)域,結(jié)合觸摸屏的采樣坐標(biāo),判斷是否在圖標(biāo)區(qū)域坐標(biāo)內(nèi),然后做出相應(yīng)的事件處理。對(duì)于本設(shè)計(jì)中使用的開發(fā)平臺(tái),液晶屏是320240點(diǎn)陣的,物理尺寸為: 80mm60mm,ADS7843選擇12位轉(zhuǎn)換精度,觸摸屏理論分辨率為80/212=0.020mm,但是由于電平干擾和觸摸動(dòng)作發(fā)生時(shí)的物理干擾,實(shí)際的精度無(wú)法達(dá)到這個(gè)值。經(jīng)過測(cè)試,在我們平臺(tái)上對(duì)同一點(diǎn)的點(diǎn)擊精度可以達(dá)到1.0mm。本驅(qū)動(dòng)程序可以有效地區(qū)分點(diǎn)擊和移動(dòng)信號(hào),如果配合手寫識(shí)別軟件,能夠作為手寫板的底層驅(qū)動(dòng)使用,實(shí)現(xiàn)手寫輸入。


上一頁(yè) 1 2 3 4 5 6 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉