找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

[M051] 请教AD转换问题,急!

[复制链接]
跳转到指定楼层
楼主
shujianxiaoyao 发表于 2014-2-20 11:40:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用M058S开启两路AIN0和AIN1  AD转换,只有第一路能得到转换正确的数据,第二路一直都是0,万用表测量第二路脚有1.2V的电压,但就是得不到AD值,请教各位大神如下函数有哪里需要修改的呢?
/*-----------------------------------------------------------------*/
/* 初始化IO引脚                                                    */
/*-----------------------------------------------------------------*/
void IO_Init(void)
{
     /* 设定引脚复用功能 */
     SYS->P1_MFP = SYS_MFP_P10_AIN0
                 | SYS_MFP_P11_AIN1;
     SYS->P2_MFP = SYS_MFP_P20_PWM0
                 | SYS_MFP_P21_PWM1
                 | SYS_MFP_P22_PWM2
                 | SYS_MFP_P23_PWM3;
     SYS->P3_MFP = SYS_MFP_P30_RXD0
                 | SYS_MFP_P31_TXD0;
//    | SYS_MFP_P32_INT0;
     /* 配置引脚输入输出模式 */
     P0->PMD  = 0x000045F5;
     P1->PMD  = 0x0000F7FA;
     P1->OFFD = 0x00000003;
     P2->PMD  = 0x0000FF55;
     P3->PMD  = 0x0000DFCF;
     P4->PMD  = 0x0000FFF5;
}

/*-----------------------------------------------------------------*/
/* 初始化ADC                                                       */
/*-----------------------------------------------------------------*/
void ADC_Init()
{
     /* 设定ADC控制寄存器 */
     ADC->ADCR = ADC_ADCR_DMOF_UNSIGNED_OUTPUT
               | ADC_ADCR_DIFFEN_SINGLE_END
               | ADC_ADCR_TRGCOND_LOW_LEVEL
               | ADC_ADCR_ADMD_SINGLE
               | ADC_ADCR_ADEN_CONVERTER_ENABLE;
     /* 使能模拟输入通道 */
     ADC->ADCHER = 0x03;
}

// AD转换------------------------------------------
void  Bat_volt_check(void)
{
   
   uint32_t adcbuf1, adcbuf2;
   uint32_t temp;
   
         _ADC_SET_CHANNEL(0X03);        //P1.0 P1.1
    /* clear the A/D interrupt flag for safe */
         ADC->ADSR = ADC_ADSR_ADF_Msk;
   _ADC_START_CONVERT();
      _ADC_WAIT_COVERSION_DONE();
   ADC->ADSR = ADC_ADSR_ADF_Msk;      /* clear the A/D conversion flag */
   
   adcbuf1 = _ADC_GET_CONVERSION_DATA(0);

   adcbuf2 = _ADC_GET_CONVERSION_DATA(1);

   printf("ad0 = %d\n", adcbuf1);
   printf("ad1 = %d\n", adcbuf2);



adcbuf2 一直都是0,不管接了多少伏电压都是一样,为什么呢? 这样写的函数有问题吗?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
chenwenbin 发表于 2014-2-20 13:23:45 | 只看该作者
ADC是不是设置成单次模式了,单次模式只转换使能的编号低的那个通道,还有不要设置成差分输入模式
回复 支持 反对

使用道具 举报

板凳
 楼主| shujianxiaoyao 发表于 2014-2-20 14:12:38 | 只看该作者
chenwenbin 发表于 2014-2-20 13:23
ADC是不是设置成单次模式了,单次模式只转换使能的编号低的那个通道,还有不要设置成差分输入模式 ...

谢谢指点,确实是把ADC设置成单次模式了,现在改成单周期模式就可以了。
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU