-
-
Save gdmn/6ed744ef8ae0fa1de046232dd09a2380 to your computer and use it in GitHub Desktop.
Anduril2, D4v2 driver for C8F configuration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Emisar D4 config options for Anduril | |
#define MODEL_NUMBER "2113" | |
#include "hwdef-Emisar_D4v2_c8f.h" | |
// ATTINY: 1634 | |
#define START_AT_MEMORIZED_LEVEL // dmn | |
// this light has three aux LED channels: R, G, B | |
#define USE_AUX_RGB_LEDS // dmn: must be enabled to use button led | |
// it also has an independent LED in the button | |
#define USE_BUTTON_LED | |
// the aux LEDs are front-facing, so turn them off while main LEDs are on | |
// TODO: the whole "indicator LED" thing needs to be refactored into | |
// "aux LED(s)" and "button LED(s)" since they work a bit differently | |
//#ifdef USE_INDICATOR_LED_WHILE_RAMPING | |
//#undef USE_INDICATOR_LED_WHILE_RAMPING // dmn: commented | |
//#endif | |
// enable blinking aux LEDs | |
#define TICK_DURING_STANDBY | |
#define STANDBY_TICK_SPEED 3 // every 0.128 s | |
//#define STANDBY_TICK_SPEED 4 // every 0.256 s | |
//#define STANDBY_TICK_SPEED 5 // every 0.512 s | |
// copied from original D4, since it's also a FET+1 and has the same host | |
// ../../bin/level_calc.py 1 65 7135 1 0.8 150 | |
// ... mixed with this: | |
// ../../bin/level_calc.py 2 150 7135 4 0.33 150 FET 1 10 1500 | |
#define RAMP_LENGTH 150 | |
#define PWM1_LEVELS 1,1,2,2,3,3,4,4,5,6,7,8,9,10,12,13,14,15,17,19,20,22,24,26,29,31,34,36,39,42,45,48,51,55,59,62,66,70,75,79,84,89,93,99,104,110,115,121,127,134,140,147,154,161,168,176,184,192,200,209,217,226,236,245,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,4,5,7,8,9,11,12,14,15,17,19,20,22,24,25,27,29,31,33,35,37,39,41,43,45,48,50,52,55,57,59,62,64,67,70,72,75,78,81,84,87,90,93,96,99,102,105,109,112,115,119,122,126,129,133,137,141,144,148,152,156,160,165,169,173,177,182,186,191,195,200,205,209,214,219,224,229,234,239,244,250,255 | |
#define MAX_1x7135 65 | |
#define HALFSPEED_LEVEL 14 | |
#define QUARTERSPEED_LEVEL 6 | |
#define RAMP_SMOOTH_FLOOR 1 | |
#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 | |
// safe limit ~20% power | |
#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR | |
#define SIMPLE_UI_CEIL 95 | |
#define SIMPLE_UI_STEPS 5 | |
// stop panicking at ~30% power or ~1200 lm | |
#define THERM_FASTER_LEVEL 105 | |
#define THERM_CAL_OFFSET 5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef HWDEF_EMISAR_D4V2_H | |
#define HWDEF_EMISAR_D4V2_H | |
/* Emisar D4v2 driver layout (attiny1634) | |
* | |
* Pin / Name / Function | |
* 1 PA6 FET PWM (PWM1B) | |
* 2 PA5 red aux LED (PWM0B) | |
* 3 PA4 green aux LED | |
* 4 PA3 blue aux LED | |
* 5 PA2 e-switch | |
* 6 PA1 button LED | |
* 7 PA0 (none) | |
* 8 GND GND | |
* 9 VCC VCC | |
* 10 PC5 (none) | |
* 11 PC4 (none) | |
* 12 PC3 RESET | |
* 13 PC2 (none) | |
* 14 PC1 SCK | |
* 15 PC0 (none) PWM0A | |
* 16 PB3 7135 PWM (PWM1A) | |
* 17 PB2 MISO | |
* 18 PB1 MOSI | |
* 19 PB0 (none) | |
* 20 PA7 (none) | |
* ADC12 thermal sensor | |
*/ | |
#ifdef ATTINY | |
#undef ATTINY | |
#endif | |
#define ATTINY 1634 | |
#include <avr/io.h> | |
#define PWM_CHANNELS 2 | |
#define SWITCH_PIN PA2 // pin 5 | |
#define SWITCH_PCINT PCINT2 // pin 5 pin change interrupt | |
#define SWITCH_PCIE PCIE0 // PCIE0 is for PCINT[7:0] | |
#define SWITCH_PCMSK PCMSK0 // PCMSK0 is for PCINT[7:0] | |
#define SWITCH_PORT PINA // PINA or PINB or PINC | |
#define PWM1_PIN PB3 // pin 16, 1x7135 PWM | |
#define PWM1_LVL OCR1A // OCR1A is the output compare register for PB3 | |
#define PWM2_PIN PA6 // pin 1, FET PWM | |
#define PWM2_LVL OCR1B // OCR1B is the output compare register for PB1 | |
#define ADC_PRSCL 0x07 // clk/128 | |
// average drop across diode on this hardware | |
#ifndef VOLTAGE_FUDGE_FACTOR | |
#define VOLTAGE_FUDGE_FACTOR 4 // add 0.20V (measured 0.22V) | |
#endif | |
// this light has aux LEDs under the optic | |
#define AUXLED_R_PIN PA1 // dmn: swapped with BUTTON_LED_PIN | |
#define AUXLED_G_PIN PA4 // pin 3 | |
#define AUXLED_B_PIN PA3 // pin 4 | |
#define AUXLED_RGB_PORT PORTA // PORTA or PORTB or PORTC | |
#define AUXLED_RGB_DDR DDRA // DDRA or DDRB or DDRC | |
#define AUXLED_RGB_PUE PUEA // PUEA or PUEB or PUEC | |
#define BUTTON_LED_PIN PA5 // dmn: swapped with AUXLED_R_PIN | |
#define BUTTON_LED_PORT PORTA // for all "PA" pins | |
#define BUTTON_LED_DDR DDRA // for all "PA" pins | |
#define BUTTON_LED_PUE PUEA // for all "PA" pins | |
// with so many pins, doing this all with #ifdefs gets awkward... | |
// ... so just hardcode it in each hwdef file instead | |
inline void hwdef_setup() { | |
// enable output ports | |
// 7135 | |
DDRB = (1 << PWM1_PIN); | |
// FET, aux R/G/B, button LED | |
DDRA = (1 << PWM2_PIN) | |
| (1 << AUXLED_R_PIN) | |
| (1 << AUXLED_G_PIN) | |
| (1 << AUXLED_B_PIN) | |
| (1 << BUTTON_LED_PIN) | |
; | |
// configure PWM | |
// Setup PWM. F_pwm = F_clkio / 2 / N / TOP, where N = prescale factor, TOP = top of counter | |
// pre-scale for timer: N = 1 | |
TCCR1A = (0<<WGM11) | (1<<WGM10) // 8-bit (TOP=0xFF) (DS table 12-5) | |
| (1<<COM1A1) | (0<<COM1A0) // PWM 1A in normal direction (DS table 12-4) | |
| (1<<COM1B1) | (0<<COM1B0) // PWM 1B in normal direction (DS table 12-4) | |
; | |
TCCR1B = (0<<CS12) | (0<<CS11) | (1<<CS10) // clk/1 (no prescaling) (DS table 12-6) | |
| (0<<WGM13) | (0<<WGM12) // phase-correct PWM (DS table 12-5) | |
; | |
// set up e-switch | |
//PORTA = (1 << SWITCH_PIN); // TODO: configure PORTA / PORTB / PORTC? | |
PUEA = (1 << SWITCH_PIN); // pull-up for e-switch | |
SWITCH_PCMSK = (1 << SWITCH_PCINT); // enable pin change interrupt | |
} | |
#define LAYOUT_DEFINED | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment