1 引言
ADS7843是一種四線式觸摸屏控制器,目前較多應(yīng)用于電阻式觸摸屏輸入系統(tǒng)中,。盡管有很多相關(guān)的典型應(yīng)用和應(yīng)用注意事項(xiàng),但是在實(shí)際使用過程中仍然會遇到一些問題,。應(yīng)用在通用的單片機(jī)中所出現(xiàn)的問題及解決方法,已有一些介紹,。本文是對基于高速,、流水線結(jié)構(gòu)的 C8051的觸摸屏控制系統(tǒng)設(shè)計(jì)中所遇到的問題進(jìn)行分析處理,并給出了解決方法,。
2 液晶觸摸屏的系統(tǒng)設(shè)計(jì)
2.1 硬件組成
采用典型的四線電阻式觸摸屏,,其主要特點(diǎn)是精確度高,不受環(huán)境干擾,,適用于各種場合,。控制器為四線電阻式觸摸屏通用的 ADS7843控制芯片,具有 12位轉(zhuǎn)換精度,,支持 SPI通訊協(xié)議,;內(nèi)建 512KByt e ROM,提供繁體或簡體中文,支持 2 Page顯示模式,,支持文本顯示和圖形顯示 (320×240點(diǎn) )兩種方式,,顯示模塊內(nèi)建有 512KByt e的 16× 16中文顯示字型 ROM(FontROM)與 8× 6的 A SCI I半型字型,除內(nèi)建 8× 16和 16× 16的字號外,,還提供字型放大的功能,。
單片機(jī)采用 Cygnal的 C8051F020,高速、 流水線結(jié)構(gòu)的 C8051兼容的 CIP - 51內(nèi)核,,64K字節(jié)的 FLA SH,4K +256字節(jié)的 RAM, 12位的 AD轉(zhuǎn)換精度,,硬件實(shí)現(xiàn)的 SPI、 S MBus/I2C接口,,5個(gè)通用的 16位定時(shí)器,。70%的指令執(zhí)行時(shí)間為一個(gè)或兩個(gè)系統(tǒng)周期。
2 . 2 接口電路
如圖 1示,。ADS7843串行接口的一次完整操作需要 3× 8=24個(gè) DCL K時(shí)鐘周期,,前 8個(gè)脈沖接收 8位的命令,并在第 6個(gè)脈沖的上升沿開始 A / D轉(zhuǎn)換器進(jìn)入采樣階段,,從第 9個(gè)脈沖開始進(jìn)入轉(zhuǎn)換階段,,輸出12位采樣值,轉(zhuǎn)換結(jié)束進(jìn)入空閑階段,。直到 24個(gè)DCL K結(jié)束,,CS置高電平,一次測量結(jié)束,。如圖 2所示,。此外,ADS7843還支持其他的工作方式,,這里不再詳述,。
2 . 3 工作原理
當(dāng)用戶在觸摸屏上的有效區(qū)域內(nèi)點(diǎn)擊時(shí),觸摸屏的 X方向,、 Y方向輸出電阻分別隨 X和 Y呈線性變化,,ADS7843控制器將其分別轉(zhuǎn)換為 12位數(shù)據(jù),通過中斷告知 C8051F020需要接收數(shù)據(jù),,C8051F020接收到數(shù)據(jù)后進(jìn)行處理,;首先進(jìn)行觸點(diǎn)數(shù)據(jù)是否有效判斷,包括兩方面:一是判斷是否誤操作,,即是否是由于人的抖動產(chǎn)生的錯誤數(shù)據(jù),;二是 ADS7843傳過來得數(shù)據(jù)是否有效,由于剛開始的傳過來的第一個(gè)坐標(biāo)是用戶開始接觸觸摸屏?xí)r產(chǎn)生的,,電阻不準(zhǔn)確,,導(dǎo)致數(shù)據(jù)也不準(zhǔn),通常要去掉,;在接收過程中采用多次平均的方法,,假如有一次接收的數(shù)據(jù)和平均值差別很大,則這次測量就作廢,,需要重新測量,。一旦數(shù)據(jù)有效,,C8051F020接著計(jì)算觸點(diǎn)坐標(biāo)落在液晶屏的位置,根據(jù)計(jì)算的結(jié)果判斷執(zhí)行相應(yīng)的功能函數(shù),。使觸摸屏和液晶屏有機(jī)的結(jié)合起來,,建立一定的邏輯關(guān)系,交互地進(jìn)行信息存取和輸出,。
2 . 4 觸摸屏坐標(biāo)讀取的軟件流程
3 設(shè)計(jì)中出現(xiàn)的問題及解決方法
3 . 1 干擾信號
在測試時(shí),,手指或觸摸筆觸摸時(shí),會產(chǎn)生一定的干擾信號,,干擾情況分為兩種: (1)通過中斷管腳會一直向 C8051F020發(fā)出中斷請求,。解決方法:中斷信號接緩沖器,然后將輸出管腳接 1 μF的鉭電容,,濾除中斷干擾信號,。 (2) ADS7843輸出值不穩(wěn)定。解決方法:在 X +,、 Y +管腳上連接 15pF鉭電容濾波,。經(jīng)過測試驗(yàn)證,問題解決良好,。連接電路見圖 1,。
3 . 2 ADS7843的測量值偏差
當(dāng)有觸摸動作時(shí),觸摸點(diǎn)電阻膜會抖動或錯誤觸發(fā),,解決方法:先延時(shí)以消除抖動,,采樣 16次,去掉采樣的最先兩個(gè)值和最后兩個(gè)值,,利用軟件濾波,,去除采樣中的抖動造成的偏差和誤觸發(fā)。利用中間連續(xù)采樣的 12次值,,從采樣的第 3次值到第 14個(gè)值,,求出每次相鄰兩次采樣值之差,,求和后取平均值與預(yù)設(shè)值相比較,,如果大于預(yù)設(shè)值,則此觸摸動作無效,,小于預(yù)設(shè)值則把采集數(shù)據(jù)的最小 6個(gè)差值對應(yīng)的數(shù)據(jù)求平均值作為坐標(biāo)值,。可以消除抖動和誤觸發(fā)的無效值,得到的坐標(biāo)采樣值精確度較高,,相對于其他的濾波算法,該方法最優(yōu),。
3 . 3 信號采集中的延時(shí)時(shí)間設(shè)定
因?yàn)?nbsp;C8051F020的速度是普通 51芯片的 12倍,ADS7843在進(jìn)行數(shù)據(jù)采集時(shí),,時(shí)鐘信號高低電平持續(xù)的時(shí)間必須足夠,,方可保證能采集到坐標(biāo)值,。測試中發(fā)現(xiàn),在高低電平后延遲 4個(gè)“_n op_( ) ,; ” 空指令時(shí),,觸摸 X坐標(biāo)線,可以采集到 X值坐標(biāo),,且有起始點(diǎn),,坐標(biāo)值有線性變化;觸摸 Y坐標(biāo)時(shí),,采集到的 Y坐標(biāo)值無起始點(diǎn),,在觸摸屏上的 Y坐標(biāo)上的值相差無幾,幾乎沒有變化。將延時(shí)指令由原來的 4個(gè)“_nop_( ) ,; ”改為 16個(gè),,發(fā)現(xiàn)測試結(jié)果正常。能同時(shí)讀出 X,、 Y值坐標(biāo),,且兩坐標(biāo)值均有起始點(diǎn),且線性變化,。因此,,在信號采集程序中,將時(shí)鐘信號的延遲時(shí)間改為 16個(gè)“_n op_( ) ,; ” ,。例程如下:
void Ext _int 0( ) int err upt0
{ // 關(guān)中斷
// 延時(shí)以消除抖動
// 去除初次不穩(wěn)定值,軟件濾波
// 以下程序?yàn)槎啻窝h(huán)讀取多組 X、 Y坐標(biāo)值
Whit e Char T07843(0X90) ,; // 送控制字
While(BUSYT) ,; // 判忙
DCL K =1; _nop_( ) ,; _nop_( ) ,; _nop_( ) ; _nop_( ) ,;
_nop_( ) ,; _nop_( ) ; _nop_( ) ,; _nop_( ) ,;
_nop_( ) ; _nop_( ) ,; _nop_( ) ,; _nop_( ) ;
_nop_( ) ,; _nop_( ) ,; _nop_( ) ,; _nop_( ) ;
// 時(shí)鐘信號足夠時(shí)間來讀取坐標(biāo)值
DCL K =0,; _nop_( ) ,; _nop_( ) ; _nop_( ) ,; _nop_( ) ,;
_nop_( ) ; _nop_( ) ,; _nop_( ) ,; _nop_( ) ;
_nop_( ) ,; _nop_( ) ,; _nop_( ) ; _nop_( ) ,;
_nop_( ) ,; _nop_( ) ; _nop_( ) ,; _nop_( ) ,;
// 時(shí)鐘信號足夠時(shí)間來讀取坐標(biāo)值
X_pos[ r] =ReadFr omChar Fr om7843( ) ; // 讀 X值
// 以下為讀取坐標(biāo) Y值,;
Whit e Char T07843(0XD0) ,;
// 下同讀取 X值程序
// C80 51F0 20讀取 ADS7843的 AD轉(zhuǎn)換值
// 關(guān)中斷,延時(shí)
// 開中斷 }
4 結(jié)束語
經(jīng)過反復(fù)測試后得出:在系統(tǒng)控制中所產(chǎn)生的問題均被解決,觸摸屏上每個(gè)設(shè)定的觸摸鍵反應(yīng)都很靈敏,,在觸摸鍵的有效區(qū)域內(nèi)都有反應(yīng),。