16-channel I2C constant current LED sink driver

Fork of TLC59116 by Sille Van Landschoot

Revision:
0:52a1996ad711
Child:
1:c285b2c57b2e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TLC59116.cpp	Thu Dec 03 07:57:50 2015 +0000
@@ -0,0 +1,53 @@
+#include "TLC59116.h"
+
+
+TLC59116::TLC59116(PinName sda, PinName scl, int _address): i2c(sda, scl), address(_address)
+{
+    // oscillator set to normal mode 
+    enable();
+    // enable individual brightness and group dimming
+    setOutputState(0xFF,0xFF,0xFF,0xFF);
+}
+
+void TLC59116::enable()
+{
+    // should readout register state first
+    setRegister(0,0);
+}
+
+void TLC59116::disable()
+{
+    // should readout register state first
+    setRegister(0,1 << 4);
+}
+
+void TLC59116::setOutputState(int ledout0, int ledout1, int ledout2, int ledout3)
+{
+    setRegister(0x14,ledout0);
+    setRegister(0x15,ledout1);
+    setRegister(0x16,ledout2);
+    setRegister(0x17,ledout3);
+}
+
+void TLC59116::setChannel(int led, float brightness)
+{
+    char data[] = {NO_AUTO_INCREMENT + 0x02 + led, brightness * 255.0};
+    i2c.write(address, data, 2);
+}
+
+
+void TLC59116::setBrightness(float brightness)
+{
+    setRegister(GRPPWM, brightness * 255.0);
+}
+
+void TLC59116::setRegister(int reg, int value)
+{
+    char data[] = {NO_AUTO_INCREMENT + reg, value};
+    i2c.write(address, data, 2);
+}
+
+void TLC59116::setRegisters(int reg, char* value, int length, int mode)
+{
+    // not implemented yet
+}
\ No newline at end of file