《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 通過(guò)ADS7846在PDA上實(shí)現(xiàn)個(gè)性化書(shū)法輸入

通過(guò)ADS7846在PDA上實(shí)現(xiàn)個(gè)性化書(shū)法輸入

2008-09-05
作者:倪天龍1,, 鄧洪波2,, 金連文2

  摘 要: 目前,在嵌入式系統(tǒng)中通過(guò)觸摸屏寫(xiě)出的文字,筆劃粗細(xì)都是相同的,,字跡顯得僵硬,,不如毛筆字或鋼筆字瀟灑大方且風(fēng)格多樣,。提出了一種適用于PDA及其它嵌入式設(shè)備的低成本、高速度,、簡(jiǎn)單可行的解決方法,使得在觸摸屏上書(shū)寫(xiě)時(shí),,LCD屏上能顯現(xiàn)出如同毛筆字或鋼筆字的傳統(tǒng)書(shū)法特色的文字,筆劃粗細(xì)疏密有致,,字跡親切自然,,同時(shí)也能顯現(xiàn)出書(shū)寫(xiě)人筆跡的個(gè)性風(fēng)格。
  關(guān)鍵詞: ADS7846 書(shū)法 MC9328MX1 PDA 嵌入式系統(tǒng)


  書(shū)法藝術(shù)是中國(guó)傳統(tǒng)文化的瑰寶,。如果用筆尖或指尖在觸摸屏上揮灑自如寫(xiě)字,,LCD上能顯示出猶如用毛筆或鋼筆書(shū)寫(xiě)時(shí)的書(shū)法效果,并能顯現(xiàn)出書(shū)寫(xiě)人獨(dú)特個(gè)性的雋秀筆跡,,那么就會(huì)使人體會(huì)到淋漓盡致的書(shū)法藝術(shù),。但現(xiàn)有的PDA(Personal Digital Assistant)通過(guò)觸摸屏畫(huà)出線條,顯示屏上顯示出的線條粗細(xì)都是相同的,,無(wú)法寫(xiě)出筆劃粗細(xì)相間的文字,,也就無(wú)法模擬出毛筆或鋼筆書(shū)寫(xiě)時(shí)筆鋒的效果。為彌補(bǔ)以上不足,,筆者采用能采樣觸點(diǎn)壓力的ADS7846觸摸屏控制器" title="觸摸屏控制器">觸摸屏控制器[1],,編寫(xiě)了采樣觸點(diǎn)坐標(biāo)值和壓力值的驅(qū)動(dòng)程序,,實(shí)現(xiàn)了通過(guò)觸摸屏輸入,在液晶顯示器上顯示書(shū)法出良好的效果,。就象手中拿著毛筆或鋼筆在觸摸屏上寫(xiě)字一樣,,無(wú)論是行書(shū)、草書(shū),、隸書(shū)還是楷書(shū),,都能顯示出令人滿意的效果,并且完全保留了書(shū)寫(xiě)人的字跡特點(diǎn),。
