~toykeeper/flashlight-firmware/fsm

« back to all changes in this revision

Viewing changes to ToyKeeper/spaghetti-monster/anduril/cfg-noctigon-k1-sbt90.h

  • Committer: Selene ToyKeeper
  • Date: 2023-11-04 15:09:10 UTC
  • mfrom: (483.1.175 anduril2)
  • Revision ID: bzr@toykeeper.net-20231104150910-ddd3afw4nhfvof2l
merged anduril2 branch -> fsm, with *years* of changes
(this also means this code is now Anduril 2 instead of Anduril 1)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
// Noctigon K1-SBT90.2 config options for Anduril
 
2
// Copyright (C) 2019-2023 Selene ToyKeeper
 
3
// SPDX-License-Identifier: GPL-3.0-or-later
 
4
#pragma once
 
5
 
2
6
// (is a K1 host with a KR4-like driver and a really high-powered LED)
3
 
#include "hwdef-Noctigon_K1-SBT90.h"
 
7
#define MODEL_NUMBER "0252"
 
8
#include "hwdef-noctigon-k1-sbt90.h"
 
9
#include "hank-cfg.h"
4
10
// ATTINY: 1634
5
11
 
6
12
// this light can safely run a bit hotter than most
9
15
 
10
16
// this light has three aux LED channels: R, G, B
11
17
#define USE_AUX_RGB_LEDS
12
 
#define USE_AUX_RGB_LEDS_WHILE_ON
 
18
#define USE_AUX_RGB_LEDS_WHILE_ON  10
13
19
#define USE_INDICATOR_LED_WHILE_RAMPING
14
 
#define RGB_LED_OFF_DEFAULT 0x18  // low, voltage
15
 
#define RGB_LED_LOCKOUT_DEFAULT 0x37  // blinking, rainbow
16
 
#define RGB_RAINBOW_SPEED 0x03  // half a second per color
17
 
 
18
 
// enable blinking aux LEDs
19
 
#define TICK_DURING_STANDBY
20
 
#define STANDBY_TICK_SPEED 3  // every 0.128 s
21
20
 
22
21
 
23
22
// brightness:
25
24
// 1/1023: 2.56 lm
26
25
// max regulated: 1740 lm
27
26
// FET: ~3700 lm
 
27
#define RAMP_SIZE 150
 
28
// FIXME: it should probably have max_regulated at 120, not 130
 
29
// ramp copied from noctigon-kr4
 
30
// nice low lows, but might have visible ripple on some lights:
 
31
// maxreg at 130, dynamic PWM: level_calc.py 5.01 2 149 7135 1 0.3 1740 FET 1 10 3190 --pwm dyn:64:16384:255
 
32
// (plus one extra level at the beginning for moon)
 
33
#define PWM1_LEVELS  0,1,1,2,2,3,4,5,6,7,8,9,11,12,14,16,17,19,22,24,26,29,31,34,37,40,43,46,49,53,56,60,63,67,71,74,78,82,86,89,93,96,99,103,105,108,110,112,114,115,116,116,115,114,112,109,106,101,95,89,81,71,60,48,34,19,20,21,22,23,24,26,27,28,30,31,32,34,36,37,39,41,43,45,47,49,51,53,56,58,61,63,66,69,72,75,78,81,84,88,91,95,99,103,107,111,115,119,124,129,133,138,143,149,154,159,165,171,177,183,189,196,203,210,217,224,231,239,247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0
 
34
#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,9,20,30,41,52,63,75,87,99,112,125,138,151,165,179,194,208,224,239,255
 
35
#define PWM_TOPS     16383,16383,11750,14690,9183,12439,13615,13955,13877,13560,13093,12529,13291,12513,12756,12769,11893,11747,12085,11725,11329,11316,10851,10713,10518,10282,10016,9729,9428,9298,8971,8794,8459,8257,8043,7715,7497,7275,7052,6753,6538,6260,5994,5798,5501,5271,5006,4758,4525,4268,4030,3775,3508,3263,3010,2752,2517,2256,1998,1763,1512,1249,994,749,497,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
 
