16-channel I2C constant current LED sink driver

Fork of TLC59116 by Sille Van Landschoot

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TLC59116.cpp Source File

TLC59116.cpp

00001 #include "TLC59116.h"
00002 
00003 TLC59116::TLC59116(I2C &i2c_obj, int _address)
00004     :
00005     i2c_p(NULL), 
00006     i2c(i2c_obj),
00007     address(_address)
00008 {
00009     initialize();
00010 }
00011 
00012 TLC59116::TLC59116(PinName sda, PinName scl, int _address)
00013     :
00014     i2c_p(new I2C(sda, scl)), 
00015     i2c(*i2c_p),
00016     address(_address)
00017 {
00018     initialize();
00019 }
00020 
00021 void TLC59116::initialize()
00022 {
00023     // oscillator set to normal mode 
00024     enable();
00025     // enable individual brightness and group dimming
00026     setOutputState(0xFF,0xFF,0xFF,0xFF);
00027 }
00028 
00029 void TLC59116::enable()
00030 {
00031     // should readout register state first
00032     setRegister(0,0);
00033 }
00034 
00035 void TLC59116::disable()
00036 {
00037     // should readout register state first
00038     setRegister(0,1 << 4);
00039 }
00040 
00041 void TLC59116::setOutputState(int ledout0, int ledout1, int ledout2, int ledout3)
00042 {
00043     setRegister(0x14,ledout0);
00044     setRegister(0x15,ledout1);
00045     setRegister(0x16,ledout2);
00046     setRegister(0x17,ledout3);
00047 }
00048 
00049 void TLC59116::setChannel(int led, float brightness)
00050 {
00051     char data[] = {NO_AUTO_INCREMENT + 0x02 + led, brightness * 255.0};
00052     i2c.write(address, data, 2);
00053 }
00054 
00055 
00056 void TLC59116::setBrightness(float brightness)
00057 {
00058     setRegister(GRPPWM, brightness * 255.0);
00059 }
00060 
00061 void TLC59116::setRegister(int reg, int value)
00062 {
00063     char data[] = {NO_AUTO_INCREMENT + reg, value};
00064     i2c.write(address, data, 2);
00065 }
00066 
00067 void TLC59116::setRegisters(int reg, char* value, int length, int mode)
00068 {
00069     // not implemented yet
00070 }