i2c RGBW led driver push/pull or opendrain output

Fork of PCA9633 by Mederic Melard

Committer:
mederic
Date:
Tue Jun 26 08:54:11 2018 +0000
Revision:
3:abc759c7c7bb
Parent:
1:f95d80e0f84a
remove debug printf message

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