1
// BLF/TLF FW3A driver layout
2
// Copyright (C) 2018-2023 Selene ToyKeeper
3
// SPDX-License-Identifier: GPL-3.0-or-later
4
/* BLF/TLF FW3A driver layout
7
9
* eswitch -|2 7|- optic nerve
13
#define PWM_CHANNELS 3
18
#define HWDEF_C_FILE hwdef-fw3a.c
21
// * 0. FET+7+1 stacked
22
#define NUM_CHANNEL_MODES 1
27
#define DEFAULT_CHANNEL_MODE CM_MAIN
29
// right-most bit first, modes are in fedcba9876543210 order
30
#define CHANNEL_MODES_ENABLED 0b00000001
33
#define PWM_CHANNELS 3 // old, remove this
35
#define PWM_BITS 8 // attiny85 only supports up to 8 bits
36
#define PWM_GET PWM_GET8
37
#define PWM_DATATYPE uint8_t
38
#define PWM_DATATYPE2 uint16_t
39
#define PWM1_DATATYPE uint8_t // 1x7135 ramp
40
#define PWM2_DATATYPE uint8_t // 7x7135 ramp
41
#define PWM3_DATATYPE uint8_t // DD FET ramp
43
#define PWM_TOP_INIT 255 // highest value used in top half of ramp
46
#define CH1_PIN PB0 // pin 5, 1x7135 PWM
47
#define CH1_PWM OCR0A // OCR0A is the output compare register for PB0
50
#define CH2_PIN PB1 // pin 6, 7x7135 PWM
51
#define CH2_PWM OCR0B // OCR0B is the output compare register for PB1
54
#define CH3_PIN PB4 // pin 3, FET PWM
55
#define CH3_PWM OCR1B // OCR1B is the output compare register for PB4
16
59
#define SWITCH_PIN PB3 // pin 2
17
60
#define SWITCH_PCINT PCINT3 // pin 2 pin change interrupt
21
#define PWM1_PIN PB0 // pin 5, 1x7135 PWM
22
#define PWM1_LVL OCR0A // OCR0A is the output compare register for PB0
25
#define PWM2_PIN PB1 // pin 6, 7x7135 PWM
26
#define PWM2_LVL OCR0B // OCR0B is the output compare register for PB1
29
#define PWM3_PIN PB4 // pin 3, FET PWM
30
#define PWM3_LVL OCR1B // OCR1B is the output compare register for PB4
34
64
#define VISION_PIN PB2 // pin 7, optic nerve
35
65
//#define ADC_CHANNEL 0x01 // MUX 01 corresponds with PB2
45
75
#define FAST 0xA3 // fast PWM both channels
46
76
#define PHASE 0xA1 // phase-correct PWM both channels
79
inline void hwdef_setup() {
81
// configure PWM channels
86
// configure PWM channels
87
TCCR0B = 0x01; // pre-scaler for timer (1 => 1, 2 => 8, 3 => 64...)
90
// Second PWM counter is ... weird
92
GTCCR = _BV (COM1B1) | _BV (PWM1B);
93
OCR1C = PWM_TOP_INIT; // Set ceiling value to maximum
96
PORTB = (1 << SWITCH_PIN); // e-switch is the only input
97
PCMSK = (1 << SWITCH_PIN); // pin change interrupt uses this pin
99
// TODO: set up the vision pin
48
104
#define LAYOUT_DEFINED