[讨论] ADuC7061的ADC采样问题!

zhoouauruheng   2012-10-29 16:08 楼主
ADC使用的是内部的基准电压1.2v。
/*ADC初始化*/
ADCMDE = BIT0 + BIT7; //连续转换模式,ADC时钟频率为512khz
ADCFLT = 0x7;         //SF = 7,  
ADCCFG = 0;

for (i = 1; i <= 5; i++)
    {
     /*内部短路至ADC1*/     // 选择ADC1/ADC5单端模式。   电路中ADC5接AGND
     ADC0CON = BIT7 + BIT10 + BIT15;
     while ((ADCSTA&BIT0) == BIT0) {}
     //Delay_ms(1000);      
     ADC0Data
= ADC0DAT;     
     printf("ADC0Data[%d] = %5d\n", i, ADC0Data
);
     Delay_ms(1000);
      
     /*内部短路至ADC0*/     //选择ADC0/ADC5单端模式。   电路中ADC5接AGND
     //ADC0CON = BIT6 + BIT9 + BIT10 + BIT15;
     ADC0CON = BIT6 + BIT10 + BIT15;
     while ((ADCSTA&BIT0) == BIT0) {}
     //Delay_ms(1000);   
     ADC1Data
= ADC0DAT;
     printf("ADC1Data[%d] = %5d\n\n", i, ADC1Data
);
     Delay_ms(1000);
    }

这样采样到的电压:(如下图)

   我的想法是
   第一、ADC采样的数据应该是随机变化的才对啊,为什么一直是1.2v呢?
   第二、在读取ADC0DAT之后加上Delay_ms()会影响到采集的数值。
   第三、我这样在for循环中配置ADC0CON,有什么问题吗?(硬件那边要求,先配置ADC0/ADC5,采集一组数据,然后在配置ADC1/ADC5,采集一组数据,循环)
   请大家给些意见!谢谢


[ 本帖最后由 zhoouauruheng 于 2012-10-29 16:26 编辑 ]
  • ADC.jpg

回复评论 (6)

貌似是这样的,第一:内部基准电压是1.2v,如果高于这个值的话,只能测得1.2v。。。。。估计要修改下增益电路!
                                            第二:如果使用的是内部短路至ADC0和ADC1的配置方法,也采不到数据!

[ 本帖最后由 zhoouauruheng 于 2012-10-29 17:52 编辑 ]
点赞  2012-10-29 17:28
加了延迟,有时两种配置采集的结果是正好相反的。。。。
我每次配置之后,在读取ADC0DAT前,首先是while ((ADCSTA&BIT0) == BIT0) {},然后是Delay_ms(1000);延迟1000ms,这样数据就相对准确了~

[ 本帖最后由 zhoouauruheng 于 2012-10-29 17:54 编辑 ]
点赞  2012-10-29 17:48
楼主可以啊,这块CPU会被你马上搞定的。
点赞  2012-10-29 17:52

回复 4楼 dontium 的帖子

额。。。。做项目用到这芯片,没办法啊!我又是新手!很多东西不懂,慢慢摸索!
点赞  2012-10-29 17:56

回复 5楼 zhoouauruheng 的帖子

这款CPU的寄存器比较少,相对容易掌握的---我想
等我们的板子到手了,你就帮我们闯出一条路了,谢谢你啊
点赞  2012-10-29 18:22
可否上传完整工程?
点赞  2017-10-26 22:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复