i2c RGBW led driver push/pull or opendrain output
Fork of PCA9633 by
PCA9633.h@0:39b243509a43, 2018-06-20 (annotated)
- Committer:
- mederic
- Date:
- Wed Jun 20 12:56:31 2018 +0000
- Revision:
- 0:39b243509a43
- Child:
- 1:f95d80e0f84a
dirver for PCA9633 4bit RGBW led
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mederic | 0:39b243509a43 | 1 | #ifndef PCA9633_H |
mederic | 0:39b243509a43 | 2 | #define PCA9633_H |
mederic | 0:39b243509a43 | 3 | |
mederic | 0:39b243509a43 | 4 | #include "mbed.h" |
mederic | 0:39b243509a43 | 5 | /** PCA9633 class. |
mederic | 0:39b243509a43 | 6 | * PCA9633 4-bit Fm+ I2C-bus LED driver. |
mederic | 0:39b243509a43 | 7 | * This driver ignore !OE pin functionality. |
mederic | 0:39b243509a43 | 8 | * This driver disable i2c LED All Call address. |
mederic | 0:39b243509a43 | 9 | * This driver disable i2c SUB addresing. |
mederic | 0:39b243509a43 | 10 | */ |
mederic | 0:39b243509a43 | 11 | class PCA9633{ |
mederic | 0:39b243509a43 | 12 | public: |
mederic | 0:39b243509a43 | 13 | |
mederic | 0:39b243509a43 | 14 | enum state{ |
mederic | 0:39b243509a43 | 15 | OFF = 0, //LED driver is off (default power-up state) |
mederic | 0:39b243509a43 | 16 | FULL = 1, //LED driver is fully on |
mederic | 0:39b243509a43 | 17 | SINGLE = 2, //LED driver individual brightness can be controlled |
mederic | 0:39b243509a43 | 18 | //through its PWMx register. |
mederic | 0:39b243509a43 | 19 | GROUP = 3, //LED driver individual brightness and group |
mederic | 0:39b243509a43 | 20 | //dimming/blinking can be controlled through its |
mederic | 0:39b243509a43 | 21 | //PWMx register and the PCA9633_GRPPWM registers. |
mederic | 0:39b243509a43 | 22 | ALL = 4, //Select all LED for pos |
mederic | 0:39b243509a43 | 23 | I2C_ADDR = 0x62 //Base I2C address |
mederic | 0:39b243509a43 | 24 | }; |
mederic | 0:39b243509a43 | 25 | /** Create PCA9633 instance + config method |
mederic | 0:39b243509a43 | 26 | * @param I2C initialized I2C bus to use |
mederic | 0:39b243509a43 | 27 | * @param addr I2C address default 0x62 |
mederic | 0:39b243509a43 | 28 | * @param invert invert output state |
mederic | 0:39b243509a43 | 29 | * @param output was opendrain or push/pull |
mederic | 0:39b243509a43 | 30 | */ |
mederic | 0:39b243509a43 | 31 | PCA9633(I2C *i2c, char addr=PCA9633::I2C_ADDR, bool invert=false, bool openDrain=false); |
mederic | 0:39b243509a43 | 32 | |
mederic | 0:39b243509a43 | 33 | /** Configure |
mederic | 0:39b243509a43 | 34 | * @param invert invert output state |
mederic | 0:39b243509a43 | 35 | * @param output was opendrain or push/pull |
mederic | 0:39b243509a43 | 36 | */ |
mederic | 0:39b243509a43 | 37 | void config(bool invert, bool openDrain); |
mederic | 0:39b243509a43 | 38 | |
mederic | 0:39b243509a43 | 39 | /** Soft Reset ALL PCA9633 on I2C bus |
mederic | 0:39b243509a43 | 40 | */ |
mederic | 0:39b243509a43 | 41 | void softReset(void); |
mederic | 0:39b243509a43 | 42 | |
mederic | 0:39b243509a43 | 43 | |
mederic | 0:39b243509a43 | 44 | /** Set PWM value for 1 or all LED |
mederic | 0:39b243509a43 | 45 | * @param bright <0,255> duty cycle |
mederic | 0:39b243509a43 | 46 | * @param pos select output<0,3> (all if >3) |
mederic | 0:39b243509a43 | 47 | */ |
mederic | 0:39b243509a43 | 48 | void pwm(char bright, char pos=PCA9633::ALL); |
mederic | 0:39b243509a43 | 49 | |
mederic | 0:39b243509a43 | 50 | /** Set general dimmer (if ledout = single | group) |
mederic | 0:39b243509a43 | 51 | * Disable BLINK |
mederic | 0:39b243509a43 | 52 | * @param val slowest pwm superimposed on led pwm |
mederic | 0:39b243509a43 | 53 | */ |
mederic | 0:39b243509a43 | 54 | void dim(char val); |
mederic | 0:39b243509a43 | 55 | |
mederic | 0:39b243509a43 | 56 | /** Blinking led (if ledout = single | group) |
mederic | 0:39b243509a43 | 57 | * Disable DIMMER |
mederic | 0:39b243509a43 | 58 | * @param duty <0,255> duty cycle |
mederic | 0:39b243509a43 | 59 | * @param period <0.041,10.73> is seconds |
mederic | 0:39b243509a43 | 60 | */ |
mederic | 0:39b243509a43 | 61 | void blink(char duty, float period); |
mederic | 0:39b243509a43 | 62 | |
mederic | 0:39b243509a43 | 63 | /** Set output state |
mederic | 0:39b243509a43 | 64 | * @param state off, full(on, nopwm), single(pwm, no dim|blink), group(pwm+dim|blink) |
mederic | 0:39b243509a43 | 65 | * @param pos select output<0,3> (all if >3) |
mederic | 0:39b243509a43 | 66 | */ |
mederic | 0:39b243509a43 | 67 | void ledout(char state=PCA9633::GROUP, char pos=PCA9633::ALL); |
mederic | 0:39b243509a43 | 68 | |
mederic | 0:39b243509a43 | 69 | private: |
mederic | 0:39b243509a43 | 70 | I2C *_i2c; |
mederic | 0:39b243509a43 | 71 | char _addr; |
mederic | 0:39b243509a43 | 72 | char _buf[5]; |
mederic | 0:39b243509a43 | 73 | }; |
mederic | 0:39b243509a43 | 74 | |
mederic | 0:39b243509a43 | 75 | #endif |