This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2530 ADC问题 用电池供电,电池正极接到P0_0脚测量,值一直是3.3V,实际电池3.01V,但同时用下载器给芯片供电,读取数据就完全正常

Other Parts Discussed in Thread: CC2530, Z-STACK

CC2530 ADC问题  用电池供电,电池正极接到P0_0脚测量,值一直是3.3V,实际电池3.01V,但同时用下载器给芯片供电,读取数据就完全正常;

只要把下载器电源去掉,用一个电源给芯片供电,电源正极直接接到检测脚P0_0,读取的值一直是3.3V,实际电池3.01V

程序如下

uint32 GetAdc(uint8 channel)
{
uint8 i = 0;
uint16 value = 0;
uint32 AdcValue = 0; //防止溢出
float vol = 0.0;

uint8 adcChannel = 1;

if (channel < 8)
{
for (i=0; i < channel; i++)
{
adcChannel <<= 1;
}
}

/* Enable channel */
ADCCFG |= adcChannel;
P0SEL |= adcChannel;


//for(i=0; i<4; i++)
{

ADCCON3 = channel | HAL_ADC_DEC_256 | HAL_ADC_REF_AVDD;

/* Wait for the conversion to be done */
while(!(ADCCON1 & 0x80)); //等待AD转换完成

/* Disable channel after done conversion */
ADCCFG &= (adcChannel ^ 0xFF);

/* Read the result */
value = ADCL>>4;
value |= (((int16)ADCH) << 4);

AdcValue += value;

}

//AdcValue = AdcValue >> 2; //累加除以4,得到平均值

if(AdcValue > 4090) // 输入的电压0V时,因为会满量程,检测到AdcValue的12位值为0xfff
{
AdcValue = 0;
}

vol = (float)(AdcValue/(float)2048)*3.3; //换算成电压值


return (unsigned int)(vol*1000);


}