《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業(yè)界動態(tài) > 通過ADS7846在PDA上實現個性化書法輸入

通過ADS7846在PDA上實現個性化書法輸入

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

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


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

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


  由圖1可以看出,ADS7846與其前代產品ADS7843的接口電路完全相同。如果需要在原來使用ADS7843的設備上增加片內溫度測量、觸摸壓力測量、外模擬量測量和電池電壓測量四個功能,只需將板上的ADS7843替換為ADS7846,然后改寫驅動程序即可。因為ADS7846與ADS7843的引腳封裝完全一致,所以不用改動電路,這使更換工作非常方便。
2.3 驅動程序
  在應用中,采用差動參考電壓方式測量坐標模擬量,測量命令字的設置和模擬量選擇參見表1 和表2。


  有關ADS7843驅動程序的資料很多,源代碼也能很容易地找到。具有觸摸壓力測量功能的ADS7846的驅動程序,只需在原ADS7843驅動程序的合適位置加入采樣Z1參數和Z2參數的代碼就行了[4]。這部分的代碼很簡單,添加也很容易。筆者在MC9328MX1上實現的源代碼如下:
  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值的命令//
  x_lower = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  y_upper = REG_SPI_RXDATA;
  spi_tx_data(0x00);
  y_lower = REG_SPI_RXDATA;
  然后,計算出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));
  此外,還應注意觸摸抖動和連擊問題。可以采用延遲測量法來解決,即在接收到觸摸屏筆中斷時延遲一段時間(抖動延時30ms)后再測量,可消除抖動;測量完后再次延遲一段時間(連擊延時300ms)后打開筆中斷,可避免連擊現象的出現。驅動程序主要包括初始化SPI寄存器、可編程定時器中斷和筆中斷。在筆中斷中主要完成關筆中斷、設置筆中斷標志和將定時計數值設置為抖動延時,在定時器中斷程序中主要實現坐標值的測量、延時功能。
2.4 應用程序
  一塊觸摸屏中并不一定每個點對壓力的感應都很準確。另外筆尖在觸摸屏上書寫時,也會有抖動和干擾。這就造成了用同樣的力在觸摸屏上畫一條線,顯現時可能出現粗細不一樣的現象。針對這個現象,在應用程序中適當做一些平滑處理。筆者采用算術平均法來平滑曲線,即如果發(fā)現采樣點的壓力值比前一個點大或小很多,則對該點和剛剛輸入的前幾個點壓力值做算術平均,得到的值作為該點正確的壓力值。但要注意,用來做平均的點不能取得太少,否則平滑作用不明顯;也不能取得太多,否則線條粗細變化太慢,模擬不出書法效果。通過實驗,發(fā)現取前三個點比較合適。做算術平均的源程序如下:
  if(pressure-oldpressure1>50|| oldpressure1-pressure >50)  //如果發(fā)現觸點的采樣壓力值比前一個點大或小很多//
  pressure= (pressure+ oldpressure1+ oldpressure2+ oldpressure3)>>2;   //則對該點和前三個觸點的壓力值做算術平均,并把結果作為該點正確的壓力值//
3 實驗結果
  經過實驗,在LCD上顯示出的結果如圖2所示。


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

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。