Loading projects/step-up/adc.c +1 −22 Original line number Original line Diff line number Diff line Loading @@ -11,7 +11,7 @@ #define NUM_ADCS 2 #define NUM_ADCS 2 volatile static unsigned char current_adc;; volatile static unsigned char current_adc;; static unsigned char need_battery_adc; volatile unsigned char need_battery_adc; static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log; static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log; volatile uint16_t jiffies; volatile uint16_t jiffies; Loading Loading @@ -126,30 +126,9 @@ void susp_adc() DIDR0 = 0; DIDR0 = 0; } } static void inline adc_based_timer() { static unsigned char count; if (++count < 40) // about 100 Hz jiffies return; count = 0; ++jiffies; if ((jiffies & 0x007F) == 1) { // about every 1s need_battery_adc = 1; } if ((jiffies & 0x0007) == 0) { patterns_next_tick(); } timer_check_buttons(); } ISR(ADC_vect) { // IRQ handler ISR(ADC_vect) { // IRQ handler uint16_t adcval = ADCW; uint16_t adcval = ADCW; adc_based_timer(); if (read_zero) { if (read_zero) { setup_mux(current_adc); setup_mux(current_adc); read_zero = 0; read_zero = 0; Loading projects/step-up/buttons.c +4 −4 Original line number Original line Diff line number Diff line Loading @@ -7,9 +7,9 @@ #include "lights.h" #include "lights.h" #define WAKEUP_LIMIT 5 // times 100 ms #define WAKEUP_LIMIT 5 // times 100 ms #define SHORT_PRESS_MIN 10 // in jiffies (100 Hz ticks) #define SHORT_PRESS_MIN 2 // in jiffies (16 Hz ticks) #define SHORT_PRESS_MAX 50 #define SHORT_PRESS_MAX 5 #define LONG_PRESS_MIN 100 #define LONG_PRESS_MIN 10 static uint16_t button_start; static uint16_t button_start; static unsigned char prev_state; static unsigned char prev_state; Loading Loading @@ -67,7 +67,7 @@ void timer_check_buttons() } else if (!cur && prev) { // --- just released --- } else if (!cur && prev) { // --- just released --- uint16_t duration = jiffies - button_start; uint16_t duration = jiffies - button_start; if (duration > SHORT_PRESS_MIN && duration < SHORT_PRESS_MAX) { if (duration >= SHORT_PRESS_MIN && duration < SHORT_PRESS_MAX) { short_press(); short_press(); } else if (duration > LONG_PRESS_MIN) { } else if (duration > LONG_PRESS_MIN) { // set_status_led(button, NULL); // set_status_led(button, NULL); Loading projects/step-up/lights.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -20,7 +20,7 @@ void inline log_word(uint16_t word) { } /* adc.c */ /* adc.c */ #define PWMLED_ADC_SHIFT 1 /* 1<<1 measurements per single callback */ #define PWMLED_ADC_SHIFT 1 /* 1<<1 measurements per single callback */ extern volatile uint16_t jiffies; extern volatile unsigned char need_battery_adc; void init_adc(); void init_adc(); void susp_adc(); void susp_adc(); Loading Loading @@ -76,6 +76,7 @@ pattern_t *status_led_pattern_select(); void set_error(unsigned char err); void set_error(unsigned char err); /* wdt.c */ /* wdt.c */ extern volatile uint16_t jiffies; void init_wdt(); void init_wdt(); void susp_wdt(); void susp_wdt(); Loading projects/step-up/main.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -71,7 +71,6 @@ int main(void) sei(); sei(); #if 1 #if 1 while (1) { while (1) { wdt_reset(); sleep_mode(); sleep_mode(); } } #endif #endif Loading projects/step-up/wdt.c +12 −1 Original line number Original line Diff line number Diff line Loading @@ -6,7 +6,8 @@ void init_wdt() void init_wdt() { { wdt_enable(WDTO_1S); wdt_enable(WDTO_60MS); WDTCR |= _BV(WDIE); } } void susp_wdt() void susp_wdt() Loading @@ -14,3 +15,13 @@ void susp_wdt() wdt_disable(); wdt_disable(); } } ISR(WDT_vect) { ++jiffies; if (jiffies & 0x000F) { need_battery_adc = 1; // about every 1s } patterns_next_tick(); timer_check_buttons(); } Loading
projects/step-up/adc.c +1 −22 Original line number Original line Diff line number Diff line Loading @@ -11,7 +11,7 @@ #define NUM_ADCS 2 #define NUM_ADCS 2 volatile static unsigned char current_adc;; volatile static unsigned char current_adc;; static unsigned char need_battery_adc; volatile unsigned char need_battery_adc; static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log; static uint16_t adc_sum, read_zero, drop_count, read_count, n_reads_log; volatile uint16_t jiffies; volatile uint16_t jiffies; Loading Loading @@ -126,30 +126,9 @@ void susp_adc() DIDR0 = 0; DIDR0 = 0; } } static void inline adc_based_timer() { static unsigned char count; if (++count < 40) // about 100 Hz jiffies return; count = 0; ++jiffies; if ((jiffies & 0x007F) == 1) { // about every 1s need_battery_adc = 1; } if ((jiffies & 0x0007) == 0) { patterns_next_tick(); } timer_check_buttons(); } ISR(ADC_vect) { // IRQ handler ISR(ADC_vect) { // IRQ handler uint16_t adcval = ADCW; uint16_t adcval = ADCW; adc_based_timer(); if (read_zero) { if (read_zero) { setup_mux(current_adc); setup_mux(current_adc); read_zero = 0; read_zero = 0; Loading
projects/step-up/buttons.c +4 −4 Original line number Original line Diff line number Diff line Loading @@ -7,9 +7,9 @@ #include "lights.h" #include "lights.h" #define WAKEUP_LIMIT 5 // times 100 ms #define WAKEUP_LIMIT 5 // times 100 ms #define SHORT_PRESS_MIN 10 // in jiffies (100 Hz ticks) #define SHORT_PRESS_MIN 2 // in jiffies (16 Hz ticks) #define SHORT_PRESS_MAX 50 #define SHORT_PRESS_MAX 5 #define LONG_PRESS_MIN 100 #define LONG_PRESS_MIN 10 static uint16_t button_start; static uint16_t button_start; static unsigned char prev_state; static unsigned char prev_state; Loading Loading @@ -67,7 +67,7 @@ void timer_check_buttons() } else if (!cur && prev) { // --- just released --- } else if (!cur && prev) { // --- just released --- uint16_t duration = jiffies - button_start; uint16_t duration = jiffies - button_start; if (duration > SHORT_PRESS_MIN && duration < SHORT_PRESS_MAX) { if (duration >= SHORT_PRESS_MIN && duration < SHORT_PRESS_MAX) { short_press(); short_press(); } else if (duration > LONG_PRESS_MIN) { } else if (duration > LONG_PRESS_MIN) { // set_status_led(button, NULL); // set_status_led(button, NULL); Loading
projects/step-up/lights.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -20,7 +20,7 @@ void inline log_word(uint16_t word) { } /* adc.c */ /* adc.c */ #define PWMLED_ADC_SHIFT 1 /* 1<<1 measurements per single callback */ #define PWMLED_ADC_SHIFT 1 /* 1<<1 measurements per single callback */ extern volatile uint16_t jiffies; extern volatile unsigned char need_battery_adc; void init_adc(); void init_adc(); void susp_adc(); void susp_adc(); Loading Loading @@ -76,6 +76,7 @@ pattern_t *status_led_pattern_select(); void set_error(unsigned char err); void set_error(unsigned char err); /* wdt.c */ /* wdt.c */ extern volatile uint16_t jiffies; void init_wdt(); void init_wdt(); void susp_wdt(); void susp_wdt(); Loading
projects/step-up/main.c +0 −1 Original line number Original line Diff line number Diff line Loading @@ -71,7 +71,6 @@ int main(void) sei(); sei(); #if 1 #if 1 while (1) { while (1) { wdt_reset(); sleep_mode(); sleep_mode(); } } #endif #endif Loading
projects/step-up/wdt.c +12 −1 Original line number Original line Diff line number Diff line Loading @@ -6,7 +6,8 @@ void init_wdt() void init_wdt() { { wdt_enable(WDTO_1S); wdt_enable(WDTO_60MS); WDTCR |= _BV(WDIE); } } void susp_wdt() void susp_wdt() Loading @@ -14,3 +15,13 @@ void susp_wdt() wdt_disable(); wdt_disable(); } } ISR(WDT_vect) { ++jiffies; if (jiffies & 0x000F) { need_battery_adc = 1; // about every 1s } patterns_next_tick(); timer_check_buttons(); }