8#ifndef ARDUINO_LED_DRIVER_NXP_ARD_H
9#define ARDUINO_LED_DRIVER_NXP_ARD_H
14#include <I2C_device.h>
17enum access_word : uint8_t
43 LEDDriver( uint8_t n_ch, uint8_t PWM_r, uint8_t oe );
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;
55 void pwm( uint8_t ch,
float value );
62 void pwm(
float* values );
76 const uint8_t n_channel;
79 const uint8_t reg_PWM;
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 );
100 virtual void begin(
float current = 0.1, board env = NONE,
bool buffered =
false );
101 virtual void init(
float current ) = 0;
110 const uint8_t reg_IREF;
111 const uint8_t reg_IREFALL;
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);
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 );
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 );
139 void txrx( uint8_t *data,
int size );
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 );
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 );
159 void pwm( uint8_t ch,
float value );
160 void pwm(
float* values );
163 SPISettings spi_setting;
184 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3,
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,
198 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
200 EFLAG0, EFLAG1, EFLAG2, EFLAG3,
207 PCA9955B( uint8_t i2c_address = (0xBC >> 1) );
214 PCA9955B( TwoWire& wire, uint8_t i2c_address = (0xBC >> 1) );
221 void init(
float current );
223 static constexpr uint8_t access_ref[ NUM_access_word ] = {
246 void begin(
float current = 0.1,
board env = NONE,
bool buffered =
false );
253 void pwm( uint8_t ch,
float value );
260 void pwm(
float* values );
281 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
290 int reg_w( uint8_t reg_adr, uint8_t data );
299 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
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 );
335 static const int n_group;
347 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
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,
358 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
360 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5
366 PCA9956B( uint8_t i2c_address = (0x02 >> 1) );
373 PCA9956B( TwoWire& wire, uint8_t i2c_address = (0x02 >> 1) );
380 void init(
float current );
382 static constexpr uint8_t access_ref[ NUM_access_word ] = {
405 void begin(
float current = 0.1,
board env = NONE,
bool buffered =
false );
412 void pwm( uint8_t ch,
float value );
419 void pwm(
float* values );
440 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
449 int reg_w( uint8_t reg_adr, uint8_t data );
458 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
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 );
504 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5,
505 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
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,
542 void init(
float current );
544 static constexpr uint8_t access_ref[ NUM_access_word ] = {
567 void begin(
float current = 0.1,
board env = NONE,
bool buffered =
false );
574 void pwm( uint8_t ch,
float value );
581 void pwm(
float* values );
602 int reg_w( uint8_t reg_adr, uint8_t *data, uint16_t size );
611 int reg_w( uint8_t reg_adr, uint8_t data );
620 int reg_r( uint8_t reg_adr, uint8_t *data, uint16_t size );
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 );
void pwm(uint8_t ch, float value)
void buffer_enable(bool flag)
void write_r8(uint8_t reg, uint8_t val)
static const uint8_t n_channel
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 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)
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 write_r8(uint8_t reg, uint8_t val)
int reg_w(uint8_t reg_adr, uint8_t *data, uint16_t size)
static const uint8_t n_channel
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
int reg_r(uint8_t reg_adr, uint8_t *data, uint16_t size)
uint8_t reg_r(uint8_t reg_adr)
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)
void begin(float current=0.1, board env=NONE, bool buffered=false)
void irefall(uint8_t iref)
void irefall(uint8_t iref)