-static void battery_adc_init(void)
-{
- ADMUX = (1<<REFS1) | (1<<REFS0); // Ref:2.56V band-gap, Input:ADC0(PF0)
- ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // Prescale:128 16MHz/128=125KHz
- ADCSRA |= (1<<ADEN); // enable ADC
-}
-
-static uint16_t battery_adc(void)
-{
- volatile uint16_t bat;
- ADCSRA |= (1<<ADEN);
-
- // discard first result
- ADCSRA |= (1<<ADSC);
- while (ADCSRA & (1<<ADSC)) ;
- bat = ADC;
-
- // discard second result
- ADCSRA |= (1<<ADSC);
- while (ADCSRA & (1<<ADSC)) ;
- bat = ADC;
-
- ADCSRA |= (1<<ADSC);
- while (ADCSRA & (1<<ADSC)) ;
- bat = ADC;
-
- ADCSRA &= ~(1<<ADEN);
- return bat;
-}
-
-static void battery_led(bool on)
-{
- if (on) {
- DDRF |= (1<<5);
- PORTF &= ~(1<<5); // Low
- } else {
- DDRF &= ~(1<<5);
- PORTF &= ~(1<<5); // HiZ
- }
-}
-
-static bool battery_charging(void)
-{
- // MCP73831:STAT
- // Hi-Z: Shutdown/No Battery
- // Low: Charging
- // Hi: Charged
- DDRF &= ~(1<<5);
- PORTF |= (1<<5);
- return PINF&(1<<5) ? false : true;
-}
-