aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelene ToyKeeper2022-04-14 19:59:55 -0600
committerSelene ToyKeeper2022-04-14 19:59:55 -0600
commit2527602a3680f2e0d4217359e0a142920621f739 (patch)
treeb60de4907679be3108abe0c26450c9dd735203ef
parentrevert spurious change to version.h (diff)
parentCreated LED_DISABLE_DELAY option and enabled it for SP10 Pro to hopefully eli... (diff)
downloadanduril-2527602a3680f2e0d4217359e0a142920621f739.tar.gz
anduril-2527602a3680f2e0d4217359e0a142920621f739.tar.bz2
anduril-2527602a3680f2e0d4217359e0a142920621f739.zip
merged gchart's latest changes:
- sp10-pro shutoff fix - mt35-mini support - power channel enable/disable timing delays (though I wouldn't recommend doing 80ms like the thefreeman code does, since that's more than one WDT cycle (16ms))
-rw-r--r--hwdef-Mateminco_MT35-Mini.h47
-rw-r--r--hwdef-Sofirn_SP10-Pro.h3
-rw-r--r--hwdef-thefreeman-lin16dac.h2
-rw-r--r--spaghetti-monster/anduril/MODELS1
-rw-r--r--spaghetti-monster/anduril/cfg-mateminco-mt35-mini.h51
-rw-r--r--spaghetti-monster/anduril/cfg-sofirn-sp10-pro.h15
-rw-r--r--spaghetti-monster/fsm-ramping.c26
7 files changed, 142 insertions, 3 deletions
diff --git a/hwdef-Mateminco_MT35-Mini.h b/hwdef-Mateminco_MT35-Mini.h
new file mode 100644
index 0000000..344f658
--- /dev/null
+++ b/hwdef-Mateminco_MT35-Mini.h
@@ -0,0 +1,47 @@
+#ifndef HWDEF_MT35_MINI_H
+#define HWDEF_MT35_MINI_H
+
+/* Mateminco MT35-Mini / Astrolux FT03
+ * ----
+ * Reset -|1 8|- VCC
+ * eswitch -|2 7|- Aux LED
+ * 1x7135 -|3 6|- NC
+ * GND -|4 5|- FET
+ * ----
+ */
+
+#define PWM_CHANNELS 2
+
+#ifndef SWITCH_PIN
+#define SWITCH_PIN PB3 // pin 2
+#define SWITCH_PCINT PCINT3 // pin 2 pin change interrupt
+#endif
+
+#ifndef PWM1_PIN
+#define PWM1_PIN PB4 // pin 3, 1x7135 PWM
+#define PWM1_LVL OCR1B // OCR1B is the output compare register for PB0
+#endif
+
+#ifndef PWM2_PIN
+#define PWM2_PIN PB0 // pin 5, FET PWM
+#define PWM2_LVL OCR0A // OCR0A is the output compare register for PB4
+#endif
+
+#define ADC_PRSCL 0x07 // clk/128
+
+// average drop across diode on this hardware
+#ifndef VOLTAGE_FUDGE_FACTOR
+#define VOLTAGE_FUDGE_FACTOR 7 // add 0.35V
+#endif
+
+// lighted button
+#ifndef AUXLED_PIN
+#define AUXLED_PIN PB2 // pin 7
+#endif
+
+#define FAST 0xA3 // fast PWM both channels
+#define PHASE 0xA1 // phase-correct PWM both channels
+
+#define LAYOUT_DEFINED
+
+#endif
diff --git a/hwdef-Sofirn_SP10-Pro.h b/hwdef-Sofirn_SP10-Pro.h
index bb10f2f..7d0d7f5 100644
--- a/hwdef-Sofirn_SP10-Pro.h
+++ b/hwdef-Sofirn_SP10-Pro.h
@@ -53,9 +53,10 @@ PA1 : Boost Enable
#define LED_ENABLE_PIN PIN1_bp
#define LED_ENABLE_PORT PORTA_OUT
+#define LED_DISABLE_DELAY 4
#define USE_VOLTAGE_DIVIDER // use a dedicated pin, not VCC, because VCC input is flattened
-#define DUAL_VOLTAGE_FLOOR 20 // for AA/14500 boost drivers, don't indicate low voltage if below this level
+#define DUAL_VOLTAGE_FLOOR 21 // for AA/14500 boost drivers, don't indicate low voltage if below this level
#define DUAL_VOLTAGE_LOW_LOW 7 // the lower voltage range's danger zone 0.7 volts (NiMH)
#define ADMUX_VOLTAGE_DIVIDER ADC_MUXPOS_AIN9_gc // which ADC channel to read
diff --git a/hwdef-thefreeman-lin16dac.h b/hwdef-thefreeman-lin16dac.h
index 0999c4c..adb7886 100644
--- a/hwdef-thefreeman-lin16dac.h
+++ b/hwdef-thefreeman-lin16dac.h
@@ -47,7 +47,7 @@ Read voltage from VCC pin, has PFET so no drop
// For turning on and off the op-amp
#define LED2_ENABLE_PIN PIN7_bp
#define LED2_ENABLE_PORT PORTA_OUT
-
+#define LED2_ENABLE_DELAY 80 // how many ms to delay turning on the lights after enabling the channel
// average drop across diode on this hardware
#ifndef VOLTAGE_FUDGE_FACTOR
diff --git a/spaghetti-monster/anduril/MODELS b/spaghetti-monster/anduril/MODELS
index d2d509a..329cc4d 100644
--- a/spaghetti-monster/anduril/MODELS
+++ b/spaghetti-monster/anduril/MODELS
@@ -51,6 +51,7 @@ Model Name MCU
0441 ff-e01 attiny85
0511 mateminco-mf01s attiny85
0521 mateminco-mf01-mini attiny85
+0531 mateminco-mt35-mini attiny85
0611 blf-q8 attiny85
0612 sofirn-sp36 attiny85
0613 blf-q8-t1616 attiny1616
diff --git a/spaghetti-monster/anduril/cfg-mateminco-mt35-mini.h b/spaghetti-monster/anduril/cfg-mateminco-mt35-mini.h
new file mode 100644
index 0000000..b409c39
--- /dev/null
+++ b/spaghetti-monster/anduril/cfg-mateminco-mt35-mini.h
@@ -0,0 +1,51 @@
+// Mateminco MT35 Mini / Astrolux FT03
+#define MODEL_NUMBER "0531"
+#include "hwdef-Mateminco_MT35-Mini.h"
+// ATTINY: 85
+
+// this light should be fine running a bit hotter than most
+#undef DEFAULT_THERM_CEIL
+#define DEFAULT_THERM_CEIL 55
+
+// the button lights up
+#define USE_INDICATOR_LED
+// the button is visible while main LEDs are on
+#define USE_INDICATOR_LED_WHILE_RAMPING
+
+// enable blinking aux LEDs
+#define TICK_DURING_STANDBY
+#define STANDBY_TICK_SPEED 3 // every 0.128 s
+
+#define RAMP_LENGTH 150
+// level_calc.py fifth 2 150 7135 1 1 120 FET 1 10 2000
+#define PWM1_LEVELS 1,2,2,3,4,5,6,7,8,9,11,13,14,16,18,21,23,26,28,31,35,38,41,45,49,53,58,63,67,73,78,84,90,96,102,109,116,124,131,139,147,156,165,174,184,194,204,215,226,237,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,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,1,2,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,20,21,22,24,25,27,28,30,31,33,35,36,38,40,42,43,45,47,49,51,53,55,57,59,62,64,66,68,71,73,75,78,80,83,86,88,91,94,96,99,102,105,108,111,114,117,120,124,127,130,134,137,140,144,148,151,155,159,162,166,170,174,178,182,186,190,195,199,203,208,212,217,221,226,231,235,240,245,250,255
+#define DEFAULT_LEVEL 46
+#define MAX_1x7135 52
+#define HALFSPEED_LEVEL 20
+#define QUARTERSPEED_LEVEL 10
+
+#define RAMP_SMOOTH_FLOOR 1
+#define RAMP_SMOOTH_CEIL 112
+#define RAMP_DISCRETE_FLOOR 10
+#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL
+#define RAMP_DISCRETE_STEPS 7
+
+// safe limit ~33% power
+#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR
+#define SIMPLE_UI_CEIL RAMP_LENGTH
+#define SIMPLE_UI_STEPS 5
+
+// stop panicking at ~40% power
+#define THERM_FASTER_LEVEL 120
+#define MIN_THERM_STEPDOWN 95 // ~600 lumens
+#define THERM_RESPONSE_MAGNITUDE 16 // smaller adjustments, big body. default = 64
+
+#define DEFAULT_2C_STYLE 1 // enable 2 click turbo (Anduril 1 style)
+
+#ifdef BLINK_AT_RAMP_MIDDLE
+#undef BLINK_AT_RAMP_MIDDLE
+#endif
+
+// Allow 3C in Simple UI for switching between smooth and stepped ramping
+#define USE_SIMPLE_UI_RAMPING_TOGGLE
diff --git a/spaghetti-monster/anduril/cfg-sofirn-sp10-pro.h b/spaghetti-monster/anduril/cfg-sofirn-sp10-pro.h
index bcfc80e..a3463ae 100644
--- a/spaghetti-monster/anduril/cfg-sofirn-sp10-pro.h
+++ b/spaghetti-monster/anduril/cfg-sofirn-sp10-pro.h
@@ -71,3 +71,18 @@
// enable factory reset on 13H without loosening tailcap
#define USE_SOFT_FACTORY_RESET
+
+// set fuses, these carry over to the ELF file but not the HEX file
+// we need this for enabling BOD in Active Mode from the factory.
+// settings can be verified / dumped from the ELF file using this
+// command: avr-objdump -d -S -j .fuse anduril.elf
+FUSES = {
+ .WDTCFG = FUSE_WDTCFG_DEFAULT, /* Watchdog Configuration */
+ .BODCFG = FUSE_ACTIVE0_bm, /* BOD Configuration */
+ .OSCCFG = FUSE_OSCCFG_DEFAULT, /* Oscillator Configuration */
+ .TCD0CFG = FUSE_TCD0CFG_DEFAULT, /* TCD0 Configuration */
+ .SYSCFG0 = FUSE_SYSCFG0_DEFAULT, /* System Configuration 0 */
+ .SYSCFG1 = FUSE_SYSCFG1_DEFAULT, /* System Configuration 1 */
+ .APPEND = FUSE_APPEND_DEFAULT, /* Application Code Section End */
+ .BOOTEND = FUSE_BOOTEND_DEFAULT, /* Boot Section End */
+}; \ No newline at end of file
diff --git a/spaghetti-monster/fsm-ramping.c b/spaghetti-monster/fsm-ramping.c
index abbfbde..2e6901d 100644
--- a/spaghetti-monster/fsm-ramping.c
+++ b/spaghetti-monster/fsm-ramping.c
@@ -93,6 +93,10 @@ void set_level(uint8_t level) {
TINT1_LVL = 0;
TINT2_LVL = 0;
#endif
+ // for drivers with a slow regulator chip (eg, boost converter, delay before turning off to prevent flashes
+ #ifdef LED_DISABLE_DELAY
+ delay_4ms(LED_DISABLE_DELAY/4);
+ #endif
// disable the power channel, if relevant
#ifdef LED_ENABLE_PIN
LED_ENABLE_PORT &= ~(1 << LED_ENABLE_PIN);
@@ -104,6 +108,10 @@ void set_level(uint8_t level) {
// enable the power channel, if relevant
#ifndef USE_TINT_RAMPING // update_tint handles this better
#ifdef LED_ENABLE_PIN
+ #ifdef LED_ENABLE_DELAY
+ uint8_t led_enable_port_save = LED_ENABLE_PORT;
+ #endif
+
#ifndef LED_ENABLE_PIN_LEVEL_MIN
LED_ENABLE_PORT |= (1 << LED_ENABLE_PIN);
#else
@@ -114,9 +122,25 @@ void set_level(uint8_t level) {
else // disable during other parts of the ramp
LED_ENABLE_PORT &= ~(1 << LED_ENABLE_PIN);
#endif
+
+ // for drivers with a slow regulator chip (eg, boost converter, delay before lighting up to prevent flashes
+ #ifdef LED_ENABLE_DELAY
+ if (LED_ENABLE_PORT != led_enable_port_save) // only delay if the pin status changed
+ delay_4ms(LED_ENABLE_DELAY/4);
+ #endif
#endif
#ifdef LED2_ENABLE_PIN
- LED2_ENABLE_PORT |= (1 << LED2_ENABLE_PIN);
+ #ifdef LED2_ENABLE_DELAY
+ uint8_t led2_enable_port_save = LED2_ENABLE_PORT;
+ #endif
+
+ LED2_ENABLE_PORT |= (1 << LED2_ENABLE_PIN);
+
+ // for drivers with a slow regulator chip (eg, boost converter, delay before lighting up to prevent flashes
+ #ifdef LED2_ENABLE_DELAY
+ if (LED2_ENABLE_PORT != led2_enable_port_save) // only delay if the pin status changed
+ delay_4ms(LED2_ENABLE_DELAY/4);
+ #endif
#endif
#endif // ifndef USE_TINT_RAMPING