第一節(jié) S5PV210的ADC S5PV210的ADC可支持10bit和12bit,它支持10路輸入,然后將輸入的模擬的信號(hào)轉(zhuǎn)換為10bit或者12bit的二進(jìn)制數(shù)字信號(hào)。 在5MHz的時(shí)鐘下,最大轉(zhuǎn)換速率是1MSPS。本章只是涉及到初步的ADC轉(zhuǎn)換,并不會(huì)講解觸摸屏相關(guān)知識(shí),其結(jié)構(gòu)圖如下:
 在Mini210S中,adc相關(guān)的原理圖如下:
通道0的輸入被接到可調(diào)電阻上,通過調(diào)節(jié)可調(diào)電阻,adc能轉(zhuǎn)換出不同的值。 第二節(jié) 程序相關(guān)講解 完整代碼見詳細(xì)代碼下載鏈接。 1. main.c main()函數(shù)很簡(jiǎn)單,主要是調(diào)用了adc_test()函數(shù)來測(cè)試adc,adc_test()的定義位于文件adc.c中。 2. adc.c 函數(shù)adc_test()的代碼如下: void adc_test(void) { printf("\r\n##################adc test################\r\n"); while(1) { printf("adc = %d\r\n",read_adc(0)); delay(0x100000); } } 通過一個(gè)while循環(huán)不斷的讀取通道0經(jīng)過adc轉(zhuǎn)換的值,核心函數(shù)是read_adc(),它主要包括5個(gè)步驟: 第一步 設(shè)置時(shí)鐘。 相關(guān)代碼如下: TSADCCON0 = (1<<16)|(1 << 14) | (65 << 6); 首先使用12bit adc,然后使能分頻,最后設(shè)置分頻系數(shù)為66。
第二步 選擇通道。 代碼如下: ADCMUX = 0; //設(shè)置寄存器ADCMUX,選擇通道0。 第三步 啟動(dòng)轉(zhuǎn)換。 代碼如下: TSADCCON0 |= (1 << 0); while (TSADCCON0 & (1 << 0)); 首先設(shè)置寄存器TSADCCON0的bit[0],啟動(dòng)A/D轉(zhuǎn)換,然后讀bit[0]以確定轉(zhuǎn)換已經(jīng)啟動(dòng)。 第四步 檢查轉(zhuǎn)換是否完成。 代碼如下: while (!(TSADCCON0 & (1 << 15)) ); 讀寄存器TsdACCON0的bit[15],當(dāng)它為1時(shí)表示轉(zhuǎn)換結(jié)束。 第五步 讀數(shù)據(jù)。 代碼如下: return (TsdATX0 & 0xfff); 由于我們使用的12bit的模式,所以只讀寄存器TsdATX0的前12bit。 第三節(jié) 實(shí)驗(yàn)現(xiàn)象 串口終端上會(huì)不斷的打印出數(shù)字,數(shù)字的范圍是0~4095,這是因?yàn)槲覀兪褂玫氖?2bit的ADC。 我們通過調(diào)節(jié)可變電阻可以改變ACD轉(zhuǎn)換值。效果如下:
詳細(xì)代碼下載鏈接:http://download.csdn.net/detail/klcf0220/6045033 作者:快樂出發(fā)0220 ;Android群1:176507146 ;Android群2:151319601 ; Linux群:96394158 ; 個(gè)人博客:http://funsay.sinaapp.com ; 微信公眾號(hào):funsay ;
轉(zhuǎn)載請(qǐng)注明出處 http://klcf0220.cnblogs.com/ !??!
0
0
(請(qǐng)您對(duì)文章做出評(píng)價(jià))
|