S3C2440之觸摸屏
其坐標(biāo)識(shí)別原理如下圖:
本文引用地址:http://2s4d.com/article/201611/322378.htm當(dāng)手指觸摸屏幕時(shí),兩個(gè)相互絕緣的導(dǎo)電層在觸摸點(diǎn)處連接,頂層的5伏電壓就會(huì)加到底層觸摸點(diǎn)處,底層該點(diǎn)的電壓會(huì)發(fā)生改變,控制器檢測(cè)到該點(diǎn)的變化后,將該點(diǎn)的電壓進(jìn)行A/D轉(zhuǎn)換,得到的值與5伏相比,再乘以該軸總長(zhǎng)度即可得觸摸點(diǎn)靠地那一端的坐標(biāo):X=L*V(I)/5
也就是說(shuō)我們要得到觸點(diǎn)坐標(biāo)的話(huà),只需要將觸點(diǎn)的電壓進(jìn)行A/D轉(zhuǎn)換再用公式計(jì)算一下便可。那么觸摸屏驅(qū)動(dòng)的重點(diǎn)應(yīng)該是在什么時(shí)候,對(duì)什么地點(diǎn)的電壓進(jìn)行A/D轉(zhuǎn)換。S3C2440中的A/D轉(zhuǎn)換器便有這種功能:
如圖所示為S3C2440中ADC與觸摸屏的接口框架圖。
我們從上面的結(jié)構(gòu)圖和數(shù) 據(jù)手冊(cè)可以知道,該ADC模塊總共有8個(gè)通道可以進(jìn)行模擬信號(hào)的輸入,分別是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么 ADC是怎么實(shí)現(xiàn)模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換呢?首先模擬信號(hào)從任一通道輸入,然后設(shè)定寄存器中預(yù)分頻器的值來(lái)確定AD轉(zhuǎn)換器頻率,最后ADC將模擬信號(hào)轉(zhuǎn) 換為數(shù)字信號(hào)保存到ADC數(shù)據(jù)寄存器0中(ADCDAT0),然后ADCDAT0中的數(shù)據(jù)可以通過(guò)中斷或查詢(xún)的方式來(lái)訪(fǎng)問(wèn)。
從下面的程序中可以看到這些信號(hào)是如何別控制的:
中斷模式用到的寄存器:
設(shè)置觸摸屏接口為等待中斷模式:
寄存器ADCTSC的第2位用于選擇自動(dòng)(連續(xù))XY坐標(biāo)轉(zhuǎn)換模式
寄存器ADCTSC的第3位可以選擇上拉電阻的使能,在等待中斷模式下,上拉電阻要有效
- rADCTSC=0xd3;
//[0:7]Wfait,XP_PU(在等待中斷模式下,上拉電阻要有效),XP_Dis,XM_Dis,YP_Dis,YM_En
A/D延時(shí)寄存器ADCDLY可以設(shè)置開(kāi)始中斷到真正開(kāi)始A/D轉(zhuǎn)換這段時(shí)間的延時(shí)長(zhǎng)度,它的時(shí)鐘源頻率為3.68MHz。
- rADCDLY=50000;
//Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
當(dāng)然還要開(kāi)中斷,注意INT_TC為子中斷:
- rINTMSK=~BIT_ADC;
//ADC Touch Screen Mask bit clear,enable ADCint - rINTSUBMSK=~(BIT_SUB_TC);//enable
sub ADCint
如果INT_TC發(fā)生,選擇XY轉(zhuǎn)換模式,啟動(dòng)A/D轉(zhuǎn)換:
- rADCTSC=(1<<3)|(1<<2);
//Pull-up disable,(在觸發(fā)中斷后,上拉電阻要無(wú)效) Seq. X,Y postion measure. - saveAdcdly=rADCDLY;
//save ADCDLY(啟動(dòng)延時(shí)) - rADCDLY=40000;
//Normal conversion mode delay about (1/50M)*40000=0.8ms - rADCCON|=0x1;
//start ADC
- while(rADCCON
& 0x1); //check if Enable_start is low,轉(zhuǎn)換開(kāi)啟結(jié)束 - while(!(rADCCON
& 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
通過(guò)INT_ADC檢查AD轉(zhuǎn)換是否完成:
- while(!(rSRCPND
& (BIT_ADC))); //check if ADC is finished with interrupt bit
- xdata=(rADCDAT0&0x3ff);
- ydata=(rADCDAT1&0x3ff);//讀取轉(zhuǎn)換結(jié)果,x軸坐標(biāo)值放入rADCDAT0,y軸坐標(biāo)值放入ADCDAT1
設(shè)置觸摸屏為等待中斷模式
- rADCTSC
=0xd3; //Waiting for interrupt//[0:7]Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
等待觸筆抬起后,恢復(fù)現(xiàn)場(chǎng),結(jié)束中斷函數(shù)。
- rADCTSC=rADCTSC|(1<<8);
// Detect tylus up sinterrupt signal.檢查觸筆抬起中斷 while(1) //to check Pen-up state { if(rSUBSRCPND & (BIT_SUB_TC)) //check if ADC is finished with interrupt bit { //Uart_Printf("Stylus Up Interrupt~!");//觸筆抬起! break; //if Stylus is up(1) state } }
相關(guān)推薦
技術(shù)專(zhuān)區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車(chē)電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論