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);
}