小弟在使用R8C/2B的芯片做到A/D转换的时候,又被卡住了。
有碰上过相同情况吗?提供个经验,谢谢啊
大概的情况:
Vref连接供电电源,3.3V
选择AN9(p1_1) 作输入电压,是经过电池连接两个电阻到地1/2分压过来。
电池电压大概3.8V,分压处大概是1.9V。这个1.9V是在AN9 没有连接的时候
读的,跟预想的一样
硬件连接上AN9 之后,有几种情况
1.AN9 处的电压被拉高,接近Vref的值,10BIT精度读出来1012。
这种情况具体是什么配置造成的还不是很清楚,是把A/D转换集成到整个程序中发现的
2.AN9的电压被拉低,电压低到0.5V左右,读出来的值在175左右。
下面的程序配置
3.电压会被拉低到0,读出来的值只有0或者1。
跟情况2差不多的配置,差别在Sfr配置的时候将pd1_2设置成1
相关源码:
void ADconvert_Sfr_init()
{
pd1_1=0;
#if 1
//adgsel0=1; //选择AN8~AN11
adcon0=0x05; //引脚AN9,单次模式,选择f4
adcon1=0x28; //连接Vref。10位精度
//adcon1=0x20;//8bit
adcon2=0x09;
adic=0x00; //中断禁止
#else
#endif
}
UINT16 ReadBatt(void)
{
UINT16 batt;
UINT8 i;
pu02=0;
pd1=0x00;//如果没有句,就会变成情况3
ADconvert_Sfr_init();
for(i=0;i<20;i++)
{
asm("NOP");
}
adst=1;
while(adst==1);
batt=(ad0&0x03ff);
//pu02=1;
return batt;
}