LEDDriver_NXP_Arduino 0.5.2
LED driver device operation sample code for Arduino
Loading...
Searching...
No Matches
LEDDriver.h
1
8#ifndef ARDUINO_LED_DRIVER_NXP_ARD_H
9#define ARDUINO_LED_DRIVER_NXP_ARD_H
10
11#include <Arduino.h>
12#include <stdint.h>
13
14#include <I2C_device.h>
15#include <SPI.h>
16
17enum access_word : uint8_t
18{
19 SETTING,
20 MODE,
21 GROUP,
22 CNTL,
23 N_GROUP,
24 NUM_access_word,
25};
26
36{
37public:
38 enum board {
39 NONE,
40 ARDUINO_SHIELD,
41 };
42
43 LEDDriver( uint8_t n_ch, uint8_t PWM_r, uint8_t oe );
44 virtual ~LEDDriver();
45 virtual void reg_access( uint8_t reg, uint8_t val ) = 0;
46 virtual void reg_access( uint8_t reg, uint8_t *vp, int len ) = 0;
47 virtual uint8_t reg_access( uint8_t reg ) = 0;
48 virtual void reg_access_r( uint8_t reg, uint8_t *vp, int len ) = 0;
49
55 void pwm( uint8_t ch, float value );
56
62 void pwm( float* values );
63
68 void buffer_enable( bool flag );
69
74 void flush( void );
75
76 const uint8_t n_channel;
77
78protected:
79 const uint8_t reg_PWM;
80 const uint8_t oe_pin;
81private:
82 uint8_t *bp;
83};
84
85
86
94class PCA995x : public LEDDriver
95{
96public:
97 PCA995x( const uint8_t n_ch, const uint8_t PWM_r, const uint8_t IREF_r, const uint8_t IREFALL_r, const uint8_t* ar, const uint8_t oe = 8 );
98 virtual ~PCA995x();
99
100 virtual void begin( float current = 0.1, board env = NONE, bool buffered = false );
101 virtual void init( float current ) = 0;
102
107 void irefall( uint8_t iref );
108
109protected:
110 const uint8_t reg_IREF;
111 const uint8_t reg_IREFALL;
112
113public:
114 const uint8_t* arp;
115};
116
117
118class PCA995x_I2C : public PCA995x, public I2C_device
119{
120public:
121 PCA995x_I2C( const uint8_t i2c_address, const uint8_t n_ch, const uint8_t PWM_r, const uint8_t IREF_r, const uint8_t IREFALL_r, const uint8_t* ar, const uint8_t oe = 8);
122 PCA995x_I2C( TwoWire& wire, const uint8_t i2c_address, const uint8_t n_ch, const uint8_t PWM_r, const uint8_t IREF_r, const uint8_t IREFALL_r, const uint8_t* ar, const uint8_t oe = 8);
123 virtual ~PCA995x_I2C();
124
125 void reg_access( uint8_t reg, uint8_t val );
126 void reg_access( uint8_t reg, uint8_t *vp, int len );
127 uint8_t reg_access( uint8_t reg );
128 void reg_access_r( uint8_t reg, uint8_t *vp, int len );
129};
130
131
132
133class PCA995x_SPI : public PCA995x
134{
135public:
136 PCA995x_SPI( const uint8_t n_ch, const uint8_t PWM_r, const uint8_t IREF_r, const uint8_t IREFALL_r, const uint8_t* ar, const uint8_t oe = 9 );
137 virtual ~PCA995x_SPI();
138
139 void txrx( uint8_t *data, int size );
140
141 void reg_access( uint8_t reg, uint8_t val );
142 void reg_access( uint8_t reg, uint8_t *vp, int len );
143 uint8_t reg_access( uint8_t reg );
144 void reg_access_r( uint8_t reg, uint8_t *vp, int len );
145
146 void reg_w( uint8_t reg, uint8_t val );
147 void reg_w( uint8_t reg, uint8_t *vp, int len );
148 uint8_t reg_r( uint8_t reg );
149 void reg_r( uint8_t reg, uint8_t *vp, int len );
150 void write_r8( uint8_t reg, uint8_t val );
151 uint8_t read_r8( uint8_t reg );
152
157 void irefall( uint8_t iref );
158
159 void pwm( uint8_t ch, float value );
160 void pwm( float* values );
161
162private:
163 SPISettings spi_setting;
164};
165
166
175class PCA9955B : public PCA995x_I2C
176{
177public:
179 const static uint8_t n_channel = 16;
180
182 enum reg_num {
183 MODE1, MODE2,
184 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3,
185 GRPPWM, GRPFREQ,
186 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5, PWM6, PWM7,
187 PWM8, PWM9, PWM10, PWM11, PWM12, PWM13, PWM14, PWM15,
188 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5, IREF6, IREF7,
189 IREF8, IREF9, IREF10, IREF11, IREF12, IREF13, IREF14, IREF15,
190 RAMP_RATE_GRP0, STEP_TIME_GRP0, HOLD_CNTL_GRP0, IREF_GRP0,
191 RAMP_RATE_GRP1, STEP_TIME_GRP1, HOLD_CNTL_GRP1, IREF_GRP1,
192 RAMP_RATE_GRP2, STEP_TIME_GRP2, HOLD_CNTL_GRP2, IREF_GRP2,
193 RAMP_RATE_GRP3, STEP_TIME_GRP3, HOLD_CNTL_GRP3, IREF_GRP3,
194 GRAD_MODE_SEL0, GRAD_MODE_SEL1,
195 GRAD_GRP_SEL0, GRAD_GRP_SEL1, GRAD_GRP_SEL2, GRAD_GRP_SEL3,
196 GRAD_CNTL,
197 OFFSET,
198 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
199 PWMALL, IREFALL,
200 EFLAG0, EFLAG1, EFLAG2, EFLAG3,
201 };
202
207 PCA9955B( uint8_t i2c_address = (0xBC >> 1) );
208
214 PCA9955B( TwoWire& wire, uint8_t i2c_address = (0xBC >> 1) );
215 virtual ~PCA9955B();
216
221 void init( float current );
222
223 static constexpr uint8_t access_ref[ NUM_access_word ] = {
224 RAMP_RATE_GRP0,
225 GRAD_MODE_SEL0,
226 GRAD_GRP_SEL0,
227 GRAD_CNTL,
228 4,
229 };
230
231protected:
232 static const int n_group;
233};
234
235class PCA9956B : public PCA995x_I2C
236{
237public:
239 const static uint8_t n_channel = 24;
240
242 enum reg_num {
243 MODE1, MODE2,
244 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
245 GRPPWM, GRPFREQ,
246 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
247 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
248 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
249 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
250 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
251 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
252 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
253 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
254 OFFSET,
255 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
256 PWMALL, IREFALL,
257 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5
258 };
263 PCA9956B( uint8_t i2c_address = (0x02 >> 1) );
264
270 PCA9956B( TwoWire& wire, uint8_t i2c_address = (0x02 >> 1) );
271 virtual ~PCA9956B();
272
277 void init( float current );
278
279 static constexpr uint8_t access_ref[ NUM_access_word ] = {
280 0,
281 0,
282 0,
283 0,
284 0,
285 };
286};
287
288class PCA9957 : public PCA995x_SPI
289{
290public:
292 const static uint8_t n_channel = 24;
293
295 enum reg_num {
296 MODE1, MODE2,
297 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5,
298 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
299 GRPPWM, GRPFREQ,
300 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
301 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
302 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
303 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
304 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
305 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
306 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
307 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
308 RAMP_RATE_GRP0, STEP_TIME_GRP0, HOLD_CNTL_GRP0, IREF_GRP0,
309 RAMP_RATE_GRP1, STEP_TIME_GRP1, HOLD_CNTL_GRP1, IREF_GRP1,
310 RAMP_RATE_GRP2, STEP_TIME_GRP2, HOLD_CNTL_GRP2, IREF_GRP2,
311 RAMP_RATE_GRP3, STEP_TIME_GRP3, HOLD_CNTL_GRP3, IREF_GRP3,
312 RAMP_RATE_GRP4, STEP_TIME_GRP4, HOLD_CNTL_GRP4, IREF_GRP4,
313 RAMP_RATE_GRP5, STEP_TIME_GRP5, HOLD_CNTL_GRP5, IREF_GRP5,
314 GRAD_MODE_SEL0, GRAD_MODE_SEL1, GRAD_MODE_SEL2,
315 GRAD_GRP_SEL0, GRAD_GRP_SEL1, GRAD_GRP_SEL2,
316 GRAD_GRP_SEL3, GRAD_GRP_SEL4, GRAD_GRP_SEL5,
317 GRAD_GRP_SEL6, GRAD_GRP_SEL7, GRAD_GRP_SEL8,
318 GRAD_GRP_SEL9, GRAD_GRP_SEL10, GRAD_GRP_SEL11,
319 GRAD_CNTL0, GRAD_CNTL1,
320 OFFSET,
321 PWMALL, IREFALL
322 };
323
328 PCA9957();
329 virtual ~PCA9957();
330
335 void init( float current );
336
337 static constexpr uint8_t access_ref[ NUM_access_word ] = {
338 RAMP_RATE_GRP0,
339 GRAD_MODE_SEL0,
340 GRAD_GRP_SEL0,
341 GRAD_CNTL0,
342 6,
343 };
344};
345
346#endif // ARDUINO_LED_DRIVER_NXP_ARD_H
void pwm(uint8_t ch, float value)
Definition LEDDriver.cpp:16
void buffer_enable(bool flag)
Definition LEDDriver.cpp:47
void flush(void)
Definition LEDDriver.cpp:41
static const uint8_t n_channel
Definition LEDDriver.h:179
void init(float current)
Definition PCA9955B.cpp:18
void init(float current)
Definition PCA9956B.cpp:18
static const uint8_t n_channel
Definition LEDDriver.h:239
static const uint8_t n_channel
Definition LEDDriver.h:292
void init(float current)
Definition PCA9957.cpp:13
PCA9957()
Definition PCA9957.cpp:4
void irefall(uint8_t iref)
void irefall(uint8_t iref)
Definition LEDDriver.cpp:88