LEDDriver_NXP_Arduino 0.5.4
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
231#if DOXYGEN_ONLY
233 enum board {
234 NONE,
235 ARDUINO_SHIELD,
236 };
237
246 void begin( float current = 0.1, board env = NONE, bool buffered = false );
247
253 void pwm( uint8_t ch, float value );
254
260 void pwm( float* values );
261
266 void buffer_enable( bool flag );
267
272 void flush( void );
273
281 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
282
290 int reg_w( uint8_t reg_adr, uint8_t data );
291
299 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
300
306 uint8_t reg_r( uint8_t reg_adr );
307
313 void write_r8( uint8_t reg, uint8_t val );
314
320 uint8_t read_r8( uint8_t reg );
321
330 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
331 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
332#endif // DOXYGEN_ONLY
333
334protected:
335 static const int n_group;
336};
337
338class PCA9956B : public PCA995x_I2C
339{
340public:
342 const static uint8_t n_channel = 24;
343
345 enum reg_num {
346 MODE1, MODE2,
347 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
348 GRPPWM, GRPFREQ,
349 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
350 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
351 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
352 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
353 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
354 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
355 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
356 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
357 OFFSET,
358 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
359 PWMALL, IREFALL,
360 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5
361 };
366 PCA9956B( uint8_t i2c_address = (0x02 >> 1) );
367
373 PCA9956B( TwoWire& wire, uint8_t i2c_address = (0x02 >> 1) );
374 virtual ~PCA9956B();
375
380 void init( float current );
381
382 static constexpr uint8_t access_ref[ NUM_access_word ] = {
383 0,
384 0,
385 0,
386 0,
387 0,
388 };
389
390#if DOXYGEN_ONLY
392 enum board {
393 NONE,
394 ARDUINO_SHIELD,
395 };
396
405 void begin( float current = 0.1, board env = NONE, bool buffered = false );
406
412 void pwm( uint8_t ch, float value );
413
419 void pwm( float* values );
420
425 void buffer_enable( bool flag );
426
431 void flush( void );
432
440 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
441
449 int reg_w( uint8_t reg_adr, uint8_t data );
450
458 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
459
465 uint8_t reg_r( uint8_t reg_adr );
466
472 void write_r8( uint8_t reg, uint8_t val );
473
479 uint8_t read_r8( uint8_t reg );
480
489 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
490 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
491#endif // DOXYGEN_ONLY
492
493};
494
495class PCA9957 : public PCA995x_SPI
496{
497public:
499 const static uint8_t n_channel = 24;
500
502 enum reg_num {
503 MODE1, MODE2,
504 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5,
505 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
506 GRPPWM, GRPFREQ,
507 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
508 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
509 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
510 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
511 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
512 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
513 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
514 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
515 RAMP_RATE_GRP0, STEP_TIME_GRP0, HOLD_CNTL_GRP0, IREF_GRP0,
516 RAMP_RATE_GRP1, STEP_TIME_GRP1, HOLD_CNTL_GRP1, IREF_GRP1,
517 RAMP_RATE_GRP2, STEP_TIME_GRP2, HOLD_CNTL_GRP2, IREF_GRP2,
518 RAMP_RATE_GRP3, STEP_TIME_GRP3, HOLD_CNTL_GRP3, IREF_GRP3,
519 RAMP_RATE_GRP4, STEP_TIME_GRP4, HOLD_CNTL_GRP4, IREF_GRP4,
520 RAMP_RATE_GRP5, STEP_TIME_GRP5, HOLD_CNTL_GRP5, IREF_GRP5,
521 GRAD_MODE_SEL0, GRAD_MODE_SEL1, GRAD_MODE_SEL2,
522 GRAD_GRP_SEL0, GRAD_GRP_SEL1, GRAD_GRP_SEL2,
523 GRAD_GRP_SEL3, GRAD_GRP_SEL4, GRAD_GRP_SEL5,
524 GRAD_GRP_SEL6, GRAD_GRP_SEL7, GRAD_GRP_SEL8,
525 GRAD_GRP_SEL9, GRAD_GRP_SEL10, GRAD_GRP_SEL11,
526 GRAD_CNTL0, GRAD_CNTL1,
527 OFFSET,
528 PWMALL, IREFALL
529 };
530
535 PCA9957();
536 virtual ~PCA9957();
537
542 void init( float current );
543
544 static constexpr uint8_t access_ref[ NUM_access_word ] = {
545 RAMP_RATE_GRP0,
546 GRAD_MODE_SEL0,
547 GRAD_GRP_SEL0,
548 GRAD_CNTL0,
549 6,
550 };
551
552#if DOXYGEN_ONLY
554 enum board {
555 NONE,
556 ARDUINO_SHIELD,
557 };
558
567 void begin( float current = 0.1, board env = NONE, bool buffered = false );
568
574 void pwm( uint8_t ch, float value );
575
581 void pwm( float* values );
582
587 void buffer_enable( bool flag );
588
593 void flush( void );
594
602 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
603
611 int reg_w( uint8_t reg_adr, uint8_t data );
612
620 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
621
627 uint8_t reg_r( uint8_t reg_adr );
628
634 void write_r8( uint8_t reg, uint8_t val );
635
641 uint8_t read_r8( uint8_t reg );
642
651 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
652 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
653#endif // DOXYGEN_ONLY
654
655};
656
657#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
void write_r8(uint8_t reg, uint8_t val)
static const uint8_t n_channel
Definition LEDDriver.h:179
void pwm(float *values)
uint8_t read_r8(uint8_t reg)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
void buffer_enable(bool flag)
void flush(void)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
void pwm(uint8_t ch, float value)
uint8_t reg_r(uint8_t reg_adr)
int reg_w(uint8_t reg_adr, uint8_t data)
void init(float current)
Definition PCA9955B.cpp:18
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
void begin(float current=0.1, board env=NONE, bool buffered=false)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
void flush(void)
void pwm(float *values)
void write_r8(uint8_t reg, uint8_t val)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
void init(float current)
Definition PCA9956B.cpp:18
static const uint8_t n_channel
Definition LEDDriver.h:342
uint8_t read_r8(uint8_t reg)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
void buffer_enable(bool flag)
int reg_w(uint8_t reg_adr, uint8_t data)
uint8_t reg_r(uint8_t reg_adr)
void begin(float current=0.1, board env=NONE, bool buffered=false)
void pwm(uint8_t ch, float value)
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
static const uint8_t n_channel
Definition LEDDriver.h:499
void pwm(float *values)
void flush(void)
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint8_t reg_r(uint8_t reg_adr)
void init(float current)
Definition PCA9957.cpp:13
uint8_t read_r8(uint8_t reg)
int reg_w(uint8_t reg_adr, uint8_t data)
void write_r8(uint8_t reg, uint8_t val)
void buffer_enable(bool flag)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
void pwm(uint8_t ch, float value)
PCA9957()
Definition PCA9957.cpp:4
void begin(float current=0.1, board env=NONE, bool buffered=false)
void irefall(uint8_t iref)
void irefall(uint8_t iref)
Definition LEDDriver.cpp:88