Loading projects/step-up/adc.c +18 −3 Original line number Diff line number Diff line Loading @@ -10,8 +10,9 @@ //#define NUM_ADCS ZERO_ADC #define NUM_ADCS 2 volatile static unsigned char current_adc;; volatile unsigned char need_battery_adc; volatile static unsigned char current_adc; volatile unsigned char adc_enabled; volatile unsigned char need_battery_adc, need_pwmled_adc; static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log; volatile uint16_t jiffies; Loading Loading @@ -40,13 +41,23 @@ void start_next_adc() drop_count = 1; read_count = 1; n_reads_log = 0; } else { } else if (need_pwmled_adc) { current_adc = 0; read_zero = 0; drop_count = 1; read_count = 1 << PWMLED_ADC_SHIFT; n_reads_log = PWMLED_ADC_SHIFT; } else { ADCSRA &= ~_BV(ADEN); power_adc_disable(); adc_enabled = 0; return; } if (!adc_enabled) { power_adc_enable(); ADCSRA |= _BV(ADEN); adc_enabled = 1; } adc_sum = 0; Loading Loading @@ -95,7 +106,9 @@ static uint16_t read_adc_sync() void init_adc() { need_battery_adc = 0; need_pwmled_adc = 0; current_adc = 0; adc_enabled = 1; power_adc_enable(); ACSR |= _BV(ACD); // but disable the analog comparator Loading Loading @@ -124,6 +137,8 @@ void susp_adc() { ADCSRA = 0; DIDR0 = 0; power_adc_disable(); adc_enabled = 0; } ISR(ADC_vect) { // IRQ handler Loading projects/step-up/battery.c +2 −0 Original line number Diff line number Diff line Loading @@ -77,8 +77,10 @@ unsigned char battery_gauge() rv = 7; } #if 0 if (rv == 1 && !initial_readings) set_error(ERR_BATTERY); #endif #if 0 log_byte(0xbb); Loading projects/step-up/lights.h +3 −2 Original line number Diff line number Diff line Loading @@ -21,13 +21,14 @@ void inline log_word(uint16_t word) { } /* adc.c */ #define PWMLED_ADC_SHIFT 1 /* 1<<1 measurements per single callback */ extern volatile unsigned char need_battery_adc; extern volatile unsigned char adc_running; extern volatile unsigned char need_pwmled_adc; extern volatile unsigned char adc_enabled; void init_adc(); void susp_adc(); /* pwm.c */ #define PWM_MAX 0xFF extern volatile unsigned char pwm_running; extern volatile unsigned char pwm_enabled; void init_pwm(); void susp_pwm(); void pwm_off(); Loading projects/step-up/main.c +4 −2 Original line number Diff line number Diff line Loading @@ -72,13 +72,15 @@ int main(void) #if 1 while (1) { cli(); if (pwm_running) { if (pwm_enabled) { set_sleep_mode(SLEEP_MODE_IDLE); } else if (adc_running) { } else if (adc_enabled) { set_sleep_mode(SLEEP_MODE_ADC); } else { set_sleep_mode(SLEEP_MODE_PWR_DOWN); } sleep_enable(); // keep BOD active, no sleep_bod_disable(); sei(); sleep_cpu(); Loading projects/step-up/pwm.c +3 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ * Counts from 0 to 0xFF, without OCR1C compare. */ static unsigned char pwm_enabled; volatile unsigned char pwm_enabled; static void inline enable_pll() { Loading Loading @@ -57,6 +57,7 @@ void pwm_off() DDRB &= ~_BV(PB4); PLLCSR &= ~(_BV(PLLE) | _BV(PCKE)); power_timer1_disable(); pwm_enabled = 0; } Loading @@ -65,6 +66,7 @@ void pwm_set(uint8_t stride) OCR1B = stride; if (!pwm_enabled) { power_timer1_enable(); enable_pll(); DDRB |= _BV(PB4); pwm_enabled = 1; Loading Loading
projects/step-up/adc.c +18 −3 Original line number Diff line number Diff line Loading @@ -10,8 +10,9 @@ //#define NUM_ADCS ZERO_ADC #define NUM_ADCS 2 volatile static unsigned char current_adc;; volatile unsigned char need_battery_adc; volatile static unsigned char current_adc; volatile unsigned char adc_enabled; volatile unsigned char need_battery_adc, need_pwmled_adc; static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log; volatile uint16_t jiffies; Loading Loading @@ -40,13 +41,23 @@ void start_next_adc() drop_count = 1; read_count = 1; n_reads_log = 0; } else { } else if (need_pwmled_adc) { current_adc = 0; read_zero = 0; drop_count = 1; read_count = 1 << PWMLED_ADC_SHIFT; n_reads_log = PWMLED_ADC_SHIFT; } else { ADCSRA &= ~_BV(ADEN); power_adc_disable(); adc_enabled = 0; return; } if (!adc_enabled) { power_adc_enable(); ADCSRA |= _BV(ADEN); adc_enabled = 1; } adc_sum = 0; Loading Loading @@ -95,7 +106,9 @@ static uint16_t read_adc_sync() void init_adc() { need_battery_adc = 0; need_pwmled_adc = 0; current_adc = 0; adc_enabled = 1; power_adc_enable(); ACSR |= _BV(ACD); // but disable the analog comparator Loading Loading @@ -124,6 +137,8 @@ void susp_adc() { ADCSRA = 0; DIDR0 = 0; power_adc_disable(); adc_enabled = 0; } ISR(ADC_vect) { // IRQ handler Loading
projects/step-up/battery.c +2 −0 Original line number Diff line number Diff line Loading @@ -77,8 +77,10 @@ unsigned char battery_gauge() rv = 7; } #if 0 if (rv == 1 && !initial_readings) set_error(ERR_BATTERY); #endif #if 0 log_byte(0xbb); Loading
projects/step-up/lights.h +3 −2 Original line number Diff line number Diff line Loading @@ -21,13 +21,14 @@ void inline log_word(uint16_t word) { } /* adc.c */ #define PWMLED_ADC_SHIFT 1 /* 1<<1 measurements per single callback */ extern volatile unsigned char need_battery_adc; extern volatile unsigned char adc_running; extern volatile unsigned char need_pwmled_adc; extern volatile unsigned char adc_enabled; void init_adc(); void susp_adc(); /* pwm.c */ #define PWM_MAX 0xFF extern volatile unsigned char pwm_running; extern volatile unsigned char pwm_enabled; void init_pwm(); void susp_pwm(); void pwm_off(); Loading
projects/step-up/main.c +4 −2 Original line number Diff line number Diff line Loading @@ -72,13 +72,15 @@ int main(void) #if 1 while (1) { cli(); if (pwm_running) { if (pwm_enabled) { set_sleep_mode(SLEEP_MODE_IDLE); } else if (adc_running) { } else if (adc_enabled) { set_sleep_mode(SLEEP_MODE_ADC); } else { set_sleep_mode(SLEEP_MODE_PWR_DOWN); } sleep_enable(); // keep BOD active, no sleep_bod_disable(); sei(); sleep_cpu(); Loading
projects/step-up/pwm.c +3 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ * Counts from 0 to 0xFF, without OCR1C compare. */ static unsigned char pwm_enabled; volatile unsigned char pwm_enabled; static void inline enable_pll() { Loading Loading @@ -57,6 +57,7 @@ void pwm_off() DDRB &= ~_BV(PB4); PLLCSR &= ~(_BV(PLLE) | _BV(PCKE)); power_timer1_disable(); pwm_enabled = 0; } Loading @@ -65,6 +66,7 @@ void pwm_set(uint8_t stride) OCR1B = stride; if (!pwm_enabled) { power_timer1_enable(); enable_pll(); DDRB |= _BV(PB4); pwm_enabled = 1; Loading