forked from tinygo-org/drivers
/
registers.go
69 lines (59 loc) · 1.83 KB
/
registers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package pca9685
// Software reset addresses for generic i2c implementation
// and PCA specific SWRST. See section 7.6
const (
I2CSWRSTADR = 0x0
PCA9685SWRSTBYTE = 0b0000_0110 // 0x06
)
// Registries with nomenclature as seen in manual
const (
SUBADR1 uint8 = 0x2
SUBADR2 uint8 = 0x3
SUBADR3 uint8 = 0x4
MODE1 uint8 = 0x0
MODE2 uint8 = 0x1
ALLCALLADR uint8 = 0x05
SWRESET uint8 = 0b0000_0011
// Start of LED registries. corresponds to LED0_ON_L register.
// Use LED function to get registries of a specific PWM channel register.
LEDSTART = 0x06
)
// MODE1
const (
RESET byte = 0b1000_0000
EXTCLK byte = 0b0100_0000
AI byte = 0b0010_0000
SLEEP byte = 0b0001_0000
defaultMODE1Value byte = 0b0001_0001
)
// MODE2
const (
OUTDRV = 1 << 2
INVRT = 1 << 4
)
// LED channels from 0-15. Returns 4 registries associated with
// the channel PWM signal. Channel 250 (0xFA) gives ALL_LED registers.
// The L suffix represents the 8 LSB of 12 bit timing, the H suffix represents
// the 4 MSB of the timing. This way you have 0-4095 timing options. ON or OFF
// will be a number between these two or will be simply ON or OFF (fifth bit of H registry).
//
// The SetPWM implementation in this library does not do phase-shifting so OFF will always
// happen at time stamp 0. ON will solely decide duty cycle.
func LED(ch uint8) (ONL, ONH, OFFL, OFFH uint8) {
switch {
case ch == ALLLED:
return ALLLED, ALLLED + 1, ALLLED + 2, ALLLED + 3
case ch > 15:
panic("PWM channel out of range [0-15]")
default:
}
// 4 registries per channel. Starts at 6
onLReg := LEDSTART + 4*ch
return onLReg, onLReg + 1, onLReg + 2, onLReg + 3
}
const (
// ALLLED is channel that selects registries to control all leds. Use with function LED
ALLLED = 0xfa
// PRESCALE Prescaling byte
PRESCALE byte = 0xFE
)