From 45e3a7758046536754f073c42ac27dc737e69fab Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Tue, 26 Sep 2017 16:47:44 -0600 Subject: Added dynamic underclocking to FSM, instead of doing it manually in Anduril. --- spaghetti-monster/anduril/anduril.c | 29 +++++------------------------ spaghetti-monster/fsm-events.c | 30 ++++++++++++++++++++++++++++++ spaghetti-monster/fsm-misc.c | 19 +++++++++++++++++++ spaghetti-monster/fsm-misc.h | 4 ++++ spaghetti-monster/fsm-ramping.c | 3 +++ spaghetti-monster/fsm-ramping.h | 2 ++ 6 files changed, 63 insertions(+), 24 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c index 1044398..6740e23 100644 --- a/spaghetti-monster/anduril/anduril.c +++ b/spaghetti-monster/anduril/anduril.c @@ -23,8 +23,6 @@ #define USE_LVP #define USE_THERMAL_REGULATION #define DEFAULT_THERM_CEIL 50 -#define USE_DELAY_MS -#define USE_DELAY_4MS #define USE_DELAY_ZERO #define USE_RAMPING #define USE_SET_LEVEL_GRADUALLY @@ -37,9 +35,7 @@ #define USE_EEPROM #define EEPROM_BYTES 12 #define USE_IDLE_MODE -#define MOON_POWERSAVE // cut clock speed at very low modes for better efficiency -//#define HALFSPEED_LEVEL 30 // looks good, but sounds bad -#define HALFSPEED_LEVEL 14 +#define USE_DYNAMIC_UNDERCLOCKING // cut clock speed at very low modes for better efficiency #include "spaghetti-monster.h" // Options specific to this UI (not inherited from SpaghettiMonster) @@ -966,27 +962,12 @@ void loop() { || (state == off_state) || (state == lockout_state) || (state == goodnight_state) ) { - #ifdef MOON_POWERSAVE - if (actual_level < 5) { - // run at quarter speed - CLKPR = 1<> 1); } diff --git a/spaghetti-monster/fsm-events.c b/spaghetti-monster/fsm-events.c index 5448feb..e965224 100644 --- a/spaghetti-monster/fsm-events.c +++ b/spaghetti-monster/fsm-events.c @@ -116,8 +116,26 @@ inline void interrupt_nice_delays() { nice_delay_interrupt = 1; } // 1: normal completion uint8_t nice_delay_ms(uint16_t ms) { StatePtr old_state = current_state; + /* // delay_zero() implementation + if (ms == 0) { + CLKPR = 1< 0) { + #ifdef USE_DYNAMIC_UNDERCLOCKING + // underclock MCU to save power + CLKPR = 1< 0) { + // underclock MCU to save power + CLKPR = 1<