1 ADS7846觸摸屏控制器原理和功能概述
  基于四線電阻式觸摸屏的輸入系統(tǒng)由觸摸屏,、觸摸屏控制器、微控制器" title="微控制器">微控制器及其相應(yīng)軟件構(gòu)成,。其中,,觸摸屏控制器相當(dāng)于觸摸屏與微控制器之間的接口。觸摸屏體是一個(gè)四層的復(fù)合薄膜,,附著在顯示器表面與顯示器配合使用,。復(fù)合薄膜的最下層是玻璃基層,最上層是光滑防刮的塑料層,,中間為兩層透明導(dǎo)電涂層,。每一導(dǎo)電層為觸摸屏的一個(gè)工作面,每個(gè)工作面的兩端各涂有一條銀膠,,稱(chēng)為該工作面的一對(duì)電極,,分別稱(chēng)為X“電極對(duì)”和Y“電極對(duì)”。當(dāng)觸摸屏控制器在X“電極對(duì)”上施加一確定的電壓,,而Y“電極對(duì)”上不加電壓時(shí),,X“電極對(duì)”所在的工作面上就會(huì)形成均勻連續(xù)的平行電場(chǎng)。當(dāng)用手指觸及觸摸屏表面時(shí),,觸點(diǎn)處的電壓反映了觸點(diǎn)在X 工作面上的位置,,將該電壓通過(guò)Y+( 或Y-)電極引到觸摸屏控制器,并經(jīng)過(guò)A/D" title="A/D">A/D 轉(zhuǎn)換,,便可得到觸點(diǎn)電壓的數(shù)字量" title="數(shù)字量">數(shù)字量,即X坐標(biāo),。同理,,在Y“電極對(duì)”上施加電壓,以X+(或X-)電極為測(cè)量電極,,便可測(cè)得Y坐標(biāo),。微控制器根據(jù)觸點(diǎn)坐標(biāo)位置以及對(duì)應(yīng)坐標(biāo)位置上顯示的內(nèi)容,便可得知觸摸者的意圖,。
  ADS7846是Burr-Brown公司生產(chǎn)的一種四線式觸摸屏控制器,,在與觸摸屏連用時(shí),,一旦筆尖或指尖點(diǎn)觸在觸摸屏上,便可迅速得到該點(diǎn)的位置信號(hào),,從而達(dá)到在觸摸屏表面尋址的目的,。ADS7846是典型的逐步逼近寄存器型A/D變換器,包含了取樣/保持功能,。ADS7846與其前代產(chǎn)品ADS7843相比,,增加了片內(nèi)溫度測(cè)量、觸摸壓力測(cè)量" title="壓力測(cè)量">壓力測(cè)量,、外模擬量測(cè)量和電池電壓測(cè)量四個(gè)功能,。
  ADS7846的核心部件是一個(gè)具有采樣和保持功能的12位逐次逼近式A/D轉(zhuǎn)換器。內(nèi)部的六選一模擬多路開(kāi)關(guān)根據(jù)微控制器送來(lái)的命令字選擇六個(gè)模擬量:X+,、Y+,、Y-、VBAT(電池電壓),、TEMP(溫度)和AUXIN(外模擬量)之一送入A/D轉(zhuǎn)換器,,轉(zhuǎn)換后通過(guò)SPI接口將數(shù)字量送入微控制器。ADS7846 還設(shè)置有觸摸識(shí)別電路,,當(dāng)檢測(cè)到有觸摸時(shí),,該電路輸出一個(gè)低電平信號(hào),稱(chēng)為PENIRQ#(筆中斷),,ADS7846以這個(gè)信號(hào)向微控制器提出測(cè)量觸點(diǎn)坐標(biāo)的中斷請(qǐng)求,。觸點(diǎn)坐標(biāo)的公式如下:
  
  式中,X和Y分別為觸點(diǎn)在X工作面和Y工作面上產(chǎn)生的電壓的數(shù)字量的測(cè)量值,,可通過(guò)采樣得到,;(X,Y)反映了觸點(diǎn)在觸摸屏上的坐標(biāo),;XMIX,、YMIN、XMAX和YMAX分別為觸摸屏上最小和最大坐標(biāo)點(diǎn)在X工作面和Y工作面上產(chǎn)生的電壓的數(shù)字量的實(shí)際測(cè)量值, 它們是常量,可通過(guò)測(cè)量得到,;(XMIN,YMIN)和(XMAX,YMAX)反映了觸摸屏上最小,、最大坐標(biāo)點(diǎn)的坐標(biāo);w和H分別是LCD顯示屏X軸和Y軸上的象素點(diǎn)總數(shù),;(X1,,Y1) 為觸點(diǎn)映射到LCD顯示屏上的像素點(diǎn)坐標(biāo)。
  觸摸壓力測(cè)量是指對(duì)指尖或筆尖觸及觸摸屏?xí)r產(chǎn)生的壓力值進(jìn)行測(cè)量,。觸摸壓力不是直接測(cè)出來(lái)的,,而是轉(zhuǎn)換為測(cè)量觸點(diǎn)處X工作面和Y工作面之間的接觸電阻的大小來(lái)完成的。Rtouch的公式如下:
  
  式中,,Rtouch表示接觸電阻,;Rx是X+與X-兩電極間的總電阻,;Z1和Z2是觸摸屏的內(nèi)部參數(shù),反映觸點(diǎn)與X工作面和Y工作面間的關(guān)系,。Z1和Z2兩個(gè)參數(shù)及X的值可通過(guò)ADS7846提供的指令采樣得到,。而Rx并不需要去測(cè)量,因?yàn)楦鱾€(gè)觸摸屏的這個(gè)參數(shù)并不一樣,,但在同一個(gè)觸摸屏上它卻是個(gè)定值,,每個(gè)點(diǎn)的Rtouch都要乘以這個(gè)定值Rx,所以這個(gè)參數(shù)可以不考慮,。所得到的Rtouch值的大小反應(yīng)了測(cè)量觸點(diǎn)壓力的大小,。Rtouch越大,壓力越小,,可以通過(guò)實(shí)驗(yàn)測(cè)出不同壓力的Rtouch值,。如果發(fā)現(xiàn)壓力值分布范圍太寬,可以給Rtouch除以一個(gè)合適的參數(shù),;如果發(fā)現(xiàn)壓力值分布太窄,,可以給Rtouch乘以一個(gè)合適的參數(shù)。筆者針對(duì)自己的觸摸屏,,通過(guò)試驗(yàn)發(fā)現(xiàn)用
  
  比較合適,,不同的壓力與Rtouch的比值分布在80~170之間,這樣就有足夠的間隔來(lái)把壓力劃分為不同的等級(jí),。
