觸摸屏驅(qū)動調(diào)試常見問題總結(jié)。電阻式觸摸屏的Controller從原理上,簡單的說就是一個可切換通道的AD轉(zhuǎn)換器,常見的有類似TSC2046這一系列的獨(dú)立芯片,也有Buildin在MPU里的集成模塊。這里記錄的主要是這類觸摸屏驅(qū)動的調(diào)試中我所遇到過的一些問題,因?yàn)榫唧w硬件平臺和環(huán)境不同,有些問題,現(xiàn)象和原因可能不一定與你的實(shí)際情況相同,僅供參考。
數(shù)據(jù)線上無法得到正確的數(shù)據(jù)
癥狀
讀取的測量數(shù)據(jù)變化不定,幾乎沒有規(guī)律
分析
Tsc2046控制器在接收到8個bit的測量指令后,需要一段的時間完成測量和AD轉(zhuǎn)換工作,這期間在其busy線上會輸出高電平,直到電平拉低后在數(shù)據(jù)線上才會輸出數(shù)據(jù)。 而這期間,其片選信號從spec上看,應(yīng)該要保持有效,所以在使用SPI接口時候,需要采用比如32位傳送的方式,使得在傳完8位指令后,繼續(xù)保持片選和時鐘,已接收后續(xù)的測量結(jié)果數(shù)據(jù),因?yàn)檫@期間無法測量busy信號,假定其為某一恒定時間,位移得到所需測量結(jié)果。分析數(shù)據(jù)不穩(wěn)定的原因在于這段busy等待時間在不同的測量情況下,長度可能不一定是確定的,導(dǎo)致無法準(zhǔn)確判斷應(yīng)該提取SDO口上的哪段數(shù)據(jù)作為測量結(jié)果。
所以主要矛盾在于我所使用的CPU的SPI口的片選和時鐘信號無法與數(shù)據(jù)線分開獨(dú)立自由控制。
解決
采用GPIO口模擬SPI時序,從而可以自己控制clk和片選信號,因此此時可以測量busy線的信號,從而準(zhǔn)確的得知何時tsc2046開始完成測量并輸出測量結(jié)果。
busy線長期處于忙等待狀態(tài)
癥狀
送完指令,等待busy拉低的過程中,busy信號始終為高
分析
仔細(xì)分析spec,發(fā)現(xiàn)在busy狀態(tài)下,tsc2046依然需要clk來完成AD轉(zhuǎn)換工作,所以在等待busy信號的時候,要同時繼續(xù)保持CLK信號
解決
每讀一次busy信號的同時,繼續(xù)用GPIO口模擬一個周期的CLK信號。
不斷產(chǎn)生pendown中斷
癥狀
在第一次觸摸屏幕,pendown中斷產(chǎn)生,并完成測量后,即使放開觸摸屏,依然連續(xù)不斷的有pendown中斷信號產(chǎn)生,反復(fù)進(jìn)入測量過程。
分析
測量觸摸屏X+ pin 上的電平發(fā)現(xiàn),即使在等待中斷的過程中,X+ pin 也始終為低電平,而理論上,此時該pin應(yīng)該為高電平,由于Y- pin 接地,在觸摸屏被按下的時候,X+ pin 電壓被拉低,從而產(chǎn)生pendown中斷。
反復(fù)調(diào)試發(fā)現(xiàn)該pin電壓為低的原因在于在上一次測量中,最后一次測量的是Z1,在觸摸屏放開的時候,測量Z1的過程中,X+為低電平。而后回到等待中斷狀態(tài)的時候,X+ pin 由于外部電容的原因,被上拉電阻重新拉高為高電平需要一段的時間,在此之前,如果打開中斷,就會誤判,錯誤的收到中斷信號
解決
有幾種辦法可以解決:
減小外部電容
將中斷由電平觸發(fā)改為下降沿觸發(fā)
在完成測量之后,打開中斷之前,延遲一段時間。等待X+ Pin回到高電平狀態(tài)
改變電容涉及到硬件電路改變,而改變觸發(fā)方式則因?yàn)槟壳笆褂玫闹袛嗑€無法改成邊沿觸發(fā),不可行,所以目前是用最后一種方式。
可以嘗試改變測量順序,先測Z1再測X,Y看是否這樣可以避免最后一種方式所需的延遲。減小cpu占用率。
采集的數(shù)據(jù)有劇烈抖動
癥狀
觸摸屏壓下以后,即使保持位置不動,所取得的XY坐標(biāo)也會不時發(fā)生較大范圍的跳動,幅度達(dá)到十幾個到幾十個像素
分析
通常觸摸屏的抖動是不可避免的,畢竟是一個模擬信號的AD轉(zhuǎn)換的過程,但是正常抖動應(yīng)該在幾個像素以下。大范圍的坐標(biāo)抖動,說明AD轉(zhuǎn)換采樣取得的電壓值有較大變化。理論上大致會有兩類原因造成:
AD轉(zhuǎn)換的參考電壓跳動
取樣PIN腳輸入電壓跳動
因此,外推一下,不外乎是:
參考電壓或取樣PIN腳電壓受到干擾
取樣時刻,對應(yīng)PIN腳的電壓值還未穩(wěn)定
觸摸屏本身質(zhì)量原因(如貼合存在空隙等),觸壓時電阻值變化較大,造成輸出電壓的抖動
解決
具體解決時就要具體分析跳動的現(xiàn)象和規(guī)律了
通常如果是內(nèi)置觸摸屏控制模塊的MPU,取樣PIN腳數(shù)據(jù)受到干擾的可能性較大,因?yàn)檫@時候,電阻式觸摸屏的4個PIN腳的走線相對獨(dú)立的觸摸屏控制芯片來說,可能會比較長,周邊的其它信號線可能也比較多。要注意保護(hù)好信號。
后兩者對應(yīng)的措施包括延遲消抖,合理安排采樣時間,間隔。 改進(jìn)觸摸屏本身等。
最后,抖動有時候是不能完全消除的,可以通過數(shù)據(jù)平滑的措施在一定程度上減弱抖動帶來的干擾。
CPU占用率超高
癥狀
觸摸筆壓下后,CPU占用率迅速攀高到一個不合理的地步,松開后降低
分析
通常這種情況都是由于使用了不合理的查詢手段來獲取采樣數(shù)據(jù),例如忙等待AD轉(zhuǎn)換的結(jié)束,采樣頻率過快等等
解決
理論上,所有這類IO設(shè)備都應(yīng)該采用中斷驅(qū)動的方式來獲取數(shù)據(jù)。很遺憾的是,有些內(nèi)置的觸摸屏控制模塊,轉(zhuǎn)換結(jié)束后并不產(chǎn)生中斷信號,只是設(shè)置一個狀態(tài)寄存器,需要由軟件查詢得到。這種情況下,如果轉(zhuǎn)換完成時間不定,又沒有較高精度的定時中斷源,只能犧牲相應(yīng)速度,在每次查詢間隔之間睡眠一段足夠長的時間,讓出CPU。 通常來說,在jiffies值為10ms間隔的系統(tǒng)上,最快每秒查詢50-100次,也基本能夠滿足像手寫輸入這樣的應(yīng)用的需求了。