36
#define MIN_THERM_STEPDOWN 66  // should be above highest dyn_pwm level
 
37
 
 
38
#define MAX_1x7135 130
 
39
#define DEFAULT_LEVEL 50
 
40
#define HALFSPEED_LEVEL 12
 
41
#define QUARTERSPEED_LEVEL 4
 
42
 
 
43
#if 0  // original 10-bit ramp
28
44
// maxreg at 130: level_calc.py cube 2 150 7135 0 2.5 1740 FET 1 10 2565
29
45
// maxreg at 120: level_calc.py cube 2 150 7135 0 2.5 1740 FET 1 10 3190
30
 
#define RAMP_LENGTH 150
31
46
#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
32
47
#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
33
48
#define DEFAULT_LEVEL 46
34
49
#define MAX_1x7135 120
35
50
#define HALFSPEED_LEVEL 10
36
51
#define QUARTERSPEED_LEVEL 2
 
52
#endif
37
53
 
38
 
#define RAMP_SMOOTH_FLOOR 3  // level 1 is unreliable
39
 
#define RAMP_SMOOTH_CEIL 120
40
 
// 10, 28, [46], 65, 83, 101, [120]
41
 
#define RAMP_DISCRETE_FLOOR 10
42
 
#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL
 
54
#define RAMP_SMOOTH_FLOOR 11  // low levels may be unreliable
 
55
#define RAMP_SMOOTH_CEIL  130
 
56
// 11 30 [50] 70 90 110 [130]
 
57
#define RAMP_DISCRETE_FLOOR 11
 
58
#define RAMP_DISCRETE_CEIL  RAMP_SMOOTH_CEIL
43
59
#define RAMP_DISCRETE_STEPS 7
44
60
 
45
 
#define MUGGLE_FLOOR RAMP_DISCRETE_FLOOR
46
 
#define MUGGLE_CEILING 65
 
61
// safe limit ~33% power
 
62
#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR
 
63
#define SIMPLE_UI_CEIL 120
 
64
#define SIMPLE_UI_STEPS 5
47
65
 
48
 
// stop panicking at ~25% power or ~1000 lm
49
 
#define THERM_FASTER_LEVEL 120
50
 
#define MIN_THERM_STEPDOWN DEFAULT_LEVEL
 
66
// stop panicking at ~40% power or ~1700 lm
 
67
#define THERM_FASTER_LEVEL 130
51
68
//#define THERM_NEXT_WARNING_THRESHOLD 16  // accumulate less error before adjusting
52
69
//#define THERM_RESPONSE_MAGNITUDE 128  // bigger adjustments
53
70
 
54
 
// easier access to thermal config mode, for Noctigon
55
 
#define USE_TENCLICK_THERMAL_CONFIG
56
 
 
57
 
// slow down party strobe; this driver can't pulse for 1ms or less
 
71
#define THERM_CAL_OFFSET 5
 
72
 
 
73
// the power regulator is a bit slow, so push it harder for a quick response from off
 
74
// (unsure if necessary, copied from noctigon-kr4)
 
75
//#define DEFAULT_JUMP_START_LEVEL 21
 
76
//#define BLINK_BRIGHTNESS DEFAULT_LEVEL
 
77
//#define BLINK_ONCE_TIME 12
 
78
 
 
79
// there is usually no lighted button, so
 
80
// blink numbers on the main LEDs by default (but allow user to change it)
 
81
#define DEFAULT_BLINK_CHANNEL  CM_MAIN
 
82
 
 
83
// normal party strobe speed; this driver can pulse very quickly due to its DD FET
58
84
//#define PARTY_STROBE_ONTIME 2
59
85
 
60
 
#define THERM_CAL_OFFSET 5
 
86
// the default of 26 looks a bit rough, so increase it to make it smoother
 
87
#define CANDLE_AMPLITUDE 33
 
88
 
 
89
// don't blink while ramping
 
90
#ifdef BLINK_AT_RAMP_MIDDLE
 
91
#undef BLINK_AT_RAMP_MIDDLE
 
92
#endif
 
93
 
 
94
// for compatibility with other models
 
95
#define USE_SOFT_FACTORY_RESET
61
96