2 設(shè)計(jì)原理與具體實(shí)現(xiàn)
2.1 設(shè)計(jì)思路

  微處理器首先利用SPI總線通過(guò)ADS7846采樣到筆尖在觸摸屏上的觸點(diǎn)坐標(biāo)值及Z1值和Z2值,;然后通過(guò)式(1)和式(2)計(jì)算出映射到LCD屏上的坐標(biāo)值,用式(4)計(jì)算出Rtouch值,;再利用GUI提供的API函數(shù)在LCD上畫(huà)一條線段把前一個(gè)觸點(diǎn)和當(dāng)前觸點(diǎn)連起來(lái),;最后在這條線段的兩邊擴(kuò)展平行線,平行線的數(shù)量越多,,這條線段越粗,。平行線的數(shù)量由當(dāng)前觸點(diǎn)Rtouch的大小決定,即壓力越大,,線段越粗,。這樣就模擬出了用毛筆或鋼筆書(shū)寫(xiě)時(shí)筆鋒游轉(zhuǎn)的效果。
2.2 電路設(shè)計(jì)
  筆者以MOTOROLA公司的DRAGONBALL(龍珠)系列MC9328MX1(ARM920T)作為硬件平臺(tái)[2],,利用MC9328MX1提供的SPI總線對(duì)ADS7846進(jìn)行控制和數(shù)據(jù)傳輸,。接口示意圖如圖1所示。


  由圖1可以看出,,ADS7846與其前代產(chǎn)品ADS7843的接口電路完全相同。如果需要在原來(lái)使用ADS7843的設(shè)備上增加片內(nèi)溫度測(cè)量,、觸摸壓力測(cè)量,、外模擬量測(cè)量和電池電壓測(cè)量四個(gè)功能,,只需將板上的ADS7843替換為ADS7846,然后改寫(xiě)驅(qū)動(dòng)程序即可,。因?yàn)锳DS7846與ADS7843的引腳封裝完全一致,,所以不用改動(dòng)電路,這使更換工作非常方便,。
