16-channel I2C constant current LED sink driver
Fork of TLC59116 by
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 }
Generated on Tue Jul 12 2022 21:09:44 by 1.7.2