dsPIC33系列的ADC初始化方法
//母體為DSPIC33FJ64GP206
#include <p33FJ64GP206.h>
unsigned int adc_buf[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //存放AD轉換結果的數組
//====================ADC初始化函數==========================
void adc_init(void)
{
TRISB = 0XFFFF; //SET PORTB INPUT
AD1PCFGL = 0x0000; //選擇端口的模式,模擬/數字,0表示選中模擬采樣
AD1CON1bits.ADSIDL= 0; //AD模塊一直工作,即使在空閑模式
AD1CON1bits.AD12B = 0; //ADC工作在10BIT模式
AD1CON1bits.ASAM = 0; //選擇了手動采樣模式,當SAMP位置1后才開始采樣
AD1CON2bits.VCFG = 0; //參考電壓選擇,bit15:13,000選擇電源參考,001表示Vref+
AD1CON3bits.ADRC = 1; //1表示使用內部RC時鐘,0表示使用系統FOSC時鐘
AD1CON3bits.ADCS = 8; //調節Tcy與Tad的關系,范圍0~63,63是最慢的
AD1CON2bits.CSCNA = 0; //不自動掃描輸入
AD1CON2bits.CHPS = 0; //同時掃描的通道數,現在只選擇了一個CH0
AD1CON1bits.SSRC = 7; //轉換觸發源選擇位,111表示采樣結束自動轉換
AD1CON3bits.SAMC = 4; //自動采樣時間為31個Tad,范圍0~31
AD1CON1bits.FORM = 0; //數據格式,整數格式,右對齊
AD1CON2bits.ALTS = 0; //總是使用多路開關A來作為通道選擇位
AD1CHS0bits.CH0NA = 0; //通道0的反向輸入端為-Vref,這里為地。
AD1CON1bits.ADON = 1; //打開ADC模塊
}
//=========================讀取一個通道的值==============================
void read_adc(unsigned char ch)
{ AD1CHS0bits.CH0SA = ch; //0~15分別表示選中16個通道之一
AD1CON1bits.SAMP = 1; //開始采樣,采樣結束后自動開始轉換
while(!AD1CON1bits.DONE) //此位為0表示正在采樣中
;
AD1CON1bits.DONE = 0; //也可以不清零,在新的轉換開始時,硬件自動清零
adc_buf[ch]=ADC1BUF0&0x03ff;
}