关于我们
技术文章
产品开发 芯片销售 技术顾问 PCBA加工
消费类 民用类 工控类 汽车类 医疗类
栏目导航
内容搜索
联系我们

联系电话: 138O2559739刘生

电子邮件: lmserver@163.com

办公地址: 深圳市宝安区宝民二路25号


技术文章

dsPIC33系列的ADC初始化方法

信息来源:lmserver   浏览次数:1571   更新时间:2013-3-31 13:07:40

//母体为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;
}


最新评论
 
请礼貌用语,文明留言!
昵称:   验证码:
邮箱:   QQ/MSN:
内容:
   

Copyright © 2007-2018 All Rights Reserved
粤ICP备18039308号
Powered By McuDesign