From 3fd042cfc13c5cddc79b5a6b38e5c50e4d24c7d6 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sat, 30 Jun 2018 19:25:05 -0600 Subject: Fixed thermal regulation bug, where it used the wrong target to determine adjustment speed. Added a THERM_HARD_TURBO_DROP option, but after fixing the previous bug I'm not sure it's really needed. Decreased default temperature ceiling to 45 C (was 50). --- spaghetti-monster/anduril/anduril.c | 27 ++++++++++++++++++++++++--- spaghetti-monster/anduril/cfg-emisar-d4.h | 4 ++++ spaghetti-monster/anduril/cfg-fw3a.h | 6 ++++++ 3 files changed, 34 insertions(+), 3 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c index e79d568..0766361 100644 --- a/spaghetti-monster/anduril/anduril.c +++ b/spaghetti-monster/anduril/anduril.c @@ -28,7 +28,7 @@ #define USE_LVP // FIXME: won't build when this option is turned off #define USE_THERMAL_REGULATION -#define DEFAULT_THERM_CEIL 50 +#define DEFAULT_THERM_CEIL 45 #define MIN_THERM_STEPDOWN MAX_1x7135 // lowest value it'll step down to #ifdef MAX_Nx7135 #define THERM_DOUBLE_SPEED_LEVEL MAX_Nx7135 // throttle back faster when high @@ -590,6 +590,13 @@ uint8_t steady_state(EventPtr event, uint16_t arg) { if ((arg & 1) && (actual_level < THERM_DOUBLE_SPEED_LEVEL)) { return MISCHIEF_MANAGED; // adjust slower when not a high mode } + #ifdef THERM_HARD_TURBO_DROP + else if ((! (actual_level < THERM_DOUBLE_SPEED_LEVEL)) + && (actual_level > gradual_target)) { + gradual_tick(); + } + else { + #endif // [int(62*4 / (x**0.8)) for x in (1,2,4,8,16,32,64,128)] //uint8_t intervals[] = {248, 142, 81, 46, 26, 15, 8, 5}; // [int(62*4 / (x**0.9)) for x in (1,2,4,8,16,32,64,128)] @@ -599,13 +606,15 @@ uint8_t steady_state(EventPtr event, uint16_t arg) { uint8_t diff; static uint8_t ticks_since_adjust = 0; ticks_since_adjust ++; - if (target_level > actual_level) diff = target_level - actual_level; + if (gradual_target > actual_level) diff = gradual_target - actual_level; else { - diff = actual_level - target_level; + diff = actual_level - gradual_target; } uint8_t magnitude = 0; + #ifndef THERM_HARD_TURBO_DROP // if we're on a really high mode, drop faster if (actual_level >= THERM_DOUBLE_SPEED_LEVEL) { magnitude ++; } + #endif while (diff) { magnitude ++; diff >>= 1; @@ -617,6 +626,9 @@ uint8_t steady_state(EventPtr event, uint16_t arg) { ticks_since_adjust = 0; } //if (!(arg % ticks_per_adjust)) gradual_tick(); + #ifdef THERM_HARD_TURBO_DROP + } + #endif #endif return MISCHIEF_MANAGED; } @@ -630,6 +642,15 @@ uint8_t steady_state(EventPtr event, uint16_t arg) { delay_4ms(2); set_level(foo); #endif + #ifdef THERM_HARD_TURBO_DROP + if (actual_level > THERM_DOUBLE_SPEED_LEVEL) { + #ifdef USE_SET_LEVEL_GRADUALLY + set_level_gradually(THERM_DOUBLE_SPEED_LEVEL); + #else + set_level(THERM_DOUBLE_SPEED_LEVEL); + #endif + } else + #endif if (actual_level > MIN_THERM_STEPDOWN) { int16_t stepdown = actual_level - arg; if (stepdown < MIN_THERM_STEPDOWN) stepdown = MIN_THERM_STEPDOWN; diff --git a/spaghetti-monster/anduril/cfg-emisar-d4.h b/spaghetti-monster/anduril/cfg-emisar-d4.h index d17e2b0..a90d318 100644 --- a/spaghetti-monster/anduril/cfg-emisar-d4.h +++ b/spaghetti-monster/anduril/cfg-emisar-d4.h @@ -12,3 +12,7 @@ #define MAX_1x7135 65 #define HALFSPEED_LEVEL 14 #define QUARTERSPEED_LEVEL 5 + +// optional, makes initial turbo step-down faster so first peak isn't as hot +//#define THERM_HARD_TURBO_DROP + diff --git a/spaghetti-monster/anduril/cfg-fw3a.h b/spaghetti-monster/anduril/cfg-fw3a.h index 3df426d..2790086 100644 --- a/spaghetti-monster/anduril/cfg-fw3a.h +++ b/spaghetti-monster/anduril/cfg-fw3a.h @@ -16,3 +16,9 @@ #define HALFSPEED_LEVEL 14 #define QUARTERSPEED_LEVEL 5 +#ifdef THERM_DOUBLE_SPEED_LEVEL +#undef THERM_DOUBLE_SPEED_LEVEL +#endif +#define THERM_DOUBLE_SPEED_LEVEL MAX_Nx7135 +// optional, makes initial turbo step-down faster so first peak isn't as hot +//#define THERM_HARD_TURBO_DROP -- cgit v1.2.3