From c3e0370b57fc8ee4c237233b80532a07eb8b543d Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Tue, 25 Feb 2020 23:32:00 -0700 Subject: Added template files for Noctigon K1 12V model. --- spaghetti-monster/anduril/cfg-noctigon-k1-12v.h | 70 +++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 spaghetti-monster/anduril/cfg-noctigon-k1-12v.h (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h new file mode 100644 index 0000000..38a672f --- /dev/null +++ b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h @@ -0,0 +1,70 @@ +// Noctigon K1 12V config options for Anduril +#include "hwdef-Noctigon_K1-12V.h" +// ATTINY: 1634 + +// this light can safely run a bit hotter than most +#undef DEFAULT_THERM_CEIL +#define DEFAULT_THERM_CEIL 55 + +// this light has three aux LED channels: R, G, B +#define USE_AUX_RGB_LEDS +#define USE_AUX_RGB_LEDS_WHILE_ON +#define USE_INDICATOR_LED_WHILE_RAMPING +#define RGB_LED_OFF_DEFAULT 0x18 // low, voltage +#define RGB_LED_LOCKOUT_DEFAULT 0x37 // blinking, rainbow + +// enable blinking aux LEDs +#define TICK_DURING_STANDBY +#define STANDBY_TICK_SPEED 3 // every 0.128 s + + +// ../../bin/level_calc.py cube 1 150 7135 1 4 1300 +// (with max_pwm set to 1023) +#define RAMP_LENGTH 150 +#define PWM1_LEVELS 1,1,2,2,3,3,4,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,24,26,27,29,31,32,34,36,38,40,43,45,47,49,52,54,57,60,62,65,68,71,74,77,81,84,87,91,95,98,102,106,110,114,118,122,127,131,136,141,145,150,155,160,166,171,176,182,188,193,199,205,211,218,224,231,237,244,251,258,265,272,280,287,295,303,310,319,327,335,344,352,361,370,379,388,397,407,416,426,436,446,457,467,477,488,499,510,521,533,544,556,568,580,592,604,617,629,642,655,668,682,695,709,723,737,751,766,781,795,810,826,841,857,872,888,904,921,937,954,971,988,1005,1023 +#define MAX_1x7135 50 + +// the entire ramp is regulated; don't blink halfway up +#ifdef BLINK_AT_RAMP_MIDDLE +#undef BLINK_AT_RAMP_MIDDLE +#endif + +// don't slow down at low levels; this isn't that sort of light +// (it needs to stay at full speed for the 10-bit PWM to work) +#ifdef USE_DYNAMIC_UNDERCLOCKING +#undef USE_DYNAMIC_UNDERCLOCKING +#endif + +#define RAMP_SMOOTH_FLOOR 1 +#define RAMP_SMOOTH_CEIL 130 +// 10, 30, [50], 70, 90, 110, 130 +#define RAMP_DISCRETE_FLOOR 10 +#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL +#define RAMP_DISCRETE_STEPS 7 + +#define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR +#define MUGGLE_CEILING 70 + +// optional, makes initial turbo step-down faster so first peak isn't as hot +// the D4 runs very very hot, so be extra careful +//#define THERM_HARD_TURBO_DROP + +// stop panicking at ~70% power or ~600 lm +#define THERM_FASTER_LEVEL 130 +// respond to thermal changes faster +#define THERMAL_WARNING_SECONDS 3 +#define THERMAL_UPDATE_SPEED 1 +#define THERM_PREDICTION_STRENGTH 4 + +// easier access to thermal config mode, for Noctigon +#define USE_TENCLICK_THERMAL_CONFIG + +// slow down party strobe; this driver can't pulse for 1ms or less +#define PARTY_STROBE_ONTIME 2 + +#define THERM_CAL_OFFSET 5 + +// attiny1634 has enough space to smooth out voltage readings +// (prevent the button from blinking during use) +#define USE_VOLTAGE_LOWPASS + -- cgit v1.2.3 From 7d07887e11cf7804ce8eb15fac666551b9a2497e Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Tue, 25 Feb 2020 23:43:33 -0700 Subject: added support for boost PMIC enable pin (K1 12V has 2 pins which need to turn on/off for main LED output) --- spaghetti-monster/fsm-ramping.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/fsm-ramping.c b/spaghetti-monster/fsm-ramping.c index 20500cc..bae601e 100644 --- a/spaghetti-monster/fsm-ramping.c +++ b/spaghetti-monster/fsm-ramping.c @@ -72,6 +72,9 @@ void set_level(uint8_t level) { #ifdef LED_ENABLE_PIN LED_ENABLE_PORT &= ~(1 << LED_ENABLE_PIN); #endif + #ifdef LED_ENABLE2_PIN + LED_ENABLE2_PORT &= ~(1 << LED_ENABLE2_PIN); + #endif } else { level --; @@ -79,6 +82,9 @@ void set_level(uint8_t level) { #ifdef LED_ENABLE_PIN LED_ENABLE_PORT |= (1 << LED_ENABLE_PIN); #endif + #ifdef LED_ENABLE2_PIN + LED_ENABLE2_PORT |= (1 << LED_ENABLE2_PIN); + #endif #ifdef USE_TINT_RAMPING #ifndef TINT_RAMPING_CORRECTION -- cgit v1.2.3 From 93cdcd9d46772d559fccb2ba0d4d26127fa193ce Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Wed, 26 Feb 2020 00:02:37 -0700 Subject: K1 12V needs party strobe slowed down even more --- spaghetti-monster/anduril/cfg-noctigon-k1-12v.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h index 38a672f..12f69de 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h +++ b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h @@ -60,7 +60,7 @@ #define USE_TENCLICK_THERMAL_CONFIG // slow down party strobe; this driver can't pulse for 1ms or less -#define PARTY_STROBE_ONTIME 2 +#define PARTY_STROBE_ONTIME 4 #define THERM_CAL_OFFSET 5 -- cgit v1.2.3 From c0ffafddc1c2aea1cde4ab6d7ad805fc4bcc32de Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Thu, 27 Feb 2020 23:13:15 -0700 Subject: fixed eeprom corruption after turning boost chip on/off (boost chip apparently makes power unstable for a few ms, so we have to wait before accessing eeprom) --- spaghetti-monster/fsm-eeprom.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/fsm-eeprom.c b/spaghetti-monster/fsm-eeprom.c index 277e2b2..77352cf 100644 --- a/spaghetti-monster/fsm-eeprom.c +++ b/spaghetti-monster/fsm-eeprom.c @@ -30,6 +30,10 @@ uint8_t eeprom[EEPROM_BYTES]; #endif uint8_t load_eeprom() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // check if eeprom has been initialized; abort if it hasn't uint8_t marker = eeprom_read_byte((uint8_t *)EEP_START); @@ -44,6 +48,10 @@ uint8_t load_eeprom() { } void save_eeprom() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // save the actual data @@ -62,6 +70,10 @@ uint8_t eeprom_wl[EEPROM_WL_BYTES]; EEP_OFFSET_T eep_wl_prev_offset; uint8_t load_eeprom_wl() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // check if eeprom has been initialized; abort if it hasn't uint8_t found = 0; @@ -87,6 +99,10 @@ uint8_t load_eeprom_wl() { } void save_eeprom_wl() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // erase old state EEP_OFFSET_T offset = eep_wl_prev_offset; -- cgit v1.2.3 From 4d1c7a34fd00a4dd19e591ea0602f0f47f10d9f0 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Thu, 5 Mar 2020 17:51:27 -0700 Subject: initial support for Noctigon KR4 (not complete, but far enough that it installs and runs) New hardware support features: - allow using PCINT other than 0 (PCINT1, PCINT2, etc) - option to ignore voltage ADC while the button is pressed (because my prototype shorts the voltage divider to 0 while the button is down) --- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 66 ++++++++++++++++++++++++++++ spaghetti-monster/fsm-adc.c | 6 +++ spaghetti-monster/fsm-pcint.c | 4 ++ 3 files changed, 76 insertions(+) create mode 100644 spaghetti-monster/anduril/cfg-noctigon-kr4.h (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h new file mode 100644 index 0000000..87be78e --- /dev/null +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -0,0 +1,66 @@ +// Noctigon KR4 config options for Anduril +#include "hwdef-Noctigon_KR4.h" +// ATTINY: 1634 + +// this light has three aux LED channels: R, G, B +#define USE_AUX_RGB_LEDS +//#define USE_AUX_RGB_LEDS_WHILE_ON +//#define USE_INDICATOR_LED_WHILE_RAMPING +#define RGB_LED_OFF_DEFAULT 0x18 // low, voltage +#define RGB_LED_LOCKOUT_DEFAULT 0x37 // blinking, rainbow + +// enable blinking aux LEDs +#define TICK_DURING_STANDBY +#define STANDBY_TICK_SPEED 3 // every 0.128 s + + +// ../../bin/level_calc.py cube 1 150 7135 1 4 1300 +// (with max_pwm set to 1023) +#define RAMP_LENGTH 150 +#define PWM1_LEVELS 1,1,2,2,3,3,4,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,24,26,27,29,31,32,34,36,38,40,43,45,47,49,52,54,57,60,62,65,68,71,74,77,81,84,87,91,95,98,102,106,110,114,118,122,127,131,136,141,145,150,155,160,166,171,176,182,188,193,199,205,211,218,224,231,237,244,251,258,265,272,280,287,295,303,310,319,327,335,344,352,361,370,379,388,397,407,416,426,436,446,457,467,477,488,499,510,521,533,544,556,568,580,592,604,617,629,642,655,668,682,695,709,723,737,751,766,781,795,810,826,841,857,872,888,904,921,937,954,971,988,1005,1023 +#define MAX_1x7135 50 + +// the entire ramp is regulated; don't blink halfway up +#ifdef BLINK_AT_RAMP_MIDDLE +#undef BLINK_AT_RAMP_MIDDLE +#endif + +// don't slow down at low levels; this isn't that sort of light +// (it needs to stay at full speed for the 10-bit PWM to work) +#ifdef USE_DYNAMIC_UNDERCLOCKING +#undef USE_DYNAMIC_UNDERCLOCKING +#endif + +#define RAMP_SMOOTH_FLOOR 1 +#define RAMP_SMOOTH_CEIL 130 +// 10, 30, [50], 70, 90, 110, 130 +#define RAMP_DISCRETE_FLOOR 10 +#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL +#define RAMP_DISCRETE_STEPS 7 + +#define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR +#define MUGGLE_CEILING 70 + +// optional, makes initial turbo step-down faster so first peak isn't as hot +// the KR4 runs very very hot on turbo, so be extra careful +//#define THERM_HARD_TURBO_DROP + +// stop panicking at ~70% power or ~600 lm +#define THERM_FASTER_LEVEL 130 +// respond to thermal changes faster +#define THERMAL_WARNING_SECONDS 3 +#define THERMAL_UPDATE_SPEED 1 +#define THERM_PREDICTION_STRENGTH 4 + +// easier access to thermal config mode, for Noctigon +#define USE_TENCLICK_THERMAL_CONFIG + +// slow down party strobe; this driver can't pulse for 1ms or less +#define PARTY_STROBE_ONTIME 2 + +#define THERM_CAL_OFFSET 5 + +// attiny1634 has enough space to smooth out voltage readings +// (prevent the button from blinking during use) +//#define USE_VOLTAGE_LOWPASS + diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index 2a3c5c6..2d8d01f 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -206,6 +206,12 @@ static inline void ADC_voltage_handler() { #define LVP_TIMER_START (VOLTAGE_WARNING_SECONDS*ADC_CYCLES_PER_SECOND) // N seconds between LVP warnings #define LVP_LOWPASS_STRENGTH ADC_CYCLES_PER_SECOND // lowpass for one second + #ifdef NO_LVP_WHILE_BUTTON_PRESSED + // don't run if button is currently being held + // (because the button causes a reading of zero volts) + if (button_last_state) return; + #endif + uint16_t measurement = adc_values[0]; // latest 10-bit ADC reading #ifdef USE_VOLTAGE_LOWPASS diff --git a/spaghetti-monster/fsm-pcint.c b/spaghetti-monster/fsm-pcint.c index 1ba1c15..d362633 100644 --- a/spaghetti-monster/fsm-pcint.c +++ b/spaghetti-monster/fsm-pcint.c @@ -66,7 +66,11 @@ inline void PCINT_off() { //void button_change_interrupt() { #if (ATTINY == 25) || (ATTINY == 45) || (ATTINY == 85) || (ATTINY == 1634) //EMPTY_INTERRUPT(PCINT0_vect); +#ifdef PCINT_vect +ISR(PCINT_vect) { +#else ISR(PCINT0_vect) { +#endif irq_pcint = 1; } #else -- cgit v1.2.3 From 490630291c3fb10fc63801645116a73b4c7a5e73 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Fri, 6 Mar 2020 03:20:26 -0700 Subject: KR4: added FET channel, measured output, calibrated ramp --- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 87be78e..8971fca 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -14,11 +14,19 @@ #define STANDBY_TICK_SPEED 3 // every 0.128 s -// ../../bin/level_calc.py cube 1 150 7135 1 4 1300 +// brightness w/ SST-20 4000K LEDs: +// 0/1023: 0.35 lm +// 1/1023: 2.56 lm +// max regulated: 1740 lm +// FET: ~3700 lm +// level_calc.py 3.0 2 150 7135 0 2.5 1740 FET 1 10 2565 // (with max_pwm set to 1023) +// (designed to hit max regulated at 130/150) #define RAMP_LENGTH 150 -#define PWM1_LEVELS 1,1,2,2,3,3,4,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,24,26,27,29,31,32,34,36,38,40,43,45,47,49,52,54,57,60,62,65,68,71,74,77,81,84,87,91,95,98,102,106,110,114,118,122,127,131,136,141,145,150,155,160,166,171,176,182,188,193,199,205,211,218,224,231,237,244,251,258,265,272,280,287,295,303,310,319,327,335,344,352,361,370,379,388,397,407,416,426,436,446,457,467,477,488,499,510,521,533,544,556,568,580,592,604,617,629,642,655,668,682,695,709,723,737,751,766,781,795,810,826,841,857,872,888,904,921,937,954,971,988,1005,1023 +#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12,13,15,16,17,19,21,22,24,26,28,30,32,34,36,39,41,44,47,49,52,55,58,62,65,68,72,76,80,84,88,92,96,101,105,110,115,120,125,131,136,142,147,153,159,166,172,179,185,192,199,206,214,221,229,237,245,253,262,270,279,288,298,307,317,326,336,346,357,367,378,389,401,412,424,436,448,460,472,485,498,511,525,539,552,567,581,596,611,626,641,657,673,689,705,722,739,756,773,791,809,827,846,864,883,903,922,942,962,983,1003,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,0 +#define PWM2_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,83,130,177,225,273,323,372,423,474,526,578,632,686,740,795,851,908,965,1023 #define MAX_1x7135 50 +#define MAX_Nx7135 130 // the entire ramp is regulated; don't blink halfway up #ifdef BLINK_AT_RAMP_MIDDLE -- cgit v1.2.3 From 99d1551da9cfba76840ad69cf337728dd08b3f3d Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Fri, 6 Mar 2020 03:32:30 -0700 Subject: FET ramp was too steep; slowed it down by 50% (20 steps -> 30 steps) --- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 8971fca..7771cd4 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -19,14 +19,13 @@ // 1/1023: 2.56 lm // max regulated: 1740 lm // FET: ~3700 lm -// level_calc.py 3.0 2 150 7135 0 2.5 1740 FET 1 10 2565 -// (with max_pwm set to 1023) -// (designed to hit max regulated at 130/150) +// maxreg at 130: level_calc.py cube 2 150 7135 0 2.5 1740 FET 1 10 2565 +// maxreg at 120: level_calc.py cube 2 150 7135 0 2.5 1740 FET 1 10 3190 #define RAMP_LENGTH 150 -#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12,13,15,16,17,19,21,22,24,26,28,30,32,34,36,39,41,44,47,49,52,55,58,62,65,68,72,76,80,84,88,92,96,101,105,110,115,120,125,131,136,142,147,153,159,166,172,179,185,192,199,206,214,221,229,237,245,253,262,270,279,288,298,307,317,326,336,346,357,367,378,389,401,412,424,436,448,460,472,485,498,511,525,539,552,567,581,596,611,626,641,657,673,689,705,722,739,756,773,791,809,827,846,864,883,903,922,942,962,983,1003,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,0 -#define PWM2_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,83,130,177,225,273,323,372,423,474,526,578,632,686,740,795,851,908,965,1023 -#define MAX_1x7135 50 -#define MAX_Nx7135 130 +#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,6,7,8,9,10,11,13,14,15,17,19,20,22,24,26,28,30,33,35,38,40,43,46,49,52,55,59,62,66,70,74,78,82,86,91,96,100,105,111,116,121,127,133,139,145,151,158,165,172,179,186,193,201,209,217,225,234,243,251,261,270,280,289,299,310,320,331,342,353,364,376,388,400,412,425,438,451,464,478,492,506,521,536,551,566,582,597,614,630,647,664,681,699,717,735,754,772,792,811,831,851,871,892,913,935,956,978,1001,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,0 +#define PWM2_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,51,79,109,138,168,198,229,260,292,324,357,390,423,457,492,527,562,598,634,671,708,746,784,822,861,901,941,982,1023 +#define MAX_1x7135 46 +#define MAX_Nx7135 120 // the entire ramp is regulated; don't blink halfway up #ifdef BLINK_AT_RAMP_MIDDLE @@ -40,21 +39,21 @@ #endif #define RAMP_SMOOTH_FLOOR 1 -#define RAMP_SMOOTH_CEIL 130 -// 10, 30, [50], 70, 90, 110, 130 +#define RAMP_SMOOTH_CEIL 120 +// 10, 28, [46], 65, 83, 101, [120] #define RAMP_DISCRETE_FLOOR 10 #define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL #define RAMP_DISCRETE_STEPS 7 #define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR -#define MUGGLE_CEILING 70 +#define MUGGLE_CEILING 65 // optional, makes initial turbo step-down faster so first peak isn't as hot // the KR4 runs very very hot on turbo, so be extra careful //#define THERM_HARD_TURBO_DROP // stop panicking at ~70% power or ~600 lm -#define THERM_FASTER_LEVEL 130 +#define THERM_FASTER_LEVEL 120 // respond to thermal changes faster #define THERMAL_WARNING_SECONDS 3 #define THERMAL_UPDATE_SPEED 1 -- cgit v1.2.3 From a9dfc872aab50767a2e7749b70e9ed6c61e579cb Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Mon, 16 Mar 2020 02:45:25 -0600 Subject: added FETless KR4 build target, calibrated other KR4 therm faster level better --- spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h | 45 ++++++++++++++++++++++ spaghetti-monster/anduril/cfg-noctigon-kr4.h | 4 +- 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h new file mode 100644 index 0000000..66177bf --- /dev/null +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h @@ -0,0 +1,45 @@ +// Noctigon KR4 (fetless) config options for Anduril +#include "cfg-noctigon-kr4.h" +// ATTINY: 1634 + +// brightness w/ SST-20 4000K LEDs: +// 0/1023: 0.35 lm +// 1/1023: 2.56 lm +// max regulated: 1740 lm +// level_calc.py 3.0 1 150 7135 0 5 1740 +#undef PWM_CHANNELS +#define PWM_CHANNELS 1 +#define RAMP_LENGTH 150 +#undef PWM1_LEVELS +#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,23,24,26,27,29,31,33,35,37,39,41,43,45,48,50,53,55,58,61,63,66,69,72,75,79,82,85,89,92,96,100,104,108,112,116,120,125,129,134,138,143,148,153,158,163,169,174,180,185,191,197,203,209,215,222,228,235,242,248,255,263,270,277,285,292,300,308,316,324,333,341,350,359,368,377,386,395,405,414,424,434,444,454,465,475,486,497,508,519,531,542,554,566,578,590,603,615,628,641,654,667,680,694,708,722,736,750,765,779,794,809,825,840,856,872,888,904,920,937,954,971,988,1005,1023 +#undef PWM2_LEVELS +#undef MAX_1x7135 +#define MAX_1x7135 50 +#undef MAX_Nx7135 + +#undef RAMP_SMOOTH_FLOOR +#undef RAMP_SMOOTH_CEIL +#undef RAMP_DISCRETE_FLOOR +#undef RAMP_DISCRETE_CEIL +#undef RAMP_DISCRETE_STEPS + +#define RAMP_SMOOTH_FLOOR 1 +#define RAMP_SMOOTH_CEIL 130 +// 10, 30, [50], 70, 90, 110, 130 (plus [150] on turbo) +#define RAMP_DISCRETE_FLOOR 10 +#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL +#define RAMP_DISCRETE_STEPS 7 + +#undef MUGGLE_FLOOR +#undef MUGGLE_CEILING +#define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR +#define MUGGLE_CEILING 70 + +// stop panicking at ~70% power or ~1200 lm +#undef THERM_FASTER_LEVEL +#define THERM_FASTER_LEVEL 130 +// respond to thermal changes faster +#define THERMAL_WARNING_SECONDS 3 +#define THERMAL_UPDATE_SPEED 1 +#define THERM_PREDICTION_STRENGTH 4 + diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 7771cd4..9b810ab 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -52,8 +52,8 @@ // the KR4 runs very very hot on turbo, so be extra careful //#define THERM_HARD_TURBO_DROP -// stop panicking at ~70% power or ~600 lm -#define THERM_FASTER_LEVEL 120 +// stop panicking at ~25% power or ~1000 lm +#define THERM_FASTER_LEVEL 100 // respond to thermal changes faster #define THERMAL_WARNING_SECONDS 3 #define THERMAL_UPDATE_SPEED 1 -- cgit v1.2.3 From 227b54b1095e47ae9d0ab4b4c2a49862fd708559 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Mon, 16 Mar 2020 04:13:55 -0600 Subject: fixed calc_voltage_divider() (use 10-bit calibration values, not 8-bit) --- spaghetti-monster/fsm-adc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index 7880238..e7b7feb 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -112,7 +112,7 @@ inline void ADC_off() { #ifdef USE_VOLTAGE_DIVIDER static inline uint8_t calc_voltage_divider(uint16_t value) { // use 9.7 fixed-point to get sufficient precision - uint16_t adc_per_volt = ((ADC_44<<7) - (ADC_22<<7)) / (44-22); + uint16_t adc_per_volt = ((ADC_44<<5) - (ADC_22<<5)) / (44-22); // shift incoming value into a matching position uint8_t result = ((value>>1) / adc_per_volt) + VOLTAGE_FUDGE_FACTOR; return result; -- cgit v1.2.3 From a749a489c0895388336b1f2ac532b345243fa5f7 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Mon, 16 Mar 2020 04:16:12 -0600 Subject: removed old thermal junk and voltage_lowpass junk from cfg files --- spaghetti-monster/anduril/cfg-noctigon-k1.h | 12 ------------ spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h | 5 ----- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 12 ------------ 3 files changed, 29 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-k1.h b/spaghetti-monster/anduril/cfg-noctigon-k1.h index 6a8e8ee..4db8787 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-k1.h +++ b/spaghetti-monster/anduril/cfg-noctigon-k1.h @@ -46,16 +46,8 @@ #define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR #define MUGGLE_CEILING 70 -// optional, makes initial turbo step-down faster so first peak isn't as hot -// the D4 runs very very hot, so be extra careful -//#define THERM_HARD_TURBO_DROP - // stop panicking at ~70% power or ~600 lm #define THERM_FASTER_LEVEL 130 -// respond to thermal changes faster -#define THERMAL_WARNING_SECONDS 3 -#define THERMAL_UPDATE_SPEED 1 -#define THERM_PREDICTION_STRENGTH 4 // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG @@ -65,7 +57,3 @@ #define THERM_CAL_OFFSET 5 -// attiny1634 has enough space to smooth out voltage readings -// (prevent the button from blinking during use) -#define USE_VOLTAGE_LOWPASS - diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h index 66177bf..0434258 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h @@ -38,8 +38,3 @@ // stop panicking at ~70% power or ~1200 lm #undef THERM_FASTER_LEVEL #define THERM_FASTER_LEVEL 130 -// respond to thermal changes faster -#define THERMAL_WARNING_SECONDS 3 -#define THERMAL_UPDATE_SPEED 1 -#define THERM_PREDICTION_STRENGTH 4 - diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 9b810ab..d3e6d7b 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -48,16 +48,8 @@ #define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR #define MUGGLE_CEILING 65 -// optional, makes initial turbo step-down faster so first peak isn't as hot -// the KR4 runs very very hot on turbo, so be extra careful -//#define THERM_HARD_TURBO_DROP - // stop panicking at ~25% power or ~1000 lm #define THERM_FASTER_LEVEL 100 -// respond to thermal changes faster -#define THERMAL_WARNING_SECONDS 3 -#define THERMAL_UPDATE_SPEED 1 -#define THERM_PREDICTION_STRENGTH 4 // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG @@ -67,7 +59,3 @@ #define THERM_CAL_OFFSET 5 -// attiny1634 has enough space to smooth out voltage readings -// (prevent the button from blinking during use) -//#define USE_VOLTAGE_LOWPASS - -- cgit v1.2.3 From 7134924ce13956770ff07ae5da978b6f2061b00e Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Fri, 20 Mar 2020 00:07:34 -0600 Subject: added reboot() support for tiny1634 --- spaghetti-monster/fsm-misc.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/fsm-misc.c b/spaghetti-monster/fsm-misc.c index 152f047..82be745 100644 --- a/spaghetti-monster/fsm-misc.c +++ b/spaghetti-monster/fsm-misc.c @@ -231,18 +231,20 @@ uint8_t triangle_wave(uint8_t phase) { #ifdef USE_REBOOT void reboot() { - #if 1 // WDT method, safer but larger + // put the WDT in hard reset mode, then trigger it cli(); - WDTCR = 0xD8 | WDTO_15MS; + #if (ATTINY == 25) || (ATTINY == 45) || (ATTINY == 85) + WDTCR = 0xD8 | WDTO_15MS; + #elif (ATTINY == 1634) + // allow protected configuration changes for next 4 clock cycles + CCP = 0xD8; // magic number + // reset (WDIF + WDE), no WDIE, fastest (16ms) timing (0000) + // (DS section 8.5.2 and table 8-4) + WDTCSR = 0b10001000; + #endif sei(); wdt_reset(); while (1) {} - #else // raw assembly method, doesn't reset registers or anything - __asm__ __volatile__ ( - "cli" "\n\t" - "rjmp 0x00" "\n\t" - ); - #endif } #endif -- cgit v1.2.3 From 8d5584c789fe95a97a8385adfce8c52c572c1536 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Fri, 20 Mar 2020 00:09:04 -0600 Subject: enabled soft factory reset on KR4, raised default floor to the lowest reliable level (moon level 1 flickers or doesn't work at all on some hardware) --- spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h | 2 +- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h index 0434258..0e53e5f 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h @@ -23,7 +23,7 @@ #undef RAMP_DISCRETE_CEIL #undef RAMP_DISCRETE_STEPS -#define RAMP_SMOOTH_FLOOR 1 +#define RAMP_SMOOTH_FLOOR 3 // level 1 is unreliable #define RAMP_SMOOTH_CEIL 130 // 10, 30, [50], 70, 90, 110, 130 (plus [150] on turbo) #define RAMP_DISCRETE_FLOOR 10 diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index d3e6d7b..6f52eb3 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -38,7 +38,7 @@ #undef USE_DYNAMIC_UNDERCLOCKING #endif -#define RAMP_SMOOTH_FLOOR 1 +#define RAMP_SMOOTH_FLOOR 3 // level 1 is unreliable #define RAMP_SMOOTH_CEIL 120 // 10, 28, [46], 65, 83, 101, [120] #define RAMP_DISCRETE_FLOOR 10 @@ -59,3 +59,5 @@ #define THERM_CAL_OFFSET 5 +// can't reset the normal way because power is connected before the button +#define USE_SOFT_FACTORY_RESET -- cgit v1.2.3 From 52c58c46f7c9c7aced3a5eb174c88d444a6d8a57 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sat, 21 Mar 2020 21:03:42 -0600 Subject: fixed potential eeprom corruption after turning boost/opamp chip on/off (some boost chips can make power unstable for a few ms, so we have to wait before accessing eeprom) --- spaghetti-monster/fsm-eeprom.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/fsm-eeprom.c b/spaghetti-monster/fsm-eeprom.c index 277e2b2..77352cf 100644 --- a/spaghetti-monster/fsm-eeprom.c +++ b/spaghetti-monster/fsm-eeprom.c @@ -30,6 +30,10 @@ uint8_t eeprom[EEPROM_BYTES]; #endif uint8_t load_eeprom() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // check if eeprom has been initialized; abort if it hasn't uint8_t marker = eeprom_read_byte((uint8_t *)EEP_START); @@ -44,6 +48,10 @@ uint8_t load_eeprom() { } void save_eeprom() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // save the actual data @@ -62,6 +70,10 @@ uint8_t eeprom_wl[EEPROM_WL_BYTES]; EEP_OFFSET_T eep_wl_prev_offset; uint8_t load_eeprom_wl() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // check if eeprom has been initialized; abort if it hasn't uint8_t found = 0; @@ -87,6 +99,10 @@ uint8_t load_eeprom_wl() { } void save_eeprom_wl() { + #ifdef LED_ENABLE_PIN + delay_4ms(2); // wait for power to stabilize + #endif + cli(); // erase old state EEP_OFFSET_T offset = eep_wl_prev_offset; -- cgit v1.2.3 From 9caa6cd6daf4875856e0d91247d8e9f46fa5f2ad Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sat, 21 Mar 2020 21:23:21 -0600 Subject: added dynamic underclocking to KR4 to increase moon runtime, fixed ramp milestone levels --- spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h | 8 ++++++-- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 18 +++++------------- 2 files changed, 11 insertions(+), 15 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h index 0e53e5f..00751fd 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h @@ -13,9 +13,10 @@ #undef PWM1_LEVELS #define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,11,12,13,15,16,17,18,20,21,23,24,26,27,29,31,33,35,37,39,41,43,45,48,50,53,55,58,61,63,66,69,72,75,79,82,85,89,92,96,100,104,108,112,116,120,125,129,134,138,143,148,153,158,163,169,174,180,185,191,197,203,209,215,222,228,235,242,248,255,263,270,277,285,292,300,308,316,324,333,341,350,359,368,377,386,395,405,414,424,434,444,454,465,475,486,497,508,519,531,542,554,566,578,590,603,615,628,641,654,667,680,694,708,722,736,750,765,779,794,809,825,840,856,872,888,904,920,937,954,971,988,1005,1023 #undef PWM2_LEVELS +#undef DEFAULT_LEVEL +#define DEFAULT_LEVEL 50 #undef MAX_1x7135 -#define MAX_1x7135 50 -#undef MAX_Nx7135 +#define MAX_1x7135 150 #undef RAMP_SMOOTH_FLOOR #undef RAMP_SMOOTH_CEIL @@ -38,3 +39,6 @@ // stop panicking at ~70% power or ~1200 lm #undef THERM_FASTER_LEVEL #define THERM_FASTER_LEVEL 130 +#undef MIN_THERM_STEPDOWN +#define MIN_THERM_STEPDOWN DEFAULT_LEVEL + diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 6f52eb3..98dc209 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -24,19 +24,10 @@ #define RAMP_LENGTH 150 #define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,6,7,8,9,10,11,13,14,15,17,19,20,22,24,26,28,30,33,35,38,40,43,46,49,52,55,59,62,66,70,74,78,82,86,91,96,100,105,111,116,121,127,133,139,145,151,158,165,172,179,186,193,201,209,217,225,234,243,251,261,270,280,289,299,310,320,331,342,353,364,376,388,400,412,425,438,451,464,478,492,506,521,536,551,566,582,597,614,630,647,664,681,699,717,735,754,772,792,811,831,851,871,892,913,935,956,978,1001,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,0 #define PWM2_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,51,79,109,138,168,198,229,260,292,324,357,390,423,457,492,527,562,598,634,671,708,746,784,822,861,901,941,982,1023 -#define MAX_1x7135 46 -#define MAX_Nx7135 120 - -// the entire ramp is regulated; don't blink halfway up -#ifdef BLINK_AT_RAMP_MIDDLE -#undef BLINK_AT_RAMP_MIDDLE -#endif - -// don't slow down at low levels; this isn't that sort of light -// (it needs to stay at full speed for the 10-bit PWM to work) -#ifdef USE_DYNAMIC_UNDERCLOCKING -#undef USE_DYNAMIC_UNDERCLOCKING -#endif +#define DEFAULT_LEVEL 46 +#define MAX_1x7135 120 +#define HALFSPEED_LEVEL 10 +#define QUARTERSPEED_LEVEL 2 #define RAMP_SMOOTH_FLOOR 3 // level 1 is unreliable #define RAMP_SMOOTH_CEIL 120 @@ -50,6 +41,7 @@ // stop panicking at ~25% power or ~1000 lm #define THERM_FASTER_LEVEL 100 +#define MIN_THERM_STEPDOWN DEFAULT_LEVEL // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG -- cgit v1.2.3 From ef1d96b85485000e70ef5423c9494eb91286d3d7 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Thu, 26 Mar 2020 03:46:47 -0600 Subject: made thermal regulation use a smaller target window, and prioritize cooling more --- spaghetti-monster/fsm-adc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index e7b7feb..edf1809 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -362,7 +362,7 @@ static inline void ADC_temperature_handler() { // (but a diff of 1 C should only send a warning of magnitude 1) // (this also makes it only respond to small errors at the time the error // happened, not after the temperature has stabilized) - for(uint8_t foo=0; foo<5; foo++) { + for(uint8_t foo=0; foo<3; foo++) { if (offset > 0) { offset --; } else if (offset < 0) { @@ -371,8 +371,8 @@ static inline void ADC_temperature_handler() { } // Too hot? - // (if it's too hot and still getting warmer...) - if ((offset > 0) && (diff > 0)) { + // (if it's too hot and not getting cooler...) + if ((offset > 0) && (diff > -1)) { // accumulated error isn't big enough yet to send a warning if (warning_threshold > 0) { warning_threshold -= offset; -- cgit v1.2.3 From b6059fdcaad276f65d55e73ce8b3003e884684ad Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Thu, 26 Mar 2020 03:47:46 -0600 Subject: Noctigon KR4 needed tighter/faster thermal response, and Hank wants RGB rainbow to be default instead of voltage mode. --- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 98dc209..01310b5 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -6,7 +6,7 @@ #define USE_AUX_RGB_LEDS //#define USE_AUX_RGB_LEDS_WHILE_ON //#define USE_INDICATOR_LED_WHILE_RAMPING -#define RGB_LED_OFF_DEFAULT 0x18 // low, voltage +#define RGB_LED_OFF_DEFAULT 0x17 // low, rainbow #define RGB_LED_LOCKOUT_DEFAULT 0x37 // blinking, rainbow // enable blinking aux LEDs @@ -42,6 +42,8 @@ // stop panicking at ~25% power or ~1000 lm #define THERM_FASTER_LEVEL 100 #define MIN_THERM_STEPDOWN DEFAULT_LEVEL +#define THERM_LOOKAHEAD 6 +#define THERM_NEXT_WARNING_THRESHOLD 12 // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG -- cgit v1.2.3 From 691abdd22f83a9e8a35e2887e6345fb4234fba7c Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sat, 28 Mar 2020 19:44:26 -0600 Subject: added a Noctigon KR4 219 (75% FET) build target --- spaghetti-monster/anduril/cfg-noctigon-kr4-219.h | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 spaghetti-monster/anduril/cfg-noctigon-kr4-219.h (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4-219.h b/spaghetti-monster/anduril/cfg-noctigon-kr4-219.h new file mode 100644 index 0000000..0cfccf2 --- /dev/null +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4-219.h @@ -0,0 +1,11 @@ +// Noctigon KR4 (75% FET) config options for Anduril +#include "cfg-noctigon-kr4.h" +// ATTINY: 1634 + +// don't turn off first channel at turbo level +#undef PWM1_LEVELS +#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,4,5,6,7,8,9,10,11,13,14,15,17,19,20,22,24,26,28,30,33,35,38,40,43,46,49,52,55,59,62,66,70,74,78,82,86,91,96,100,105,111,116,121,127,133,139,145,151,158,165,172,179,186,193,201,209,217,225,234,243,251,261,270,280,289,299,310,320,331,342,353,364,376,388,400,412,425,438,451,464,478,492,506,521,536,551,566,582,597,614,630,647,664,681,699,717,735,754,772,792,811,831,851,871,892,913,935,956,978,1001,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023 +// 75% FET power +#undef PWM2_LEVELS +#define PWM2_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,39,60,82,104,126,149,172,195,219,243,268,293,318,343,369,396,422,449,476,504,531,560,588,617,646,676,706,737,768 + -- cgit v1.2.3 From 83f1f66ca9760bcb968b2104d5f270804663961c Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sun, 19 Apr 2020 03:10:56 -0600 Subject: anduril: made aux RGB rainbow mode speed configurable per build target --- spaghetti-monster/anduril/anduril.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c index cb48b45..e87a30c 100644 --- a/spaghetti-monster/anduril/anduril.c +++ b/spaghetti-monster/anduril/anduril.c @@ -355,6 +355,9 @@ const PROGMEM uint8_t rgb_led_colors[] = { #ifndef RGB_LED_LOCKOUT_DEFAULT #define RGB_LED_LOCKOUT_DEFAULT 0x37 // blinking, rainbow #endif +#ifndef RGB_RAINBOW_SPEED +#define RGB_RAINBOW_SPEED 0x0f // change color every 16 frames +#endif uint8_t rgb_led_off_mode = RGB_LED_OFF_DEFAULT; uint8_t rgb_led_lockout_mode = RGB_LED_LOCKOUT_DEFAULT; #endif @@ -2400,7 +2403,7 @@ void rgb_led_update(uint8_t mode, uint8_t arg) { } else if (color == 7) { // rainbow uint8_t speed = 0x03; // awake speed - if (go_to_standby) speed = 0x0f; // asleep speed + if (go_to_standby) speed = RGB_RAINBOW_SPEED; // asleep speed if (0 == (arg & speed)) { rainbow = (rainbow + 1) % 6; } -- cgit v1.2.3 From d9105a32fee77822745c25e3c4b778cc079155da Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sun, 19 Apr 2020 03:12:25 -0600 Subject: KR4-noFET: made candle mode vary more since the ramp is stretched out, raised therm faster level --- spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h index 00751fd..19cbc23 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4-nofet.h @@ -36,9 +36,12 @@ #define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR #define MUGGLE_CEILING 70 -// stop panicking at ~70% power or ~1200 lm +// make candle mode wobble more +#define CANDLE_AMPLITUDE 32 + +// stop panicking at ~90% power or ~1600 lm #undef THERM_FASTER_LEVEL -#define THERM_FASTER_LEVEL 130 +#define THERM_FASTER_LEVEL 143 #undef MIN_THERM_STEPDOWN #define MIN_THERM_STEPDOWN DEFAULT_LEVEL -- cgit v1.2.3 From 43eec5d7b84f1ac617519723373850733d3adcb1 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sun, 19 Apr 2020 03:17:24 -0600 Subject: made thermal response larger when error is large, smaller when error is small (helps on KR4, but will probably need to add the response magnitude thing to adjust speed per build target) --- spaghetti-monster/fsm-adc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index edf1809..760acc4 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -377,11 +377,17 @@ static inline void ADC_temperature_handler() { if (warning_threshold > 0) { warning_threshold -= offset; } else { // error is big enough; send a warning - warning_threshold = THERM_NEXT_WARNING_THRESHOLD - offset; + //warning_threshold = THERM_NEXT_WARNING_THRESHOLD - offset; // how far above the ceiling? //int16_t howmuch = offset * THERM_RESPONSE_MAGNITUDE / 128; - int16_t howmuch = offset; + //int16_t howmuch = offset; + // increase the amount, except for small values + // 1:1, 2:1, 3:3, 4:5, 6:9, 8:13, 10:17, 40:77 + int16_t howmuch = offset + offset - 3; + if (howmuch < 1) howmuch = 1; + warning_threshold = THERM_NEXT_WARNING_THRESHOLD - (uint8_t)howmuch; + // send a warning emit(EV_temperature_high, howmuch); } -- cgit v1.2.3 From 536e9c0d3e89fea0e37a840c0c72136c25f71889 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sun, 19 Apr 2020 03:29:43 -0600 Subject: added tweakable thermal_response_magnitude option, adjusted KR4 thermal vars, made KR4 rainbow mode faster --- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 4 ++-- spaghetti-monster/fsm-adc.c | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 01310b5..66c5a28 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -8,6 +8,7 @@ //#define USE_INDICATOR_LED_WHILE_RAMPING #define RGB_LED_OFF_DEFAULT 0x17 // low, rainbow #define RGB_LED_LOCKOUT_DEFAULT 0x37 // blinking, rainbow +#define RGB_RAINBOW_SPEED 0x03 // half a second per color // enable blinking aux LEDs #define TICK_DURING_STANDBY @@ -42,8 +43,7 @@ // stop panicking at ~25% power or ~1000 lm #define THERM_FASTER_LEVEL 100 #define MIN_THERM_STEPDOWN DEFAULT_LEVEL -#define THERM_LOOKAHEAD 6 -#define THERM_NEXT_WARNING_THRESHOLD 12 +#define THERM_NEXT_WARNING_THRESHOLD 16 // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index 760acc4..68361ae 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -286,21 +286,21 @@ static inline void ADC_voltage_handler() { static inline void ADC_temperature_handler() { // coarse adjustment #ifndef THERM_LOOKAHEAD - #define THERM_LOOKAHEAD 4 // can be tweaked per build target + #define THERM_LOOKAHEAD 4 #endif // reduce frequency of minor warnings #ifndef THERM_NEXT_WARNING_THRESHOLD #define THERM_NEXT_WARNING_THRESHOLD 24 #endif // fine-grained adjustment - // how proportional should the adjustments be? (not used yet) + // how proportional should the adjustments be? #ifndef THERM_RESPONSE_MAGNITUDE #define THERM_RESPONSE_MAGNITUDE 128 #endif // acceptable temperature window size in C #define THERM_WINDOW_SIZE 2 - // TODO: make this configurable per build target? + // TODO? make this configurable per build target? // (shorter time for hosts with a lower power-to-mass ratio) // (because then it'll have smaller responses) #define NUM_TEMP_HISTORY_STEPS 8 // don't change; it'll break stuff @@ -377,14 +377,14 @@ static inline void ADC_temperature_handler() { if (warning_threshold > 0) { warning_threshold -= offset; } else { // error is big enough; send a warning - //warning_threshold = THERM_NEXT_WARNING_THRESHOLD - offset; - // how far above the ceiling? - //int16_t howmuch = offset * THERM_RESPONSE_MAGNITUDE / 128; - //int16_t howmuch = offset; - // increase the amount, except for small values - // 1:1, 2:1, 3:3, 4:5, 6:9, 8:13, 10:17, 40:77 - int16_t howmuch = offset + offset - 3; + // original method works, but is too slow on some small hosts: + // (and typically has a minimum response magnitude of 2 instead of 1) + // int16_t howmuch = offset; + // ... so increase the amount, except for small values + // (for example, 1:1, 2:1, 3:3, 4:5, 6:9, 8:13, 10:17, 40:77) + // ... and let us tune the response per build target if desired + int16_t howmuch = (offset + offset - 3) * THERM_RESPONSE_MAGNITUDE / 128; if (howmuch < 1) howmuch = 1; warning_threshold = THERM_NEXT_WARNING_THRESHOLD - (uint8_t)howmuch; -- cgit v1.2.3 From 08781957244b9a30c9abc7425ff023d36f7e9160 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Sun, 26 Apr 2020 22:12:31 -0600 Subject: applied ADC rewrite updates to most recent build targets --- spaghetti-monster/anduril/cfg-noctigon-k1-12v.h | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h index 12f69de..10cdfa1 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h +++ b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h @@ -45,16 +45,8 @@ #define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR #define MUGGLE_CEILING 70 -// optional, makes initial turbo step-down faster so first peak isn't as hot -// the D4 runs very very hot, so be extra careful -//#define THERM_HARD_TURBO_DROP - // stop panicking at ~70% power or ~600 lm #define THERM_FASTER_LEVEL 130 -// respond to thermal changes faster -#define THERMAL_WARNING_SECONDS 3 -#define THERMAL_UPDATE_SPEED 1 -#define THERM_PREDICTION_STRENGTH 4 // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG @@ -64,7 +56,3 @@ #define THERM_CAL_OFFSET 5 -// attiny1634 has enough space to smooth out voltage readings -// (prevent the button from blinking during use) -#define USE_VOLTAGE_LOWPASS - -- cgit v1.2.3 From 0f0085f244d9ec7f49780d3f7286eb824825dfe6 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Mon, 27 Apr 2020 17:52:46 -0600 Subject: set default thermal response magnitude back to how it was before the KR4 updates, because it worked well on many hosts before... --- spaghetti-monster/anduril/cfg-noctigon-kr4.h | 3 ++- spaghetti-monster/fsm-adc.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-kr4.h b/spaghetti-monster/anduril/cfg-noctigon-kr4.h index 66c5a28..dc71655 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-kr4.h +++ b/spaghetti-monster/anduril/cfg-noctigon-kr4.h @@ -43,7 +43,8 @@ // stop panicking at ~25% power or ~1000 lm #define THERM_FASTER_LEVEL 100 #define MIN_THERM_STEPDOWN DEFAULT_LEVEL -#define THERM_NEXT_WARNING_THRESHOLD 16 +#define THERM_NEXT_WARNING_THRESHOLD 16 // accumulate less error before adjusting +#define THERM_RESPONSE_MAGNITUDE 128 // bigger adjustments // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index 68361ae..45a4297 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -295,7 +295,7 @@ static inline void ADC_temperature_handler() { // fine-grained adjustment // how proportional should the adjustments be? #ifndef THERM_RESPONSE_MAGNITUDE - #define THERM_RESPONSE_MAGNITUDE 128 + #define THERM_RESPONSE_MAGNITUDE 64 #endif // acceptable temperature window size in C #define THERM_WINDOW_SIZE 2 -- cgit v1.2.3 From 02da00884b824ee5fefcd4c64096821ce32888b4 Mon Sep 17 00:00:00 2001 From: Selene ToyKeeper Date: Mon, 27 Apr 2020 17:54:00 -0600 Subject: calibrated K1 and K1-12V thermal response (smaller, slower) and candle mode (wobblier), and gave K1-12V a lower moon mode --- spaghetti-monster/anduril/cfg-noctigon-k1-12v.h | 11 +++++++++-- spaghetti-monster/anduril/cfg-noctigon-k1.h | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'spaghetti-monster') diff --git a/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h index 10cdfa1..617801f 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h +++ b/spaghetti-monster/anduril/cfg-noctigon-k1-12v.h @@ -18,10 +18,11 @@ #define STANDBY_TICK_SPEED 3 // every 0.128 s -// ../../bin/level_calc.py cube 1 150 7135 1 4 1300 +// level_calc.py cube 1 150 7135 0 4 1300 // (with max_pwm set to 1023) +// (level 0 is usable on this light) #define RAMP_LENGTH 150 -#define PWM1_LEVELS 1,1,2,2,3,3,4,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,24,26,27,29,31,32,34,36,38,40,43,45,47,49,52,54,57,60,62,65,68,71,74,77,81,84,87,91,95,98,102,106,110,114,118,122,127,131,136,141,145,150,155,160,166,171,176,182,188,193,199,205,211,218,224,231,237,244,251,258,265,272,280,287,295,303,310,319,327,335,344,352,361,370,379,388,397,407,416,426,436,446,457,467,477,488,499,510,521,533,544,556,568,580,592,604,617,629,642,655,668,682,695,709,723,737,751,766,781,795,810,826,841,857,872,888,904,921,937,954,971,988,1005,1023 +#define PWM1_LEVELS 0,0,1,1,2,2,3,3,4,5,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,25,26,28,30,31,33,35,37,39,42,44,46,48,51,53,56,59,61,64,67,70,73,76,80,83,86,90,94,97,101,105,109,113,117,122,126,130,135,140,144,149,154,159,165,170,175,181,187,193,198,204,211,217,223,230,236,243,250,257,264,271,279,286,294,302,310,318,326,334,343,351,360,369,378,387,397,406,416,426,436,446,456,466,477,488,499,510,521,532,544,555,567,579,591,604,616,629,642,655,668,682,695,709,723,737,751,766,780,795,810,825,841,856,872,888,904,921,937,954,971,988,1005,1023 #define MAX_1x7135 50 // the entire ramp is regulated; don't blink halfway up @@ -45,9 +46,15 @@ #define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR #define MUGGLE_CEILING 70 +// make candle mode wobble more +#define CANDLE_AMPLITUDE 32 + // stop panicking at ~70% power or ~600 lm #define THERM_FASTER_LEVEL 130 +#define THERM_RESPONSE_MAGNITUDE 32 // smaller adjustments, this host changes temperature slowly +#define THERM_NEXT_WARNING_THRESHOLD 32 // more error tolerance before adjusting + // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG diff --git a/spaghetti-monster/anduril/cfg-noctigon-k1.h b/spaghetti-monster/anduril/cfg-noctigon-k1.h index 4db8787..4f2c2cc 100644 --- a/spaghetti-monster/anduril/cfg-noctigon-k1.h +++ b/spaghetti-monster/anduril/cfg-noctigon-k1.h @@ -21,6 +21,7 @@ // ../../bin/level_calc.py cube 1 150 7135 1 4 1300 // (with max_pwm set to 1023) +// (level 0 flickers and isn't relevant on a thrower, so it's omitted) #define RAMP_LENGTH 150 #define PWM1_LEVELS 1,1,2,2,3,3,4,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,24,26,27,29,31,32,34,36,38,40,43,45,47,49,52,54,57,60,62,65,68,71,74,77,81,84,87,91,95,98,102,106,110,114,118,122,127,131,136,141,145,150,155,160,166,171,176,182,188,193,199,205,211,218,224,231,237,244,251,258,265,272,280,287,295,303,310,319,327,335,344,352,361,370,379,388,397,407,416,426,436,446,457,467,477,488,499,510,521,533,544,556,568,580,592,604,617,629,642,655,668,682,695,709,723,737,751,766,781,795,810,826,841,857,872,888,904,921,937,954,971,988,1005,1023 #define MAX_1x7135 50 @@ -46,9 +47,15 @@ #define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR #define MUGGLE_CEILING 70 +// make candle mode wobble more +#define CANDLE_AMPLITUDE 32 + // stop panicking at ~70% power or ~600 lm #define THERM_FASTER_LEVEL 130 +#define THERM_RESPONSE_MAGNITUDE 32 // smaller adjustments, this host changes temperature slowly +#define THERM_NEXT_WARNING_THRESHOLD 32 // more error tolerance before adjusting + // easier access to thermal config mode, for Noctigon #define USE_TENCLICK_THERMAL_CONFIG -- cgit v1.2.3