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 编辑 ]
貌似是这样的,第一:内部基准电压是1.2v,如果高于这个值的话,只能测得1.2v。。。。。估计要修改下增益电路!
第二:如果使用的是内部短路至ADC0和ADC1的配置方法,也采不到数据!
[
本帖最后由 zhoouauruheng 于 2012-10-29 17:52 编辑 ]
加了延迟,有时两种配置采集的结果是正好相反的。。。。
我每次配置之后,在读取ADC0DAT前,首先是while ((ADCSTA&BIT0) == BIT0) {},然后是Delay_ms(1000);延迟1000ms,这样数据就相对准确了~
[ 本帖最后由 zhoouauruheng 于 2012-10-29 17:54 编辑 ]
回复 4楼 dontium 的帖子
额。。。。做项目用到这芯片,没办法啊!我又是新手!很多东西不懂,慢慢摸索!
回复 5楼 zhoouauruheng 的帖子
这款CPU的寄存器比较少,相对容易掌握的---我想
等我们的板子到手了,你就帮我们闯出一条路了,谢谢你啊