diff options
| author | Gabriel Hart | 2021-01-12 13:12:57 -0600 |
|---|---|---|
| committer | Gabriel Hart | 2021-01-12 13:12:57 -0600 |
| commit | d8f58fcbd5f35d9d2140a4bcaa6589e1c2962198 (patch) | |
| tree | a697ae021df44de2f442e583c661cf8a02149039 | |
| parent | Fix 1-Series standby tick speed, use 2C Turbo (diff) | |
| download | anduril-d8f58fcbd5f35d9d2140a4bcaa6589e1c2962198.tar.gz anduril-d8f58fcbd5f35d9d2140a4bcaa6589e1c2962198.tar.bz2 anduril-d8f58fcbd5f35d9d2140a4bcaa6589e1c2962198.zip | |
Add Sofirn SP10S (adapter) and dual-voltage logic
Diffstat (limited to '')
| -rw-r--r-- | hwdef-Sofirn-SP10S.h | 124 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/MODELS | 1 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/cfg-sofirn-sp10s.h | 30 | ||||
| -rw-r--r-- | spaghetti-monster/anduril/version.h | 2 | ||||
| -rw-r--r-- | spaghetti-monster/fsm-adc.c | 4 |
5 files changed, 160 insertions, 1 deletions
diff --git a/hwdef-Sofirn-SP10S.h b/hwdef-Sofirn-SP10S.h new file mode 100644 index 0000000..4e33246 --- /dev/null +++ b/hwdef-Sofirn-SP10S.h @@ -0,0 +1,124 @@ +#ifndef HWDEF_SOFIRN_SP10S_H +#define HWDEF_SOFIRN_SP10S_H + +/* gChart's PIC12 to ATTINY1616 v1 adapter for the SP10S +https://oshpark.com/shared_projects/rljCF1NN + +EDIT: modify the PCB, cutting the Pin 6 trace and use an airwire to route it to SOIC Pin 2 (PA5) +NOTE: a v2 (no airwire) is on the way and this HWDEF file will need to be updated accordingly + +PIC12 Pinout: +1 - VDD +2 - No Connect +3 - Low Channel FET (series 4.7K Ohms) +4 - Switch +5 - High Channel FET (main PWM) +6 - Voltage Divider (300K:100K Ohms) +7 - Boost chip enable +8 - GND + +ATTINY1616 Mapping: +2 - PA5 : ADC0 - AIN5 +3 - PB5 : TCA0 - WO2 Alternate MUX +4 - PB4 +5 - PB0 : TCA0 - WO0 +7 - PA1 + +*/ + + +#define LAYOUT_DEFINED + +#ifdef ATTINY +#undef ATTINY +#endif +#define ATTINY 1616 +#include <avr/io.h> + +#ifndef SWITCH_PIN +#define SWITCH_PIN 4 +#define SWITCH_PORT VPORTB.IN +#define SWITCH_ISC_REG PORTB.PIN4CTRL +#define SWITCH_VECT PORTB_PORT_vect +#define SWITCH_INTFLG VPORTB.INTFLAGS +#endif + +#define PWM_CHANNELS 2 + +// Small channel +#ifndef PWM1_PIN +#define PWM1_PIN PB5 +#define PWM1_LVL TCA0.SINGLE.CMP2 // PB5 is Alternate MUX for TCA Compare 2 +#endif + +// Big channel +#ifndef PWM2_PIN +#define PWM2_PIN PB0 +#define PWM2_LVL TCA0.SINGLE.CMP0 // PB0 is TCA Compare 0 +#endif + +#define LED_ENABLE_PIN PIN1_bp +#define LED_ENABLE_PORT PORTA_OUT + +#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_LOW_LOW 07 // the lower voltage range's danger zone 0.7 volts +#define ADMUX_VOLTAGE_DIVIDER ADC_MUXPOS_AIN5_gc // which ADC channel to read + +// Raw ADC readings at 4.4V and 2.2V +// calibrate the voltage readout here +// estimated / calculated values are: +// (voltage - D1) * (R2/(R2+R1) * 1024 / 1.1) +// Resistors are 300,000 and 100,000 +#ifndef ADC_44 +#define ADC_44 1023 // raw value at 4.40V +#endif +#ifndef ADC_22 +#define ADC_22 512 // raw value at 2.20V +#endif + + + +// with so many pins, doing this all with #ifdefs gets awkward... +// ... so just hardcode it in each hwdef file instead +inline void hwdef_setup() { + + // set up the system clock to run at 5 MHz instead of the default 3.33 MHz + _PROTECTED_WRITE( CLKCTRL.MCLKCTRLB, CLKCTRL_PDIV_4X_gc | CLKCTRL_PEN_bm ); + + VPORTA.DIR = PIN1_bm; // Boost enable pin + VPORTB.DIR = PIN0_bm | PIN5_bm; // PWM pins as output + //VPORTC.DIR = ...; + + + // enable pullups on the input pins to reduce power + PORTA.PIN0CTRL = PORT_PULLUPEN_bm; + //PORTA.PIN1CTRL = PORT_PULLUPEN_bm; // Boost enable pin + PORTA.PIN2CTRL = PORT_PULLUPEN_bm; + PORTA.PIN3CTRL = PORT_PULLUPEN_bm; + PORTA.PIN4CTRL = PORT_PULLUPEN_bm; + //PORTA.PIN5CTRL = PORT_PULLUPEN_bm; // Voltage divider + PORTA.PIN6CTRL = PORT_PULLUPEN_bm; + PORTA.PIN7CTRL = PORT_PULLUPEN_bm; + + //PORTB.PIN0CTRL = PORT_PULLUPEN_bm; // Big PWM channel + PORTB.PIN1CTRL = PORT_PULLUPEN_bm; + PORTB.PIN2CTRL = PORT_PULLUPEN_bm; + PORTB.PIN3CTRL = PORT_PULLUPEN_bm; + PORTB.PIN4CTRL = PORT_PULLUPEN_bm | PORT_ISC_BOTHEDGES_gc; // Switch + //PORTB.PIN5CTRL = PORT_PULLUPEN_bm; // Small PWM channel + + //PORTC.PIN0CTRL = PORT_PULLUPEN_bm; connected to the ADC via airwire + PORTC.PIN1CTRL = PORT_PULLUPEN_bm; + PORTC.PIN2CTRL = PORT_PULLUPEN_bm; + PORTC.PIN3CTRL = PORT_PULLUPEN_bm; + + // set up the PWM + PORTMUX.CTRLC = PORTMUX_TCA02_ALTERNATE_gc; // Use alternate pin for TCA0:WO2 + TCA0.SINGLE.CTRLB = TCA_SINGLE_CMP0EN_bm | TCA_SINGLE_CMP2EN_bm | TCA_SINGLE_WGMODE_SINGLESLOPE_gc; + TCA0.SINGLE.PER = 255; + TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc | TCA_SINGLE_ENABLE_bm; +} + + +#endif diff --git a/spaghetti-monster/anduril/MODELS b/spaghetti-monster/anduril/MODELS index 4ad4635..0972e8b 100644 --- a/spaghetti-monster/anduril/MODELS +++ b/spaghetti-monster/anduril/MODELS @@ -36,6 +36,7 @@ Model numbers: 0611 blf-q8 0612 sofirn-sp36 0621 blf-lantern +0622 sofirn-sp10s 1618 gchart-fet1-t16 Duplicates: Missing: diff --git a/spaghetti-monster/anduril/cfg-sofirn-sp10s.h b/spaghetti-monster/anduril/cfg-sofirn-sp10s.h new file mode 100644 index 0000000..5747cc4 --- /dev/null +++ b/spaghetti-monster/anduril/cfg-sofirn-sp10s.h @@ -0,0 +1,30 @@ +// gChart's custom SP10S driver config options for Anduril +#define MODEL_NUMBER "0622" +#include "hwdef-Sofirn-SP10S.h" +// ATTINY: 1616 + +#undef BLINK_AT_RAMP_MIDDLE + +#define BATTCHECK_VpT + +#define USE_DYNAMIC_UNDERCLOCKING + +#define RAMP_LENGTH 150 +#define PWM1_LEVELS 20,30,41,54,69,87,106,128,152,179,209,242,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,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,1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,4,5,5,5,6,6,7,7,8,8,9,9,10,10,11,12,12,13,14,14,15,16,17,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,33,34,35,36,38,39,41,42,43,45,46,48,50,51,53,55,56,58,60,62,64,66,68,70,72,74,76,78,80,83,85,87,90,92,94,97,99,102,105,107,110,113,116,119,121,124,127,130,133,137,140,143,146,150,153,156,160,164,167,171,174,178,182,186,190,194,198,202,206,210,214,219,223,227,232,236,241,246,250,255 + +#define MAX_1x7135 13 +#define HALFSPEED_LEVEL 14 +#define QUARTERSPEED_LEVEL 6 + +#define RAMP_SMOOTH_FLOOR 1 +#define RAMP_SMOOTH_CEIL 120 +#define RAMP_DISCRETE_FLOOR 10 +#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL +#define RAMP_DISCRETE_STEPS 7 + +// stop panicking at ~30% power +#define THERM_FASTER_LEVEL 105 + +// enable 2 click turbo +#define USE_2C_MAX_TURBO diff --git a/spaghetti-monster/anduril/version.h b/spaghetti-monster/anduril/version.h index 8cc1e77..5afe62a 100644 --- a/spaghetti-monster/anduril/version.h +++ b/spaghetti-monster/anduril/version.h @@ -1 +1 @@ -#define VERSION_NUMBER "20201219" +#define VERSION_NUMBER "20210112" diff --git a/spaghetti-monster/fsm-adc.c b/spaghetti-monster/fsm-adc.c index 2818731..975d12e 100644 --- a/spaghetti-monster/fsm-adc.c +++ b/spaghetti-monster/fsm-adc.c @@ -341,7 +341,11 @@ static inline void ADC_voltage_handler() { if (lvp_timer) { lvp_timer --; } else { // it has been long enough since the last warning + #ifdef DUAL_VOLTAGE_FLOOR + if (((voltage < VOLTAGE_LOW) && (voltage > DUAL_VOLTAGE_FLOOR)) || (voltage < DUAL_VOLTAGE_LOW_LOW)) { + #else if (voltage < VOLTAGE_LOW) { + #endif // send out a warning emit(EV_voltage_low, 0); // reset rate-limit counter |
