1
#ifndef HWDEF_GCH_FET1_T1616_H
2
#define HWDEF_GCH_FET1_T1616_H
4
/* gChart's custom FET+1 driver layout
6
PB0 - PWM for FET (TCA - WO0)
7
PB1 - PWM for 7135 (TCA - WO1)
8
PB2 - Switch pin, internal pullup
9
PB3 - Aux LED with 4700 Ohm series resistor
10
Read voltage from VCC pin, has diode with ~0.4v drop
1
// gChart's custom FET+1 driver layout
2
// Copyright (C) 2020-2023 gchart, Selene ToyKeeper
3
// SPDX-License-Identifier: GPL-3.0-or-later
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
15
#define LAYOUT_DEFINED
20
14
#define ATTINY 1616
21
15
#include <avr/io.h>
23
#define PWM_CHANNELS 2
26
#define SWITCH_PIN PIN2_bp
27
#define SWITCH_PORT VPORTB.IN
28
#define SWITCH_ISC_REG PORTB.PIN2CTRL
29
#define SWITCH_VECT PORTB_PORT_vect
30
#define SWITCH_INTFLG VPORTB.INTFLAGS
36
#define PWM1_PIN PB1 //
37
#define PWM1_LVL TCA0.SINGLE.CMP1 // CMP1 is the output compare register for PB1
42
#define PWM2_PIN PB0 //
43
#define PWM2_LVL TCA0.SINGLE.CMP0 // CMP0 is the output compare register for PB0
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
21
// allow using aux LEDs as extra channel modes
25
// * 0. FET+7135 stacked
27
#define NUM_CHANNEL_MODES 2
33
#define DEFAULT_CHANNEL_MODE CM_MAIN
35
// right-most bit first, modes are in fedcba9876543210 order
36
#define CHANNEL_MODES_ENABLED 0b00000001
39
#define PWM_CHANNELS 2 // old, remove this
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
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
56
#define CH1_PWM TCA0.SINGLE.CMP1BUF // CMP1 is the output compare register for PB1
60
#define CH2_PWM TCA0.SINGLE.CMP0BUF // CMP0 is the output compare register for PB0
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
46
69
// average drop across diode on this hardware
47
70
#ifndef VOLTAGE_FUDGE_FACTOR
48
71
#define VOLTAGE_FUDGE_FACTOR 8 // 4 = add 0.20V
54
#define AUXLED_PIN PIN3_bp
55
#define AUXLED_PORT PORTB
59
// with so many pins, doing this all with #ifdefs gets awkward...
60
// ... so just hardcode it in each hwdef file instead
75
#define AUXLED_PIN PIN3_bp
76
#define AUXLED_PORT PORTB
61
79
inline void hwdef_setup() {
63
81
// set up the system clock to run at 10 MHz instead of the default 3.33 MHz
64
_PROTECTED_WRITE( CLKCTRL.MCLKCTRLB, CLKCTRL_PDIV_2X_gc | CLKCTRL_PEN_bm );
82
_PROTECTED_WRITE( CLKCTRL.MCLKCTRLB,
83
CLKCTRL_PDIV_2X_gc | CLKCTRL_PEN_bm );
66
85
//VPORTA.DIR = 0b00000010;
67
VPORTB.DIR = PIN0_bm | PIN1_bm | PIN3_bm;
87
VPORTB.DIR = PIN0_bm // DD FET
68
90
//VPORTC.DIR = 0b00000000;
70
92
// enable pullups on the input pins to reduce power