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