AI8H读取BGV电压没有一个方式是对的是什么原因?CHIPID ROM RAM读出来都不是1.19?
AI8H1K17TSSOP20 读取BGV电压没有一个方式是对的是什么原因?CHIPIDROMRAM读出来都不是1.19?? RAM读出是0 ROM读出是65311 CHIPID 读出也是0#include"ALLC-H.h"
u16 *BGV;
/*******************************************************************************************/
void AdcSetRate(void) //500KSPS@35.000MHz //10位最快500K 12位最快800K
{
ADCCFG &= ~0x0f; //SPEED(0)
ADCTIM = 0x33; //CSSETUP(0), CSHOLD(1), SMPDUTY(19)
ADC_CONTR = 0x8f; //使能ADC模块,并选择第15通道
BGV = (u16 idata *)0xef;
}
/*******************************************************************************************/
u16 Get_ADC12bitResult(u8 xdata channel)//channel = 0~15
{
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;//启动 AD 转换
_nop_();
_nop_();
_nop_();
_nop_();
while((ADC_CONTR & 0x20) == 0); //wait for ADC finish
ADC_CONTR &= ~0x20; //清除ADC结束标志
return(((u16)ADC_RES << 8) | ADC_RESL);
}
/*******************************************************************************************/
u16 Read_ADC_vref()
{
u8xdata i;
u16 xdata res;
for(i=0;i<8;i++)
{
res+=Get_ADC12bitResult(15);
}
res>>=3;
res = (int)(1024L * *BGV / res); //(10位ADC算法)计算VREF管脚电压,即电池电压
// res = (int)(4096L * BGV / res); //(12位ADC算法)计算VREF管脚电压,即电池电压
//注意,此电压的单位为毫伏(mV)
return res;
}
u16 time,ADC_verf;
void Delay_printf_vref()
{
if(++time>=50000)
{ time=0;
ADC_verf=Read_ADC_vref();
printf("BGV=%u mV\n",BGV);
printf("ADC_vref=%u mV\n",ADC_verf);
}
}
使用开天斧板子和例程测的,VRef 2.5V,参考:
1942 / 4096 * 2.5 = 1.1853
ercircle 发表于 2025-6-5 19:09
使用开天斧板子和例程测的,VRef 2.5V,参考:
1942 / 4096 * 2.5 = 1.1853
{:4_186:}规格书打印出来,估计有10斤纸,我得走到哪看到哪才行。{:4_184:} 不是很牛逼 发表于 2025-6-5 20:48
规格书打印出来,估计有10斤纸,我得走到哪看到哪才行。
目录没打印?
还有一件事,如果从CHIPID上看,得先看看用的单片机有没有这个寄存器。还要使用正确的访问流程。
如果从 RAM或者 ROM区里读,需要再下载程序的时候勾上 什么 在程序去的结束处添加重要测试参数, AI8H1K17-TSSOP20, 读取BGV电压
谢谢哥 终于明白了{:OK:} _奶咖君_ 发表于 2025-6-7 16:30
目录没打印?
还有一件事,如果从CHIPID上看,得先看看用的单片机有没有这个寄存器。还要使用正确的访问 ...
{:baoquan:}明白 正在持续研究 感谢大佬 神农鼎 发表于 2025-6-7 20:38
AI8H1K17-TSSOP20, 读取BGV电压
{:baoquan:}明白 正在持续研究 感谢大佬
页:
[1]