使用Z-Stack,CC2530多EndDevice和一个Coordinator组网,组网成功。仿照Z-Stack中hal_adc.c文件下面的bool HalAdcCheckVdd (uint8 limit)函数,改了一个uint16 HalAdcGetVdd(void)函数,区别如下。
原来的函数bool HalAdcCheckVdd (uint8 limit)判断供电电压是否在某个门限;
新改的函数uint16 HalAdcGetVdd(void)输出供电电压的测量值。
代码如下。
uint16 HalAdcGetVdd(void) {uint16 value;uint8 tmpADCCON3 = ADCCON3; // Save ADCCON3 to restore later/* Clear ADC interrupt flag */ADCIF = 0;/* Setup the new value for conversionInternal reference 1.15V for CC2530, 7 bits ENOB, VDD/3*/ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_064 | HAL_ADC_CHN_VDD3);/* Wait for the conversion to finish */while ( !ADCIF );/* Get the result */value = ADCL;value |= ((uint16) ADCH) << 8;value >>= 2;// Restore ADCCON3ADCCON3 = tmpADCCON3;return value; }
几乎都是抄原来的函数,因为是8位测量,最终期望value测到的值是VDD/3/1.15*256。也有可能是VDD/3/1.15*128。
烧写到CC2530,VDD供电电压3.3V,串口输出value的低8位,发现value值0x68,0x4A,0x8F这样的范围波动,与期望不符。请问从何入手调试?
PS: 如果不用Z-Stack,直接裸机写一个ADC测量VDD/3的程序,输出正常。
Kevin Qiu1:
VDD是多少,不同参考电压会有变化
user6008379:
回复 Kevin Qiu1:
在哪里修改?
Kevin Qiu1:
回复 user6008379:
VDD为3V的参考电压是1.15V,VDD不为3V时可能会有些偏差
参考e2echina.ti.com/…/345951
YiKai Chen:
CC2530 ADC测量电压可以參考 sunmaysky.blogspot.com/…/cc2530-adc-howto-in-ti-z-stack.html
user6008379:
回复 Kevin Qiu1:
供电电压为3.3V,内部产生的参考电压不是1.15V没有关系,但应该是稳定的吧?我现在的问题是测出来的ADC值不稳定。
user6008379:
回复 YiKai Chen:
这个例子是用外部AIN管脚来测量电压,我现在直接想用ADC测内部VDD/3。现在的问题在于,不用Z-Stack,直接写代码可以,但是在Z-Stack里面老是测不准。
YiKai Chen:
回复 user6008379:
要不要接著示波器看看VDD電壓是不是有在飄
user6008379:
回复 YiKai Chen:
有微小波动,因为VDD=3.3是用LDO产生的,很稳定啦。而且不用Z-Stack,直接写ADC测量程序可以测出稳定的3.3V的。