ADMUX = (1<<REFS1) | (1<<REFS0);
ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
ADCSRA |= (1<<ADEN);
+
+ // ADC disable voltate divider(PF4)
+ DDRF |= (1<<4);
+ PORTF &= ~(1<<4);
}
// Indicator for battery
{
if (!(USBSTA&(1<<VBUS))) return false;
- // MCP73831:STAT
- // HiZ: Shutdown/No Battery
- // Low: Charging
- // Hi: Charged
+ // Charger Status:
+ // MCP73831 MCP73832 LTC4054 Status
+ // Hi-Z Hi-Z Hi-Z Shutdown/No Battery
+ // Low Low Low Charging
+ // Hi Hi-Z Hi-Z Charged
// preserve last register status
uint8_t ddrf_prev = DDRF;
DDRF = (DDRF&~(1<<5)) | (ddrf_prev&(1<<5));
PORTF = (PORTF&~(1<<5)) | (portf_prev&(1<<5));
+ // TODO: With MCP73831 this can not get stable status when charging.
+ // LED is powered from PSEL line(USB or Lipo)
+ // due to weak low output of STAT pin?
+ // due to pull-up'd via resitor and LED?
return charging;
}
// Returns voltage in mV
uint16_t battery_voltage(void)
{
+ // ADC disable voltate divider(PF4)
+ DDRF |= (1<<4);
+ PORTF |= (1<<4);
+
volatile uint16_t bat;
//ADCSRA |= (1<<ADEN);
//ADCSRA &= ~(1<<ADEN);
+ // ADC disable voltate divider(PF4)
+ DDRF |= (1<<4);
+ PORTF &= ~(1<<4);
+
return (bat - BATTERY_ADC_OFFSET) * BATTERY_ADC_RESOLUTION;
}