aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelene ToyKeeper2023-07-23 12:04:56 -0600
committerSelene ToyKeeper2023-07-23 12:04:56 -0600
commit9f5be1da4a3f01c4891f1f1b1372a603638da37b (patch)
tree3f3e800dfb31f19db59f7f811db33d486c1025d8
parentconverted noctigon-dm11-* builds to multi-channel (diff)
downloadanduril-9f5be1da4a3f01c4891f1f1b1372a603638da37b.tar.gz
anduril-9f5be1da4a3f01c4891f1f1b1372a603638da37b.tar.bz2
anduril-9f5be1da4a3f01c4891f1f1b1372a603638da37b.zip
converted BLF GT to multi-channel
-rw-r--r--hwdef-BLF_GT.h61
-rw-r--r--hwdef-blf-gt.h102
-rw-r--r--hwdef-emisar-d4.h4
-rw-r--r--spaghetti-monster/anduril/cfg-blf-gt.h28
4 files changed, 123 insertions, 72 deletions
diff --git a/hwdef-BLF_GT.h b/hwdef-BLF_GT.h
deleted file mode 100644
index 94d510c..0000000
--- a/hwdef-BLF_GT.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// BLF GT driver layout
-// Copyright (C) 2018-2023 Selene ToyKeeper
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-/*
- * ----
- * Reset -|1 8|- VCC (unused)
- * eswitch -|2 7|- Voltage divider
- * AUX LED -|3 6|- Current control (buck level)
- * GND -|4 5|- PWM (buck output on/off)
- * ----
- */
-
-#define PWM_CHANNELS 2
-
-#ifndef AUXLED_PIN
-#define AUXLED_PIN PB4 // pin 3
-#endif
-
-#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 PB0 // pin 5, 1x7135 PWM
-#define PWM1_LVL OCR0A // OCR0A is the output compare register for PB0
-#endif
-#ifndef PWM2_PIN
-#define PWM2_PIN PB1 // pin 6, FET PWM
-#define PWM2_LVL OCR0B // OCR0B is the output compare register for PB1
-#endif
-
-#define USE_VOLTAGE_DIVIDER // use a voltage divider on pin 7, not VCC
-#ifndef VOLTAGE_PIN
-#define VOLTAGE_PIN PB2 // pin 7, voltage ADC
-#define VOLTAGE_CHANNEL 0x01 // MUX 01 corresponds with PB2
-#define VOLTAGE_ADC ADC1D // Digital input disable bit corresponding with PB2
-// inherited from tk-attiny.h
-//#define VOLTAGE_ADC_DIDR DIDR0 // DIDR for ADC1
-// 1.1V reference, left-adjust, ADC1/PB2
-//#define ADMUX_VOLTAGE_DIVIDER ((1 << V_REF) | (1 << ADLAR) | VOLTAGE_CHANNEL)
-// 1.1V reference, no left-adjust, ADC1/PB2
-#define ADMUX_VOLTAGE_DIVIDER ((1 << V_REF) | VOLTAGE_CHANNEL)
-#endif
-#define ADC_PRSCL 0x07 // clk/128
-
-// Raw ADC readings at 4.4V and 2.2V (in-between, we assume values form a straight line)
-#ifndef ADC_44
-#define ADC_44 (184*4)
-#endif
-#ifndef ADC_22
-#define ADC_22 (92*4)
-#endif
-
-#define FAST 0xA3 // fast PWM both channels
-#define PHASE 0xA1 // phase-correct PWM both channels
-
-#define LAYOUT_DEFINED
-
diff --git a/hwdef-blf-gt.h b/hwdef-blf-gt.h
new file mode 100644
index 0000000..fdb0cb6
--- /dev/null
+++ b/hwdef-blf-gt.h
@@ -0,0 +1,102 @@
+// BLF GT driver layout
+// Copyright (C) 2018-2023 Selene ToyKeeper
+// SPDX-License-Identifier: GPL-3.0-or-later
+#pragma once
+
+/*
+ * ----
+ * Reset -|1 8|- VCC (unused)
+ * eswitch -|2 7|- Voltage divider
+ * AUX LED -|3 6|- Current control (buck level)
+ * GND -|4 5|- PWM (buck output on/off)
+ * ----
+ *
+ * On high modes, the buck regulator's current level is adjusted by pin 6.
+ * On low modes, the buck is set to ~10% power
+ * and its output gets PWM'd by pin 5.
+ */
+
+#define ATTINY 85
+#include <avr/io.h>
+
+#define HWDEF_C_FILE hwdef-emisar-d4.c
+
+// channel modes
+// * 0. main LEDs
+#define NUM_CHANNEL_MODES 1
+enum CHANNEL_MODES {
+ CM_MAIN = 0,
+};
+
+#define DEFAULT_CHANNEL_MODE CM_MAIN
+
+// right-most bit first, modes are in fedcba9876543210 order
+#define CHANNEL_MODES_ENABLED 0b00000001
+
+
+#define PWM_CHANNELS 2 // old, remove this
+
+#define PWM_BITS 8 // attiny85 only supports up to 8 bits
+#define PWM_GET PWM_GET8
+#define PWM_DATATYPE uint8_t
+#define PWM_DATATYPE2 uint16_t
+#define PWM1_DATATYPE uint8_t // low modes (PWM with buck at 10% power)
+#define PWM2_DATATYPE uint8_t // high modes (adjustable constant current)
+
+#define PWM_TOP_INIT 255 // highest value used in top half of ramp
+
+// low modes (PWM turns regulator on/off)
+#define CH1_PIN PB0 // pin 5
+#define CH1_PWM OCR0A // OCR0A is the output compare register for PB0
+
+// high modes (control voltage sets regulator's level)
+#define CH2_PIN PB1 // pin 6
+#define CH2_PWM OCR0B // OCR0B is the output compare register for PB1
+
+#define AUXLED_PIN PB4 // pin 3
+
+// e-switch
+#define SWITCH_PIN PB3 // pin 2
+#define SWITCH_PCINT PCINT3 // pin 2 pin change interrupt
+
+// VCC is regulated, so measure battery on pin 7 instead
+#define USE_VOLTAGE_DIVIDER // use a voltage divider on pin 7, not VCC
+#define VOLTAGE_PIN PB2 // pin 7, voltage ADC
+#define VOLTAGE_CHANNEL 0x01 // MUX 01 corresponds with PB2
+#define VOLTAGE_ADC ADC1D // Digital input disable bit corresponding with PB2
+// inherited from tk-attiny.h
+//#define VOLTAGE_ADC_DIDR DIDR0 // DIDR for ADC1
+// 1.1V reference, left-adjust, ADC1/PB2
+//#define ADMUX_VOLTAGE_DIVIDER ((1 << V_REF) | (1 << ADLAR) | VOLTAGE_CHANNEL)
+// 1.1V reference, no left-adjust, ADC1/PB2
+#define ADMUX_VOLTAGE_DIVIDER ((1 << V_REF) | VOLTAGE_CHANNEL)
+#define ADC_PRSCL 0x07 // clk/128
+
+// Raw ADC readings at 4.4V and 2.2V (in-between, we assume values form a straight line)
+#ifndef ADC_44
+#define ADC_44 (184*4)
+#endif
+#ifndef ADC_22
+#define ADC_22 (92*4)
+#endif
+
+#define FAST 0xA3 // fast PWM both channels
+#define PHASE 0xA1 // phase-correct PWM both channels
+
+
+inline void hwdef_setup() {
+ // configure PWM channels
+ DDRB = (1 << CH1_PIN)
+ | (1 << CH2_PIN);
+
+ TCCR0B = 0x01; // pre-scaler for timer (1 => 1, 2 => 8, 3 => 64...)
+ TCCR0A = PHASE;
+
+ // configure e-switch
+ PORTB = (1 << SWITCH_PIN); // e-switch is the only input
+ PCMSK = (1 << SWITCH_PIN); // pin change interrupt uses this pin
+}
+
+
+#define LAYOUT_DEFINED
+
diff --git a/hwdef-emisar-d4.h b/hwdef-emisar-d4.h
index b3a7500..7be700a 100644
--- a/hwdef-emisar-d4.h
+++ b/hwdef-emisar-d4.h
@@ -51,8 +51,6 @@ enum CHANNEL_MODES {
#define PWM_TOP_INIT 255 // highest value used in top half of ramp
-//#define AUXLED_PIN PB4 // pin 3
-
// 1x7135 channel
#ifndef CH1_PIN
#define CH1_PIN PB0 // pin 5, 1x7135 PWM
@@ -65,6 +63,8 @@ enum CHANNEL_MODES {
#define CH2_PWM OCR0B // OCR0B is the output compare register for PB1
#endif
+//#define AUXLED_PIN PB4 // pin 3
+
// e-switch
#ifndef SWITCH_PIN
#define SWITCH_PIN PB3 // pin 2
diff --git a/spaghetti-monster/anduril/cfg-blf-gt.h b/spaghetti-monster/anduril/cfg-blf-gt.h
index 425ecdc..580318a 100644
--- a/spaghetti-monster/anduril/cfg-blf-gt.h
+++ b/spaghetti-monster/anduril/cfg-blf-gt.h
@@ -4,21 +4,16 @@
#pragma once
#define MODEL_NUMBER "0321"
-#include "hwdef-BLF_GT.h"
+#include "hwdef-blf-gt.h"
+// ATTINY: 85
// the button lights up
#define USE_INDICATOR_LED
// the button is visible while main LEDs are on
#define USE_INDICATOR_LED_WHILE_RAMPING
-// don't blink during ramp, it's irrelevant and annoying on this light
-#undef BLINK_AT_RAMP_CEIL
-#undef BLINK_AT_RAMP_MIDDLE
-#undef BLINK_AT_RAMP_FLOOR
+#define RAMP_SIZE 150
-//#undef USE_SET_LEVEL_GRADUALLY
-
-#define RAMP_LENGTH 150
// First 60 values: level_calc.py 1 60 7135 4 5.0 255
// Remainder: all 255 (buck driver at 100% duty cycle)
#define PWM1_LEVELS 4,5,6,6,7,8,9,11,12,13,15,16,18,19,21,23,25,27,30,32,34,37,40,43,46,49,52,55,59,63,66,70,75,79,83,88,93,98,103,108,114,119,125,131,137,144,150,157,164,171,179,186,194,202,210,219,228,236,246,255, \
@@ -29,6 +24,7 @@
26,27,28,29,30,31,32,33,35,36,37,38,40,41,42,44,45,47,48,50,51,53,54,56,58,59,61,63,65,67,69,70,72,74,76,79,81,83,85,87,89,92,94,96,99,101,104,106,109,112,114,117,120,123,125,128,131,134,137,140,143,147,150,153,156,160,163,167,170,174,177,181,184,188,192,196,200,204,208,212,216,220,224,228,233,237,241,246,250,255
#define POWER_80PX 138 // 2.0 Amps out of maximum 2.5 Amps
#define MAX_1x7135 60 // where it switches from PWM to current control
+#define DEFAULT_LEVEL 69 // nice
#define HALFSPEED_LEVEL 17
#define QUARTERSPEED_LEVEL 6
@@ -36,6 +32,7 @@
// start both ramps at the bottom; even moon throws a long way on the GT
#define RAMP_SMOOTH_FLOOR 1
#define RAMP_SMOOTH_CEIL POWER_80PX
+// 1 23 46 [69] 92 115 138
#define RAMP_DISCRETE_FLOOR 1
#define RAMP_DISCRETE_CEIL POWER_80PX
#define RAMP_DISCRETE_STEPS 7
@@ -45,8 +42,21 @@
#define SIMPLE_UI_CEIL RAMP_DISCRETE_CEIL
#define SIMPLE_UI_STEPS 5
+// smoother, more wobbly candle
+#define CANDLE_AMPLITUDE 33
+
+// turbo (i.e. "giggles" mode), low, tactical strobe
+#define TACTICAL_LEVELS 150,30,(RAMP_SIZE+2)
+
// stop panicking at 80% power, this light has plenty of thermal mass
#define THERM_FASTER_LEVEL POWER_80PX // throttle back faster when high
+// don't blink during ramp, it's irrelevant and annoying on this light
+#undef BLINK_AT_RAMP_CEIL
+#undef BLINK_AT_RAMP_MIDDLE
+#undef BLINK_AT_RAMP_FLOOR
+
// too big, turn off extra features
-#undef USE_TACTICAL_MODE
+//#undef USE_TACTICAL_MODE
+#undef USE_SOS_MODE
+