PCA9635 16-bit I2C-bus LED driver
Dependents: digitalThermometer Counter SimpleClock printNumber ... more
Diff: PCA9635.cpp
- Revision:
- 0:d9cc568daeaf
- Child:
- 2:9ca6a4fbab5e
diff -r 000000000000 -r d9cc568daeaf PCA9635.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PCA9635.cpp Tue Jun 28 10:03:49 2011 +0000 @@ -0,0 +1,103 @@ +//NXP PCA9635 library +//mbed Team - 1st June 2011 +//Ioannis Kedros +//updated by Daniel Worrall - 28th June 2011 + +#include "mbed.h" +#include "PCA9635.h" + + +PCA9635::PCA9635(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) +{ + init(); +} + + +//Driver Software Reset +void PCA9635::reset(void){ + cmd[0] = 0x03; + m_i2c.write(m_addr, cmd, 1); +} + +void PCA9635::init(void){ + reset(); + + //Mode-1 Register: + cmd[0] = 0x00; + cmd[1] = 0x00; + m_i2c.write(m_addr, cmd, 2); + + //Mode-2 Register: + cmd[0] = 0x01; + cmd[1] = 0x22; + m_i2c.write(m_addr, cmd, 2); + + //LED Registers into PWM Control + for(char i=0x14; i<0x18; i++) + { + cmd[0] = i; + cmd[1] = 0xAA; + m_i2c.write(m_addr, cmd, 2); + } +} + + +//Single LED On +void PCA9635::on(char led) +{ + cmd[0] = led + 2; //led position + cmd[1] = 0xFF; //brightness value + m_i2c.write(m_addr, cmd, 2); +} + + +//Single LED Off +void PCA9635::off(char led) +{ + cmd[0] = led + 2; //led position + cmd[1] = 0x00; //brightness value + m_i2c.write(m_addr, cmd, 2); +} + + +void PCA9635::bus(short leds) +{ + short temp = leds; //check each bit of leds + bool stat = false; //check LSB of temp + for(int j=0; j<16; j++) { + stat = (bool)(temp & 0x0001); + if(stat == true){ //set output accordingly + on(j); + } + else { + off(j); + } + temp = (temp >> 1); //bitwise shift right by 1 to scan next bit + } +} + +//Brightness control for single or all LEDs +void PCA9635::brightness(char led, char value) +{ + if(led == ALL) + { + for(char allLeds=0x02; allLeds<0x12; allLeds++) + { + cmd[0] = allLeds; + cmd[1] = value; + m_i2c.write(m_addr, cmd, 2); + } + } + else + { + cmd[0] = led + 2; + cmd[1] = value; + m_i2c.write(m_addr, cmd, 2); + } +} + + + + + +