问题描述
我们正在尝试显示连接到ATmega328P的电池电压,请查看AN2447的数据表,其中给出了使用ATmega328PB的示例代码,从进一步检查来看,该代码与328P并无太大不同。但是目前液晶显示屏上显示的是0伏特的电压,大约为5v。这是我们正在使用的代码,不确定是否与电压读数有关。我们正在使用atmel。这两个函数在主循环中调用,而mode_3在while(1)循环中调用。
float VCC_value = 0; uint16_t ADC_RES_L = 0; uint16_t ADC_RES_H = 0; void mode_3_setup(void) { ADMUX |= (1<<REFS0) | (0<<ADLAR) | (0x0E<<MUX0); } void mode_3(void) { if (ADCSRA & (0x01 << ADIF)) { // check if ADC conversion complete ADC_RES_L = ADCL; ADC_RES_H = ADCH; VCC_value = ( 0x400 * 1.1 ) / (ADC_RES_L + ADC_RES_H * 0x100) /* calculate the Vcc value */; } else { u8g2_DrawStr(&u8g2,110,50,"N"); } char vcc[20]; snprintf(vcc,20,"%.1f V",VCC_value); u8g2_DrawStr(&u8g2,10,"Mode 3:"); u8g2_DrawStr(&u8g2,"Battery voltage"); u8g2_DrawStr(&u8g2,35,vcc); }
@H_502_5@E.G。主循环的
int main(void){ mode_3_setup(); while(1){ mode_3(); } }
@H_502_5@解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)