2.3 驅(qū)動(dòng)程序
  在應(yīng)用中,,采用差動(dòng)參考電壓方式測(cè)量坐標(biāo)模擬量,測(cè)量命令字的設(shè)置和模擬量選擇參見(jiàn)表1 和表2,。


  有關(guān)ADS7843驅(qū)動(dòng)程序的資料很多,,源代碼也能很容易地找到。具有觸摸壓力測(cè)量功能的ADS7846的驅(qū)動(dòng)程序,,只需在原ADS7843驅(qū)動(dòng)程序的合適位置加入采樣Z1參數(shù)和Z2參數(shù)的代碼就行了[4],。這部分的代碼很簡(jiǎn)單,添加也很容易,。筆者在MC9328MX1上實(shí)現(xiàn)的源代碼如下:
  spi_tx_data(0xB0); //輸入采樣Z1值的命令//
  z1_upper = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  z1_upper = REG_SPI_RXDATA;
  spi_tx_data(0xc0); //輸入采樣Z2值的命令//
  z1_lower = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  z2_upper = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  z2_lower = REG_SPI_RXDATA;
  spi_tx_data(0xD0); //輸入采樣Y值的命令//
  x_upper = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  x_upper = REG_SPI_RXDATA;
  spi_tx_data(0x90); //輸入采樣X(jué)值的命令//
  x_lower = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  y_upper = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  y_lower = REG_SPI_RXDATA;
  然后,,計(jì)算出X,Y,,Z1和Z2的值:
  X=(((x_upper<<5) & 0xFE0) | ((x_lower>>3) & 0x1F));
  Y=(((y_upper<<5) & 0xFE0) | ((y_lower>>3) & 0x1F));
  Z1=(((z1_upper<<5) & 0xFE0) | ((z1_lower>>3) & 0x1F));
  Z2=(((z2_upper<<5) & 0xFE0) | ((z2_lower>>3) & 0x1F));
  此外,,還應(yīng)注意觸摸抖動(dòng)和連擊問(wèn)題??梢圆捎醚舆t測(cè)量法來(lái)解決,,即在接收到觸摸屏筆中斷時(shí)延遲一段時(shí)間(抖動(dòng)延時(shí)30ms)后再測(cè)量,可消除抖動(dòng),;測(cè)量完后再次延遲一段時(shí)間(連擊延時(shí)300ms)后打開(kāi)筆中斷,,可避免連擊現(xiàn)象的出現(xiàn)。驅(qū)動(dòng)程序主要包括初始化SPI寄存器,、可編程定時(shí)器中斷和筆中斷,。在筆中斷中主要完成關(guān)筆中斷、設(shè)置筆中斷標(biāo)志和將定時(shí)計(jì)數(shù)值設(shè)置為抖動(dòng)延時(shí),,在定時(shí)器中斷程序中主要實(shí)現(xiàn)坐標(biāo)值的測(cè)量,、延時(shí)功能。
2.4 應(yīng)用程序
  一塊觸摸屏中并不一定每個(gè)點(diǎn)對(duì)壓力的感應(yīng)都很準(zhǔn)確,。另外筆尖在觸摸屏上書(shū)寫(xiě)時(shí),,也會(huì)有抖動(dòng)和干擾。這就造成了用同樣的力在觸摸屏上畫(huà)一條線,,顯現(xiàn)時(shí)可能出現(xiàn)粗細(xì)不一樣的現(xiàn)象,。針對(duì)這個(gè)現(xiàn)象,在應(yīng)用程序中適當(dāng)做一些平滑處理,。筆者采用算術(shù)平均法來(lái)平滑曲線,,即如果發(fā)現(xiàn)采樣點(diǎn)的壓力值比前一個(gè)點(diǎn)大或小很多,,則對(duì)該點(diǎn)和剛剛輸入的前幾個(gè)點(diǎn)壓力值做算術(shù)平均,得到的值作為該點(diǎn)正確的壓力值,。但要注意,,用來(lái)做平均的點(diǎn)不能取得太少,否則平滑作用不明顯,;也不能取得太多,,否則線條粗細(xì)變化太慢,模擬不出書(shū)法效果,。通過(guò)實(shí)驗(yàn),,發(fā)現(xiàn)取前三個(gè)點(diǎn)比較合適。做算術(shù)平均的源程序如下:
  if(pressure-oldpressure1>50|| oldpressure1-pressure >50)  //如果發(fā)現(xiàn)觸點(diǎn)的采樣壓力值比前一個(gè)點(diǎn)大或小很多//
  pressure= (pressure+ oldpressure1+ oldpressure2+ oldpressure3)>>2,;   //則對(duì)該點(diǎn)和前三個(gè)觸點(diǎn)的壓力值做算術(shù)平均,,并把結(jié)果作為該點(diǎn)正確的壓力值//
