具有Atmega328P的AN2447

问题描述

我们正在尝试显示连接到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 (将#修改为@)