
S3C2410A的A/D轉換器包含一個8通道的模擬輸入轉換器,可以將模擬輸入信號(帶有采樣保持器)轉換成10位數字編碼。在AD轉換時鐘為2.5MHz時,其最大轉換率為500KSPS,輸入電壓范圍是0~3.3V。 A/D轉換器的AIN5、AIN7還可以與控制腳nYPON(正的Y軸開關控制)、YMON (負的Y軸開關控制) 、nXPON (正的X軸開關控制)和XMON (負的X軸開關控制)配合,實現觸摸屏輸入功能;
下圖為四線電阻式觸摸屏截面圖及在X電極對上施加確定的電壓后,X方向導電層不同位置電壓示意圖。
【資料圖】
下圖給出了上導電層X+、X-電極、下導電層Y+、Y-電極的位置。下圖(a)和下圖(b)分別表示,確定觸點位置時,要先在X+、X-電極對施加電壓,Y+、Y-電極對不施加電壓;然后在Y+、Y-電極對施加電壓,X+、X-電極對不施加電壓。
接口主要操作包括:有觸摸動作時首先控制X+、X-電極對施加電壓,Y+電極與A/D轉換器連接、Y-電極對地高阻,讀A/D轉換值得到觸點的X坐標;然后控制Y+、Y-電極對施加電壓,X+電極與A/D轉換器連接,X-電極對地高阻,讀A/D轉換值值得到觸點的Y坐標;另外還有檢測觸摸動作,產生中斷請求等操作。
為了正確使用A/D轉換器,需要設置A/D轉換器的時鐘,還有A/D轉換器的工作模式設置和輸入通道選擇,這都是通過ADCCON寄存器來設置的。然后置位ADCCON寄存器的ENABLE_START位來控制啟動A/D轉換,讀ADCCON寄存器的ECFLG位來判斷A/D轉換是否已經結束。當一次A/D轉換結束后,通過讀ADCDAT0寄存器來取得A/D轉換結果,寄存器的低10位數據有效;
舉例:使用串口延長線把 S3C2410的串口與PC機的COM1連接,設置串口波持率為115200, 8位數據位,無奇偶校驗位,1位停止位。 調整W1、W2改變測量的電壓,觀察PC機上的“超級終端”主窗口顯示電壓值是否正確。
#include "config.h"http:// 定義用于保存ADC結果的變量uint32 adc0, adc1;// 定義顯示緩沖區char disp_buf[50]; // 定義ADC轉換時鐘 (2MHz) #define ADC_FREQ (2*1000000)
/*************************************************************************************** Function name: ReadAdc** Descriptions: ADC轉換函數 ** Input: ch 轉換通道(0--7)** Output: 返回轉換結果*************************************************************************************/uint32 ReadAdc(uint32 ch){ int i; ch = ch & 0x07; // 參數過濾 rADCCON = (1<<14)|((PCLK/ADC_FREQ - 1)<<6)|(ch<<3)|(0<<2)|(0<<1)|(0<<0); // PRSCEN=1,使能分頻器 // PRSCVL=(PCLK/ADC_FREQ - 1),即ADC轉換時鐘為ADC_FREQ // SEL_MUX=ch,設置ADC通道 // STDBM=0,標準轉換模式 // READ_START=0,禁止讀(操作后)啟動ADC // ENABLE_START=0,不啟動ADC rADCTSC = rADCTSC & (~0x03); // 普通ADC模式(非觸摸屏) for(i=0; i<100; i++); rADCCON = rADCCON | (1<<0); // 啟動ADC while(rADCCON & 0x01); // 等待ADC啟動 while(!(rADCCON & 0x8000)); // 等待ADC完成 return (rADCDAT0 & 0x3ff); // 返回轉換結果}
int main(void){ int vin0, vin1; UART_Select(0); // 選擇UART0 UART_Init(); // 初始化UART0 while(1) { // 進行A/D轉換 adc0 = ReadAdc(0); adc1 = ReadAdc(1); // 通過串口輸出顯示 vin0 = (adc0*3300) / 1024; // 讀算實際電壓值 (mV) vin1 = (adc1*3300) / 1024; sprintf(disp_buf, "AIN0 is %d mV, AIN1 is %d mV \n", vin0, vin1); UART_SendStr(disp_buf); // 延時 DelayNS(20); } return(0);}
運行結果:
參考文獻:
孟祥蓮.嵌入式系統原理及應用教程(第2版)[M].北京:清華大學出版社,2017.
楊宗德. 嵌入式ARM系統原理與實例開發 [M].北京:北京大學出版社,2007.
S3C2410 Datasheet