i2c RGBW led driver push/pull or opendrain output
Fork of PCA9633 by
PCA9633.h@1:f95d80e0f84a, 2018-06-21 (annotated)
- Committer:
- mederic
- Date:
- Thu Jun 21 07:28:23 2018 +0000
- Revision:
- 1:f95d80e0f84a
- Parent:
- 0:39b243509a43
first released
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 | 1:f95d80e0f84a | 10 | * |
mederic | 1:f95d80e0f84a | 11 | * Example: |
mederic | 1:f95d80e0f84a | 12 | * @code |
mederic | 1:f95d80e0f84a | 13 | * #include "mbed.h" |
mederic | 1:f95d80e0f84a | 14 | * #include "PCA9633.h" |
mederic | 1:f95d80e0f84a | 15 | * I2C smbus(PB_7,PB_6); |
mederic | 1:f95d80e0f84a | 16 | * |
mederic | 1:f95d80e0f84a | 17 | * PCA9633 leds(&smbus); |
mederic | 1:f95d80e0f84a | 18 | * |
mederic | 1:f95d80e0f84a | 19 | * int main() { |
mederic | 1:f95d80e0f84a | 20 | * leds.config(true, true); //The output config was openDrain and inverted |
mederic | 1:f95d80e0f84a | 21 | * leds.pwm(32,0); //LED0 12.5% |
mederic | 1:f95d80e0f84a | 22 | * leds.pwm(64,1); //LED1 25% |
mederic | 1:f95d80e0f84a | 23 | * leds.pwm(128,2); //LED2 50% |
mederic | 1:f95d80e0f84a | 24 | * leds.pwm(255,3); //LED3 100% |
mederic | 1:f95d80e0f84a | 25 | * leds.ledout(PCA9633::GROUP) //All led was dim/blink and single configurable |
mederic | 1:f95d80e0f84a | 26 | * led.blink(64,1.5) //Leds blink each 1.5s with 25% duty cycle |
mederic | 1:f95d80e0f84a | 27 | * |
mederic | 1:f95d80e0f84a | 28 | * while(1) { |
mederic | 1:f95d80e0f84a | 29 | * } |
mederic | 1:f95d80e0f84a | 30 | * } |
mederic | 1:f95d80e0f84a | 31 | * @endcode |
mederic | 1:f95d80e0f84a | 32 | */ |
mederic | 0:39b243509a43 | 33 | class PCA9633{ |
mederic | 0:39b243509a43 | 34 | public: |
mederic | 0:39b243509a43 | 35 | |
mederic | 0:39b243509a43 | 36 | enum state{ |
mederic | 0:39b243509a43 | 37 | OFF = 0, //LED driver is off (default power-up state) |
mederic | 0:39b243509a43 | 38 | FULL = 1, //LED driver is fully on |
mederic | 0:39b243509a43 | 39 | SINGLE = 2, //LED driver individual brightness can be controlled |
mederic | 0:39b243509a43 | 40 | //through its PWMx register. |
mederic | 0:39b243509a43 | 41 | GROUP = 3, //LED driver individual brightness and group |
mederic | 0:39b243509a43 | 42 | //dimming/blinking can be controlled through its |
mederic | 0:39b243509a43 | 43 | //PWMx register and the PCA9633_GRPPWM registers. |
mederic | 0:39b243509a43 | 44 | ALL = 4, //Select all LED for pos |
mederic | 0:39b243509a43 | 45 | I2C_ADDR = 0x62 //Base I2C address |
mederic | 0:39b243509a43 | 46 | }; |
mederic | 0:39b243509a43 | 47 | /** Create PCA9633 instance + config method |
mederic | 0:39b243509a43 | 48 | * @param I2C initialized I2C bus to use |
mederic | 0:39b243509a43 | 49 | * @param addr I2C address default 0x62 |
mederic | 0:39b243509a43 | 50 | * @param invert invert output state |
mederic | 0:39b243509a43 | 51 | * @param output was opendrain or push/pull |
mederic | 0:39b243509a43 | 52 | */ |
mederic | 0:39b243509a43 | 53 | PCA9633(I2C *i2c, char addr=PCA9633::I2C_ADDR, bool invert=false, bool openDrain=false); |
mederic | 0:39b243509a43 | 54 | |
mederic | 0:39b243509a43 | 55 | /** Configure |
mederic | 0:39b243509a43 | 56 | * @param invert invert output state |
mederic | 0:39b243509a43 | 57 | * @param output was opendrain or push/pull |
mederic | 0:39b243509a43 | 58 | */ |
mederic | 0:39b243509a43 | 59 | void config(bool invert, bool openDrain); |
mederic | 0:39b243509a43 | 60 | |
mederic | 0:39b243509a43 | 61 | /** Soft Reset ALL PCA9633 on I2C bus |
mederic | 0:39b243509a43 | 62 | */ |
mederic | 0:39b243509a43 | 63 | void softReset(void); |
mederic | 0:39b243509a43 | 64 | |
mederic | 0:39b243509a43 | 65 | |
mederic | 0:39b243509a43 | 66 | /** Set PWM value for 1 or all LED |
mederic | 0:39b243509a43 | 67 | * @param bright <0,255> duty cycle |
mederic | 0:39b243509a43 | 68 | * @param pos select output<0,3> (all if >3) |
mederic | 0:39b243509a43 | 69 | */ |
mederic | 0:39b243509a43 | 70 | void pwm(char bright, char pos=PCA9633::ALL); |
mederic | 0:39b243509a43 | 71 | |
mederic | 0:39b243509a43 | 72 | /** Set general dimmer (if ledout = single | group) |
mederic | 0:39b243509a43 | 73 | * Disable BLINK |
mederic | 0:39b243509a43 | 74 | * @param val slowest pwm superimposed on led pwm |
mederic | 0:39b243509a43 | 75 | */ |
mederic | 0:39b243509a43 | 76 | void dim(char val); |
mederic | 0:39b243509a43 | 77 | |
mederic | 0:39b243509a43 | 78 | /** Blinking led (if ledout = single | group) |
mederic | 0:39b243509a43 | 79 | * Disable DIMMER |
mederic | 0:39b243509a43 | 80 | * @param duty <0,255> duty cycle |
mederic | 0:39b243509a43 | 81 | * @param period <0.041,10.73> is seconds |
mederic | 0:39b243509a43 | 82 | */ |
mederic | 0:39b243509a43 | 83 | void blink(char duty, float period); |
mederic | 0:39b243509a43 | 84 | |
mederic | 0:39b243509a43 | 85 | /** Set output state |
mederic | 0:39b243509a43 | 86 | * @param state off, full(on, nopwm), single(pwm, no dim|blink), group(pwm+dim|blink) |
mederic | 0:39b243509a43 | 87 | * @param pos select output<0,3> (all if >3) |
mederic | 0:39b243509a43 | 88 | */ |
mederic | 0:39b243509a43 | 89 | void ledout(char state=PCA9633::GROUP, char pos=PCA9633::ALL); |
mederic | 0:39b243509a43 | 90 | |
mederic | 0:39b243509a43 | 91 | private: |
mederic | 0:39b243509a43 | 92 | I2C *_i2c; |
mederic | 0:39b243509a43 | 93 | char _addr; |
mederic | 0:39b243509a43 | 94 | }; |
mederic | 0:39b243509a43 | 95 | |
mederic | 0:39b243509a43 | 96 | #endif |