LEDDriver_NXP_Arduino 0.5.0
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};
162
163
172class PCA9955B : public PCA995x_I2C
173{
174public:
176 const static uint8_t n_channel = 16;
177
179 enum reg_num {
180 MODE1, MODE2,
181 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3,
182 GRPPWM, GRPFREQ,
183 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5, PWM6, PWM7,
184 PWM8, PWM9, PWM10, PWM11, PWM12, PWM13, PWM14, PWM15,
185 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5, IREF6, IREF7,
186 IREF8, IREF9, IREF10, IREF11, IREF12, IREF13, IREF14, IREF15,
187 RAMP_RATE_GRP0, STEP_TIME_GRP0, HOLD_CNTL_GRP0, IREF_GRP0,
188 RAMP_RATE_GRP1, STEP_TIME_GRP1, HOLD_CNTL_GRP1, IREF_GRP1,
189 RAMP_RATE_GRP2, STEP_TIME_GRP2, HOLD_CNTL_GRP2, IREF_GRP2,
190 RAMP_RATE_GRP3, STEP_TIME_GRP3, HOLD_CNTL_GRP3, IREF_GRP3,
191 GRAD_MODE_SEL0, GRAD_MODE_SEL1,
192 GRAD_GRP_SEL0, GRAD_GRP_SEL1, GRAD_GRP_SEL2, GRAD_GRP_SEL3,
193 GRAD_CNTL,
194 OFFSET,
195 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
196 PWMALL, IREFALL,
197 EFLAG0, EFLAG1, EFLAG2, EFLAG3,
198 };
199
204 PCA9955B( uint8_t i2c_address = (0xBC >> 1) );
205
211 PCA9955B( TwoWire& wire, uint8_t i2c_address = (0xBC >> 1) );
212 virtual ~PCA9955B();
213
218 void init( float current );
219
220 static constexpr uint8_t access_ref[ NUM_access_word ] = {
221 RAMP_RATE_GRP0,
222 GRAD_MODE_SEL0,
223 GRAD_GRP_SEL0,
224 GRAD_CNTL,
225 4,
226 };
227
228protected:
229 static const int n_group;
230};
231
232class PCA9956B : public PCA995x_I2C
233{
234public:
236 const static uint8_t n_channel = 24;
237
239 enum reg_num {
240 MODE1, MODE2,
241 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
242 GRPPWM, GRPFREQ,
243 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
244 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
245 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
246 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
247 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
248 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
249 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
250 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
251 OFFSET,
252 SUBADR1, SUBADR2, SUBADR3, ALLCALLADR,
253 PWMALL, IREFALL,
254 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5
255 };
260 PCA9956B( uint8_t i2c_address = (0x02 >> 1) );
261
267 PCA9956B( TwoWire& wire, uint8_t i2c_address = (0x02 >> 1) );
268 virtual ~PCA9956B();
269
274 void init( float current );
275
276 static constexpr uint8_t access_ref[ NUM_access_word ] = {
277 0,
278 0,
279 0,
280 0,
281 0,
282 };
283};
284
285class PCA9957 : public PCA995x_SPI
286{
287public:
289 const static uint8_t n_channel = 24;
290
292 enum reg_num {
293 MODE1, MODE2,
294 EFLAG0, EFLAG1, EFLAG2, EFLAG3, EFLAG4, EFLAG5,
295 LEDOUT0, LEDOUT1, LEDOUT2, LEDOUT3, LEDOUT4, LEDOUT5,
296 GRPPWM, GRPFREQ,
297 PWM0, PWM1, PWM2, PWM3, PWM4, PWM5,
298 PWM6, PWM7, PWM8, PWM9, PWM10, PWM11,
299 PWM12, PWM13, PWM14, PWM15, PWM16, PWM17,
300 PWM18, PWM19, PWM20, PWM21, PWM22, PWM23,
301 IREF0, IREF1, IREF2, IREF3, IREF4, IREF5,
302 IREF6, IREF7, IREF8, IREF9, IREF10, IREF11,
303 IREF12, IREF13, IREF14, IREF15, IREF16, IREF17,
304 IREF18, IREF19, IREF20, IREF21, IREF22, IREF23,
305 RAMP_RATE_GRP0, STEP_TIME_GRP0, HOLD_CNTL_GRP0, IREF_GRP0,
306 RAMP_RATE_GRP1, STEP_TIME_GRP1, HOLD_CNTL_GRP1, IREF_GRP1,
307 RAMP_RATE_GRP2, STEP_TIME_GRP2, HOLD_CNTL_GRP2, IREF_GRP2,
308 RAMP_RATE_GRP3, STEP_TIME_GRP3, HOLD_CNTL_GRP3, IREF_GRP3,
309 RAMP_RATE_GRP4, STEP_TIME_GRP4, HOLD_CNTL_GRP4, IREF_GRP4,
310 RAMP_RATE_GRP5, STEP_TIME_GRP5, HOLD_CNTL_GRP5, IREF_GRP5,
311 GRAD_MODE_SEL0, GRAD_MODE_SEL1, GRAD_MODE_SEL2,
312 GRAD_GRP_SEL0, GRAD_GRP_SEL1, GRAD_GRP_SEL2,
313 GRAD_GRP_SEL3, GRAD_GRP_SEL4, GRAD_GRP_SEL5,
314 GRAD_GRP_SEL6, GRAD_GRP_SEL7, GRAD_GRP_SEL8,
315 GRAD_GRP_SEL9, GRAD_GRP_SEL10, GRAD_GRP_SEL11,
316 GRAD_CNTL0, GRAD_CNTL1,
317 OFFSET,
318 PWMALL, IREFALL
319 };
320
325 PCA9957();
326 virtual ~PCA9957();
327
332 void init( float current );
333
334 static constexpr uint8_t access_ref[ NUM_access_word ] = {
335 RAMP_RATE_GRP0,
336 GRAD_MODE_SEL0,
337 GRAD_GRP_SEL0,
338 GRAD_CNTL0,
339 6,
340 };
341};
342
343#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:176
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:236
static const uint8_t n_channel
Definition: LEDDriver.h:289
void init(float current)
Definition: PCA9957.cpp:13
PCA9957()
Definition: PCA9957.cpp:4
void irefall(uint8_t iref)
Definition: LEDDriver.cpp:223
void irefall(uint8_t iref)
Definition: LEDDriver.cpp:88