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