概述:
ADC通過把輸入的模擬信號進行采集,經過量化和編碼后轉換為對應的二進制數值,并輸出。主要參數有:分辨率(位數)、量程、采樣速率。通常高檔單片機、嵌入式處理器都會把ADC集成在芯片內部。但是集成在芯片內部的ADC一般采樣速率會比較低,高速ADC一般都是自己做一片芯片。用到過的有ADC9288可達到100MSa/S、ADC8D1010可達到1GSa/S的采樣率【這里兩款ADC都已經把采樣和轉換集成在一起】。
觸摸屏是一張和屏幕大小一樣透明的東西,和顯示屏是分開的。通常有電阻屏、電容屏、紅外屏和超聲屏。電阻屏觸摸需要按下,使得屏的上下短接,檢測電壓求坐標。電容屏是靠人體感應到靜電的流通,電流由屏的四個角落提供,各個角所提供的電流和距離成正比,可依此計算坐標。紅外屏和超聲屏是靠障礙物的遮擋計算出障礙物的坐標。
S3C2440A ADC和觸摸屏的概述:
S3C2440A的觸摸屏是電阻式。
ADC功能框圖如下:
可選作為ADC的輸入信號有A[3:0]共8個模擬信號輸入。
也可以用幾個輸入腳分時復用做觸摸屏接口,具體看電路圖設計部分。
寄存器簡單描述
ADC控制寄存器ADCCON:
轉換結束標志;
預分頻允許與否,以及預分頻數值;
輸入通道選擇;
模式選擇;
讀開始下一次ADC允許與否;
開始ADC轉換;
ADC觸摸屏控制寄存器ADCTSC:
YP、YM、XP、XM輸出設置;
X/Y位置自動連續轉換與否;
上拉開關允許與否(XP);
手動測量X/Y位置;
ADC開始或區間延時寄存器ADCDLY:
ADC從觸針向下動作到開始轉換的時間長(X轉換時長、Y轉換時長)=DELAY*時鐘;【時鐘為1/EXTCLK or 1/PCLK】
ADC轉換數據寄存器ADCDAT0、ADCDAT1:
等待中斷模式:觸針向下還是抬起;
自動連續X位置和Y位置轉換;
手動X位置和Y位置測量;
X位置轉換值(包括普通ADC轉換值)、Y位置轉換值;
電路圖設計
AIN0作為ADC的模擬輸入,最簡單的功能:
觸摸屏接口:
TSXM、TSXP接觸摸屏的X極,TSYM、TSYP接觸摸屏的Y極。當X極兩端TSXM、TSXP接電壓值時,檢測TSYM或者TSYP(此時兩個管腳做ADC輸入用)的電壓,計算出X的坐標;換過來,當Y極兩端TSYM、TSYP接電壓值時,檢測TSXM或者TSXP(此時兩個管腳做ADC輸入用)的電壓,計算出Y的坐標。
實驗程序設計及分析
設定ADC轉換速率,之后啟用ADC功能,判斷轉換是否開始并轉換結束,返回ADC采集到的數據。
int ReadAdc(int ch)
{
int i;
static int prevCh=-1;
rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel
if(prevCh!=ch)
{
rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel
for(i=0;i<LOOP;i++); //delay to set up the next channel
prevCh=ch;
}
rADCCON|=0x1; //start ADC
while(rADCCON & 0x1); //check if Enable_start is low
while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high
return ( (int)rADCDAT0 & 0x3ff );
}
ADC實現觸摸屏接口功能:
設定轉換時間、設定轉換速率、設定觸摸屏控制寄存器;剩下的功能是實現觸摸屏中斷,暫不分析。
void Test_Touchpanel(void)
{
rADCDLY=50000; //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
rADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value
rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
pISR_ADC = (int)AdcTsAuto;
rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear
rINTSUBMSK=~(BIT_SUB_TC);
rINTSUBMSK|=BIT_SUB_TC;
rINTMSK|=BIT_ADC;
}
|