LEDDriver_NXP_Arduino 1.0.3
LED driver device operation sample code for Arduino
Loading...
Searching...
No Matches
LEDDriver.h
1
7
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
34
35class LEDDriver
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
61 void pwm( float* values );
62
67 void buffer_enable( bool flag );
68
73 void flush( void );
74
75 const uint8_t n_channel;
76
77protected:
78 const uint8_t reg_PWM;
79 const uint8_t oe_pin;
80private:
81 uint8_t *bp;
82};
83
84
85
92
93class PCA995x : public LEDDriver
94{
95public:
96 PCA995x( uint8_t n_ch, uint8_t PWM_r, uint8_t IREF_r, uint8_t IREFALL_r, const uint8_t* ar, uint8_t oe = 8 );
97 virtual ~PCA995x();
98
99 virtual void begin( float current = 0.1, board env = NONE, bool buffered = false );
100 virtual void init( float current ) = 0;
101
106 void irefall( uint8_t iref );
107
108protected:
109 const uint8_t reg_IREF;
110 const uint8_t reg_IREFALL;
111
112public:
113 const uint8_t* arp;
114};
115
116
117class PCA995x_I2C : public PCA995x, public I2C_device
118{
119public:
120 PCA995x_I2C( uint8_t i2c_address, uint8_t n_ch, uint8_t PWM_r, uint8_t IREF_r, uint8_t IREFALL_r, const uint8_t* ar, uint8_t oe = 8);
121 PCA995x_I2C( TwoWire& wire, uint8_t i2c_address, uint8_t n_ch, uint8_t PWM_r, uint8_t IREF_r, uint8_t IREFALL_r, const uint8_t* ar, uint8_t oe = 8);
122 virtual ~PCA995x_I2C();
123
124 void reg_access( uint8_t reg, uint8_t val );
125 void reg_access( uint8_t reg, uint8_t *vp, int len );
126 uint8_t reg_access( uint8_t reg );
127 void reg_access_r( uint8_t reg, uint8_t *vp, int len );
128};
129
130
131
132class PCA995x_SPI : public PCA995x
133{
134public:
135 PCA995x_SPI( uint8_t n_ch, uint8_t PWM_r, uint8_t IREF_r, uint8_t IREFALL_r, const uint8_t* ar, uint8_t oe = 9 );
136 virtual ~PCA995x_SPI();
137
138 void txrx( uint8_t *data, int size );
139
140 void reg_access( uint8_t reg, uint8_t val );
141 void reg_access( uint8_t reg, uint8_t *vp, int len );
142 uint8_t reg_access( uint8_t reg );
143 void reg_access_r( uint8_t reg, uint8_t *vp, int len );
144
145 void reg_w( uint8_t reg, uint8_t val );
146 void reg_w( uint8_t reg, uint8_t *vp, int len );
147 uint8_t reg_r( uint8_t reg );
148 void reg_r( uint8_t reg, uint8_t *vp, int len );
149 void write_r8( uint8_t reg, uint8_t val );
150 uint8_t read_r8( uint8_t reg );
151
156 void irefall( uint8_t iref );
157
158 void pwm( uint8_t ch, float value );
159 void pwm( float* values );
160
161private:
162 SPISettings spi_setting;
163};
164
165
173
174class PCA9955B : public PCA995x_I2C
175{
176public:
178 static constexpr uint8_t n_channel = 16;
179
181 enum reg_num {
182 MODE1, MODE2,
183 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3,
184 GRPPWM, GRPFREQ,
185 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5, PWM6, PWM7,
186 PWM8, PWM9, PWM10, PWM11, PWM12, PWM13, PWM14, PWM15,
187 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5, IREF6, IREF7,
188 IREF8, IREF9, IREF10, IREF11, IREF12, IREF13, IREF14, IREF15,
189 RAMP_RATE_GRP0, STEP_TIME_GRP0, HOLD_CNTL_GRP0, IREF_GRP0,
190 RAMP_RATE_GRP1, STEP_TIME_GRP1, HOLD_CNTL_GRP1, IREF_GRP1,
191 RAMP_RATE_GRP2, STEP_TIME_GRP2, HOLD_CNTL_GRP2, IREF_GRP2,
192 RAMP_RATE_GRP3, STEP_TIME_GRP3, HOLD_CNTL_GRP3, IREF_GRP3,
193 GRAD_MODE_SEL0, GRAD_MODE_SEL1,
194 GRAD_GRP_SEL0, GRAD_GRP_SEL1, GRAD_GRP_SEL2, GRAD_GRP_SEL3,
195 GRAD_CNTL,
196 OFFSET,
197 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
198 PWMALL, IREFALL,
199 EFLAG0, EFLAG1, EFLAG2, EFLAG3,
200 };
201
206 PCA9955B( uint8_t i2c_address = (0xBC >> 1) );
207
213 PCA9955B( TwoWire& wire, uint8_t i2c_address = (0xBC >> 1) );
214 virtual ~PCA9955B();
215
220 void init( float current );
221
222 static constexpr uint8_t access_ref[ NUM_access_word ] = {
223 RAMP_RATE_GRP0,
224 GRAD_MODE_SEL0,
225 GRAD_GRP_SEL0,
226 GRAD_CNTL,
227 4,
228 };
229
230#if DOXYGEN_ONLY
232 enum board {
233 NONE,
234 ARDUINO_SHIELD,
235 };
236
245 void begin( float current = 0.1, board env = NONE, bool buffered = false );
246
252 void pwm( uint8_t ch, float value );
253
258 void pwm( float* values );
259
264 void buffer_enable( bool flag );
265
270 void flush( void );
271
279 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
280
288 int reg_w( uint8_t reg_adr, uint8_t data );
289
297 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
298
304 uint8_t reg_r( uint8_t reg_adr );
305
311 void write_r8( uint8_t reg, uint8_t val );
312
318 uint8_t read_r8( uint8_t reg );
319
328 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
329 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
330#endif // DOXYGEN_ONLY
331
332protected:
333 static const int n_group;
334};
335
336class PCA9956B : public PCA995x_I2C
337{
338public:
340 static constexpr uint8_t n_channel = 24;
341
343 enum reg_num {
344 MODE1, MODE2,
345 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
346 GRPPWM, GRPFREQ,
347 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
348 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
349 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
350 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
351 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
352 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
353 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
354 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
355 OFFSET,
356 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
357 PWMALL, IREFALL,
358 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5
359 };
360
364 PCA9956B( uint8_t i2c_address = (0x02 >> 1) );
365
371 PCA9956B( TwoWire& wire, uint8_t i2c_address = (0x02 >> 1) );
372 virtual ~PCA9956B();
373
378 void init( float current );
379
380 static constexpr uint8_t access_ref[ NUM_access_word ] = {
381 0,
382 0,
383 0,
384 0,
385 0,
386 };
387
388#if DOXYGEN_ONLY
390 enum board {
391 NONE,
392 ARDUINO_SHIELD,
393 };
394
403 void begin( float current = 0.1, board env = NONE, bool buffered = false );
404
410 void pwm( uint8_t ch, float value );
411
416 void pwm( float* values );
417
422 void buffer_enable( bool flag );
423
428 void flush( void );
429
437 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
438
446 int reg_w( uint8_t reg_adr, uint8_t data );
447
455 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
456
462 uint8_t reg_r( uint8_t reg_adr );
463
469 void write_r8( uint8_t reg, uint8_t val );
470
476 uint8_t read_r8( uint8_t reg );
477
486 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
487 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
488#endif // DOXYGEN_ONLY
489
490};
491
492class PCA9957 : public PCA995x_SPI
493{
494public:
496 static constexpr uint8_t n_channel = 24;
497
499 enum reg_num {
500 MODE1, MODE2,
501 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5,
502 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
503 GRPPWM, GRPFREQ,
504 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
505 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
506 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
507 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
508 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
509 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
510 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
511 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
512 RAMP_RATE_GRP0, STEP_TIME_GRP0, HOLD_CNTL_GRP0, IREF_GRP0,
513 RAMP_RATE_GRP1, STEP_TIME_GRP1, HOLD_CNTL_GRP1, IREF_GRP1,
514 RAMP_RATE_GRP2, STEP_TIME_GRP2, HOLD_CNTL_GRP2, IREF_GRP2,
515 RAMP_RATE_GRP3, STEP_TIME_GRP3, HOLD_CNTL_GRP3, IREF_GRP3,
516 RAMP_RATE_GRP4, STEP_TIME_GRP4, HOLD_CNTL_GRP4, IREF_GRP4,
517 RAMP_RATE_GRP5, STEP_TIME_GRP5, HOLD_CNTL_GRP5, IREF_GRP5,
518 GRAD_MODE_SEL0, GRAD_MODE_SEL1, GRAD_MODE_SEL2,
519 GRAD_GRP_SEL0, GRAD_GRP_SEL1, GRAD_GRP_SEL2,
520 GRAD_GRP_SEL3, GRAD_GRP_SEL4, GRAD_GRP_SEL5,
521 GRAD_GRP_SEL6, GRAD_GRP_SEL7, GRAD_GRP_SEL8,
522 GRAD_GRP_SEL9, GRAD_GRP_SEL10, GRAD_GRP_SEL11,
523 GRAD_CNTL0, GRAD_CNTL1,
524 OFFSET,
525 PWMALL, IREFALL
526 };
527
530 PCA9957();
531 virtual ~PCA9957();
532
537 void init( float current );
538
539 static constexpr uint8_t access_ref[ NUM_access_word ] = {
540 RAMP_RATE_GRP0,
541 GRAD_MODE_SEL0,
542 GRAD_GRP_SEL0,
543 GRAD_CNTL0,
544 6,
545 };
546
547#if DOXYGEN_ONLY
549 enum board {
550 NONE,
551 ARDUINO_SHIELD,
552 };
553
562 void begin( float current = 0.1, board env = NONE, bool buffered = false );
563
569 void pwm( uint8_t ch, float value );
570
575 void pwm( float* values );
576
581 void buffer_enable( bool flag );
582
587 void flush( void );
588
596 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
597
605 int reg_w( uint8_t reg_adr, uint8_t data );
606
614 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
615
621 uint8_t reg_r( uint8_t reg_adr );
622
628 void write_r8( uint8_t reg, uint8_t val );
629
635 uint8_t read_r8( uint8_t reg );
636
645 void bit_op8( uint8_t reg, uint8_t mask, uint8_t value );
646 void bit_op16( uint8_t reg, uint16_t mask, uint16_t value );
647#endif // DOXYGEN_ONLY
648
649};
650
651#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)
PCA9955B(uint8_t i2c_address=(0xBC > > 1))
Definition PCA9955B.cpp:4
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)
static constexpr uint8_t n_channel
Definition LEDDriver.h:178
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
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)
static constexpr uint8_t n_channel
Definition LEDDriver.h:340
PCA9956B(uint8_t i2c_address=(0x02 > > 1))
Definition PCA9956B.cpp:4
static constexpr uint8_t n_channel
Definition LEDDriver.h:496
void bit_op8(uint8_t reg, uint8_t mask, uint8_t value)
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