i2c RGBW led driver push/pull or opendrain output

Fork of PCA9633 by Mederic Melard

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?

UserRevisionLine numberNew 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