3 實(shí)驗(yàn)結(jié)果
  經(jīng)過(guò)實(shí)驗(yàn),在LCD上顯示出的結(jié)果如圖2所示,。


  圖2(a)為使用ADS7843,,未采樣觸點(diǎn)壓力值在LCD上的顯示效果;圖2(b)為使用ADS7846,,采樣觸點(diǎn)壓力值后,,根據(jù)壓力大小在LCD上顯示出不同粗細(xì)曲線的效果。
  如果使用多灰度級(jí)的LCD顯示屏,,還可以利用觸點(diǎn)的壓力大小(Rtouch)和筆尖在屏上接觸的時(shí)間這兩個(gè)參數(shù),,使畫(huà)出曲線的顏色呈現(xiàn)出不同深淺。即觸點(diǎn)的壓力越大,、筆尖在屏上相關(guān)區(qū)域接觸的時(shí)間越長(zhǎng),,這個(gè)區(qū)域顯現(xiàn)的顏色就越深。具體調(diào)節(jié)公式如下:
  
  式中,graylever為L(zhǎng)CD上該點(diǎn)將要顯現(xiàn)出的灰度值,,(X,,Y)為該點(diǎn)坐標(biāo),(Xoldtime,,Yoldtime)為同一筆劃中一定時(shí)間間隔前觸點(diǎn)的坐標(biāo),。筆者在開(kāi)發(fā)過(guò)程中,取時(shí)間間隔為100ms,。A和B都是用來(lái)調(diào)整graylever變化范圍的常量,,可以通過(guò)實(shí)驗(yàn)根據(jù)具體情況設(shè)定。
  這樣,,用指尖在觸摸屏上作畫(huà)時(shí),,LCD上也會(huì)顯現(xiàn)出素描和國(guó)畫(huà)的效果。
  如果使用彩色LCD,可以結(jié)合GUI在LCD上創(chuàng)建一個(gè)供用戶選擇不同色彩的窗口,,用戶就可以挑選合適的顏色在觸摸屏上畫(huà)圖,,顯示屏上也將會(huì)呈現(xiàn)色彩繽紛的作品,。因此,,本文介紹的方法將會(huì)為PDA及相關(guān)行業(yè)開(kāi)拓出全新的功能,帶來(lái)更加明媚的春天,。
  本文提出的方法已在MOTOROLA公司的DRAGONBALL(龍珠)系列MX1(ARM920T)上實(shí)現(xiàn),。該設(shè)計(jì)使得在PDA的觸摸屏上寫(xiě)字時(shí),能顯示出毛筆或鋼筆寫(xiě)出的書(shū)法效果,,同時(shí)也顯現(xiàn)出了書(shū)寫(xiě)人筆跡的個(gè)性風(fēng)格,,并具有反應(yīng)速度快、實(shí)現(xiàn)成本低,、程序編寫(xiě)特別簡(jiǎn)單等突出特點(diǎn),。相信此方法將會(huì)在嵌入式領(lǐng)域中得到廣泛的應(yīng)用。
參考文獻(xiàn)
1 王 暉,馬鳴錦.基于觸摸屏控制器ADS7846的觸點(diǎn)坐標(biāo)和壓力的測(cè)量與計(jì)算.電子設(shè)計(jì)與應(yīng)用,2003,;(9):78~81
2 王祖林.新一代嵌入式微處理器龍珠i.MX結(jié)構(gòu)及應(yīng)用基礎(chǔ).北京:北京航空航天大學(xué)出版社,2004
3 劉燕英. 嵌入式Linux的實(shí)現(xiàn)及應(yīng)用. 2001嵌入式系統(tǒng)及單片機(jī)國(guó)際學(xué)術(shù)流會(huì)論文集(沈緒榜主編).北京:航空航天大學(xué)出版社,2001:230~233
4 ALESSANDRO RUBINI等著,,魏永明等譯.LINUX設(shè)備驅(qū)動(dòng)程序. 北京:中國(guó)電力出版社, 2002:65~110

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。