微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > pic24hj64gp506 ADC 采样值数据不对?求高手解救.....

pic24hj64gp506 ADC 采样值数据不对?求高手解救.....

时间:10-02 整理:3721RD 点击:


使用的是30针脚(AN15/OCFB/CN12/RB15)
代码如下:
#define uchar unsigned char
#define uint unsigned int   
uint adcValue;
void InitADC(void)                 
{
   TRISB=0XFFFF;               // PORTB INPUT
   AD1PCFGL=0x0000;   // Analog Input
    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  = 31; //调节Tcy与Tad的关系,范围0~63,63是最慢的      
    AD1CON2bits.CSCNA = 0; //不自动扫描输入
    AD1CON2bits.CHPS  = 0; //同时扫描的通道数,现在只选择了一个CH0
    AD1CON1bits.SSRC  = 7; //转换触发源选择位,111表示采样结束自动转换
    AD1CON3bits.SAMC  = 0; //自动采样时间为31个Tad,范围0~31
    AD1CON1bits.FORM  = 0; //数据格式,整数格式,右对齐
    AD1CON2bits.ALTS  = 0; //总是使用多路开关A来作为通道选择位      
    AD1CHS0bits.CH0NA = 0; //通道0的反向输入端为-Vref,这里为地。
    AD1CON1bits.ADON  = 1; //打开ADC模块
}
//=========================读取一个通道的值==============================
uint ReadADC(uchar ch)
{
    AD1CHS0bits.CH0SA = ch;    //0~15分别表示选中16个通道之一
  AD1CON1bits.SAMP  = 1;     //开始采样,采样结束后自动开始转换
    while(!AD1CON1bits.DONE);  //此位为0表示正在采样中
    AD1CON1bits.DONE = 0;      //也可以不清零,在新的转换开始时,硬件自动清零
    adcValue=ADC1BUF0&0x03ff;
return adcValue;
}
这个针脚是不是还有其它什么地方需要配置的呢?请高手指点!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top