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的输入电压了。