483.12.14
by Selene ToyKeeper
switched the rest of FSM + Anduril to use SPDX license headers |
1 |
// gChart's custom FET+1 driver layout
|
483.12.139
by Selene ToyKeeper
converted gchart-fet1-t1616 to new API |
2 |
// Copyright (C) 2020-2023 gchart, Selene ToyKeeper
|
483.12.14
by Selene ToyKeeper
switched the rest of FSM + Anduril to use SPDX license headers |
3 |
// SPDX-License-Identifier: GPL-3.0-or-later
|
4 |
#pragma once
|
|
5 |
||
6 |
/*
|
|
7 |
* PB0 - PWM for FET (TCA - WO0)
|
|
8 |
* PB1 - PWM for 7135 (TCA - WO1)
|
|
9 |
* PB2 - Switch pin, internal pullup
|
|
10 |
* PB3 - Aux LED with 4700 Ohm series resistor
|
|
11 |
* Read voltage from VCC pin, has diode with ~0.4v drop
|
|
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
12 |
*/
|
13 |
||
14 |
#define ATTINY 1616
|
|
15 |
#include <avr/io.h> |
|
16 |
||
483.12.139
by Selene ToyKeeper
converted gchart-fet1-t1616 to new API |
17 |
// nearly all t1616-based FET+1 drivers work pretty much the same
|
18 |
// (this one has single-color aux like the TS10)
|
|
19 |
#define HWDEF_C_FILE hwdef-wurkkos-ts10.c
|
|
20 |
||
21 |
// allow using aux LEDs as extra channel modes
|
|
22 |
#include "chan-aux.h" |
|
23 |
||
24 |
// channel modes:
|
|
25 |
// * 0. FET+7135 stacked
|
|
26 |
// * 1. aux LEDs
|
|
27 |
#define NUM_CHANNEL_MODES 2
|
|
28 |
enum CHANNEL_MODES { |
|
29 |
CM_MAIN = 0, |
|
30 |
CM_AUX
|
|
31 |
};
|
|
32 |
||
33 |
#define DEFAULT_CHANNEL_MODE CM_MAIN
|
|
34 |
||
35 |
// right-most bit first, modes are in fedcba9876543210 order
|
|
36 |
#define CHANNEL_MODES_ENABLED 0b00000001
|
|
37 |
||
38 |
||
39 |
#define PWM_CHANNELS 2 // old, remove this |
|
40 |
||
41 |
#define PWM_BITS 16 // dynamic 16-bit, but never goes over 255 |
|
42 |
#define PWM_GET PWM_GET8
|
|
43 |
#define PWM_DATATYPE uint16_t // is used for PWM_TOPS (which goes way over 255) |
|
44 |
#define PWM_DATATYPE2 uint16_t // only needs 32-bit if ramp values go over 255 |
|
45 |
#define PWM1_DATATYPE uint8_t // 1x7135 ramp |
|
46 |
#define PWM2_DATATYPE uint8_t // DD FET ramp |
|
47 |
||
48 |
// PWM parameters of both channels are tied together because they share a counter
|
|
49 |
#define PWM_TOP TCA0.SINGLE.PERBUF // holds the TOP value for for variable-resolution PWM |
|
50 |
#define PWM_TOP_INIT 255 // highest value used in top half of ramp |
|
51 |
// not necessary when double-buffered "BUF" registers are used
|
|
52 |
#define PWM_CNT TCA0.SINGLE.CNT // for resetting phase after each TOP adjustment |
|
53 |
||
54 |
// 1x7135 channel
|
|
55 |
#define CH1_PIN PB1
|
|
56 |
#define CH1_PWM TCA0.SINGLE.CMP1BUF // CMP1 is the output compare register for PB1 |
|
57 |
||
58 |
// DD FET channel
|
|
59 |
#define CH2_PIN PB0
|
|
60 |
#define CH2_PWM TCA0.SINGLE.CMP0BUF // CMP0 is the output compare register for PB0 |
|
61 |
||
62 |
// e-switch
|
|
63 |
#define SWITCH_PIN PIN2_bp
|
|
64 |
#define SWITCH_PORT VPORTB.IN
|
|
65 |
#define SWITCH_ISC_REG PORTB.PIN2CTRL
|
|
66 |
#define SWITCH_VECT PORTB_PORT_vect
|
|
67 |
#define SWITCH_INTFLG VPORTB.INTFLAGS
|
|
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
68 |
|
69 |
// average drop across diode on this hardware
|
|
70 |
#ifndef VOLTAGE_FUDGE_FACTOR
|
|
71 |
#define VOLTAGE_FUDGE_FACTOR 8 // 4 = add 0.20V |
|
72 |
#endif
|
|
73 |
||
74 |
// lighted button
|
|
483.12.139
by Selene ToyKeeper
converted gchart-fet1-t1616 to new API |
75 |
#define AUXLED_PIN PIN3_bp
|
76 |
#define AUXLED_PORT PORTB
|
|
77 |
||
78 |
||
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
79 |
inline void hwdef_setup() { |
80 |
||
483.3.12
by Gabriel Hart
Update 1-Series to use 10 MHz clock and Phase Correct PWM. Add PWM documentation. Also clear thermal offset on factory reset instead of setting it to 21*C. |
81 |
// set up the system clock to run at 10 MHz instead of the default 3.33 MHz
|
483.12.139
by Selene ToyKeeper
converted gchart-fet1-t1616 to new API |
82 |
_PROTECTED_WRITE( CLKCTRL.MCLKCTRLB, |
83 |
CLKCTRL_PDIV_2X_gc | CLKCTRL_PEN_bm ); |
|
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
84 |
|
85 |
//VPORTA.DIR = 0b00000010;
|
|
483.12.139
by Selene ToyKeeper
converted gchart-fet1-t1616 to new API |
86 |
// Outputs
|
87 |
VPORTB.DIR = PIN0_bm // DD FET |
|
88 |
| PIN1_bm // 7135 |
|
89 |
| PIN3_bm; // Aux LED |
|
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
90 |
//VPORTC.DIR = 0b00000000;
|
91 |
||
92 |
// enable pullups on the input pins to reduce power
|
|
93 |
PORTA.PIN0CTRL = PORT_PULLUPEN_bm; |
|
94 |
PORTA.PIN1CTRL = PORT_PULLUPEN_bm; |
|
95 |
PORTA.PIN2CTRL = PORT_PULLUPEN_bm; |
|
96 |
PORTA.PIN3CTRL = PORT_PULLUPEN_bm; |
|
97 |
PORTA.PIN4CTRL = PORT_PULLUPEN_bm; |
|
98 |
PORTA.PIN5CTRL = PORT_PULLUPEN_bm; |
|
99 |
PORTA.PIN6CTRL = PORT_PULLUPEN_bm; |
|
100 |
PORTA.PIN7CTRL = PORT_PULLUPEN_bm; |
|
483.4.6
by Selene Scriven
minor formatting cleanup on t1616 hwdef files |
101 |
|
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
102 |
//PORTB.PIN0CTRL = PORT_PULLUPEN_bm; // FET channel
|
103 |
//PORTB.PIN1CTRL = PORT_PULLUPEN_bm; // 7135 channel
|
|
104 |
PORTB.PIN2CTRL = PORT_PULLUPEN_bm | PORT_ISC_BOTHEDGES_gc; // switch |
|
105 |
//PORTB.PIN3CTRL = PORT_PULLUPEN_bm; // Aux LED
|
|
106 |
PORTB.PIN4CTRL = PORT_PULLUPEN_bm; |
|
107 |
PORTB.PIN5CTRL = PORT_PULLUPEN_bm; |
|
483.4.6
by Selene Scriven
minor formatting cleanup on t1616 hwdef files |
108 |
|
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
109 |
PORTC.PIN0CTRL = PORT_PULLUPEN_bm; |
110 |
PORTC.PIN1CTRL = PORT_PULLUPEN_bm; |
|
111 |
PORTC.PIN2CTRL = PORT_PULLUPEN_bm; |
|
112 |
PORTC.PIN3CTRL = PORT_PULLUPEN_bm; |
|
483.4.6
by Selene Scriven
minor formatting cleanup on t1616 hwdef files |
113 |
|
114 |
// set up the PWM
|
|
483.3.12
by Gabriel Hart
Update 1-Series to use 10 MHz clock and Phase Correct PWM. Add PWM documentation. Also clear thermal offset on factory reset instead of setting it to 21*C. |
115 |
// https://ww1.microchip.com/downloads/en/DeviceDoc/ATtiny1614-16-17-DataSheet-DS40002204A.pdf
|
116 |
// PB0 is TCA0:WO0, use TCA_SINGLE_CMP0EN_bm
|
|
117 |
// PB1 is TCA0:WO1, use TCA_SINGLE_CMP1EN_bm
|
|
118 |
// PB2 is TCA0:WO2, use TCA_SINGLE_CMP2EN_bm
|
|
119 |
// For Fast (Single Slope) PWM use TCA_SINGLE_WGMODE_SINGLESLOPE_gc
|
|
120 |
// For Phase Correct (Dual Slope) PWM use TCA_SINGLE_WGMODE_DSBOTTOM_gc
|
|
121 |
// See the manual for other pins, clocks, configs, portmux, etc
|
|
483.12.139
by Selene ToyKeeper
converted gchart-fet1-t1616 to new API |
122 |
TCA0.SINGLE.CTRLB = TCA_SINGLE_CMP0EN_bm |
123 |
| TCA_SINGLE_CMP1EN_bm |
|
124 |
| TCA_SINGLE_WGMODE_DSBOTTOM_gc; |
|
125 |
TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc |
|
126 |
| TCA_SINGLE_ENABLE_bm; |
|
127 |
||
128 |
PWM_TOP = PWM_TOP_INIT; |
|
129 |
||
483.3.1
by Gabriel Hart
Add AVR 1-Series and t1616 board and scripts |
130 |
}
|
131 |
||
483.12.139
by Selene ToyKeeper
converted gchart-fet1-t1616 to new API |
132 |
|
133 |
#define LAYOUT_DEFINED
|
|
134 |