Author : Jim
AC109N系列的芯片带有内部LDOIN ADC采集,所以我们在采集电池电量时并不需要单独用另一路ADC来采集。
只需要用内部的LDOIN采集就可以了。以下为ADC应用的寄存器说明:
/*! \page5 ADC 编程指南
*
* \section adc ADC 介绍
* - CD002 支持16 个ADC入口\n
* \section adc1 ADC 寄存器
* - ADC_CON0(可读写)\n
* Bit2~0,波特率选择,初始值为0\n
* 000:系统时钟除6\n
* 001:系统时钟除12\n
* 010:系统时钟除24\n
* 011:系统时钟除48\n
* 1xx:系统时钟除1\n
* Bit3,ADC 模拟模块Enable,初始值为0\n
* Bit4,ADC控制器Enable(数字电路部分),初始值为0\n
* Bit5,ADC中断允许,高有效,初始值为0\n
* Bit6,ADC Pending,初始值为1\n
* Bit7,ADC启动位,写1会启动ADC转换,并且对ADC Pending清0。读永远是0
* - ADC_CON1(可读写)初始值为xx\n
* Bit3~0,通道选择\n
* 0000~0111:选择P00~P07\n
* 1000: 选择P20\n
* 1001: 选择P21\n
* 1010: 选择P22\n
* 1011: 选择P35\n
* 1100: 选择AMUX左声道\n
* 1101: 选择AMUX右声道\n
* 1110: 选择LDOIN的1/2\n
* 1111: 选择LDO电压源(1.2V)\n
* Bit7~4, 启动延时控制,\n
* 实际启动延时为这4Bit乘8个ADC时钟\n
*
*
* - ADC_DATH\n
* bit7~0 : 存放ADC采样结果的高 8 bit
* - ADC_DATL\n
* bit7~6 : 存放ADC采样结果的低 2 bit
*/
可以看到当ADC_CON1寄存器配置为0XFE时,就可以打开LDOIN采集通道了,采集到的电压是1/2 Vbat.
参考代码如下:
void AD_init(void) AT(CSTART)
{
ADC_CON0 = BIT(4) | BIT(3) ;
LDO_CON |= BIT(1);
ADC_CON1 = 0xfe;
ADC_CON0 |= BIT(7);
}
_near_func __root u8 ldoin_voltage(void) AT(COMMON_CODE)
{
u8 adc_h,adc_l;
adc_h= (AD_var.wADValue[AD_CH_LDO])>>8;
adc_l= (AD_var.wADValue[AD_CH_VBG])>>8;
return ((((u16)adc_h*248+5)/10)/adc_l);
}
调用 ldoin_voltage ,返回值就是LDOIN的输入电压了。