![](/media/cache/profiles/59fa227af2f15ab2c13cdd9537d536fe.jpg.50x50_q85.jpg)
initial commit
Fork of empc_pdu_v3 by
TLC59116.cpp
- Committer:
- rcflyair
- Date:
- 2017-04-07
- Revision:
- 1:1686fedb8e0a
File content as of revision 1:1686fedb8e0a:
#include "TLC59116.h" TLC59116::TLC59116(PinName sda, PinName scl, PinName cs) : _i2c(sda, scl), _cs(cs) { for (int i = 0; i < sizeof(b); i++) b[i] = 0; // clear internal buffer _i2c.frequency(400000); // set i2c buffer frequency } void TLC59116::Enable(void) { _cs = 1; wait_ms(1); } void TLC59116::Disable(void) { _cs = 0; wait_ms(1); } int TLC59116::SWRST() { // TLC59116 SWRST b[0] = 0xA5; b[1] = 0x5A; return(_i2c.write(0xD6, b, 2)); } int TLC59116::init(void) { // TLC59116 FOO b[ 0] = AUTO_INCREMENT_ALL; // COMMAND b[ 1] = 0x00; // MODE1 b[ 2] = 0x00; // MODE2 b[ 3] = 0xFF; // PWM0 b[ 4] = 0xFF; // PWM1 b[ 5] = 0xFF; // PWM2 b[ 6] = 0xFF; // PWM3 b[ 7] = 0xFF; // PWM4 b[ 8] = 0xFF; // PWM5 b[ 9] = 0xFF; // PWM6 b[10] = 0xFF; // PWM7 b[11] = 0xFF; // PWM8 b[12] = 0xFF; // PWM9 b[13] = 0xFF; // PWM10 b[14] = 0xFF; // PWM11 b[15] = 0xFF; // PWM12 b[16] = 0xFF; // PWM13 b[17] = 0xFF; // PWM14 b[18] = 0xFF; // PWM15 b[19] = 0xFF; // GRPPWM b[20] = 0x00; // GRPFREQ b[21] = 0x00; // LEDOUT0 b[22] = 0x00; // LEDOUT1 b[23] = 0x00; // LEDOUT2 b[24] = 0x00; // LEDOUT3 return(_i2c.write(TLC59116_ADDRESS, b, 25)); } int TLC59116::SetBrightness(int x) { b[0] = AUTO_INCREMENT_NONE; // set mask for no auto increment b[0] = b[0] | GRPPWM; // mask in group pwm control register b[1] = x; // Brightness - PWM value between 0 and 255 return(_i2c.write(TLC59116_ADDRESS, b, 2)); } void TLC59116::SetAuto(bool v) { b[0] = AUTO_INCREMENT_NONE; // set mask for no auto increment b[0] = b[0] | LEDOUT3; // mask in LEDOUT3 register _i2c.write(TLC59116_ADDRESS, b, 1); // write register address _i2c.read(TLC59116_ADDRESS, b, 1); // read register if (v) b[1] = b[0] | 0b00000011; else b[1] = b[0] & 0b11111100; b[0] = AUTO_INCREMENT_NONE; b[0] = b[0] | LEDOUT3; _i2c.write(TLC59116_ADDRESS, b, 2); } void TLC59116::SetManual(bool v) { b[0] = AUTO_INCREMENT_NONE; // set mask for no auto increment b[0] = b[0] | LEDOUT3; // mask in LEDOUT3 register _i2c.write(TLC59116_ADDRESS, b, 1); // write register address _i2c.read(TLC59116_ADDRESS, b, 1); // read register if (v) b[1] = b[0] | 0b00001100; else b[1] = b[0] & 0b11110011; b[0] = AUTO_INCREMENT_NONE; b[0] = b[0] | LEDOUT3; _i2c.write(TLC59116_ADDRESS, b, 2); } void TLC59116::SetPower(bool v) { b[0] = AUTO_INCREMENT_NONE; // set mask for no auto increment b[0] = b[0] | LEDOUT2; // mask in LEDOUT3 register _i2c.write(TLC59116_ADDRESS, b, 1); // write register address _i2c.read(TLC59116_ADDRESS, b, 1); // read register if (v) b[1] = b[0] | 0b00110000; else b[1] = b[0] & 0b11001111; b[0] = AUTO_INCREMENT_NONE; b[0] = b[0] | LEDOUT2; _i2c.write(TLC59116_ADDRESS, b, 2); } void TLC59116::SetFault(bool v) { b[0] = AUTO_INCREMENT_NONE; // set mask for no auto increment b[0] = b[0] | LEDOUT2; // mask in LEDOUT3 register _i2c.write(TLC59116_ADDRESS, b, 1); // write register address _i2c.read(TLC59116_ADDRESS, b, 1); // read register if (v) b[1] = b[0] | 0b11000000; else b[1] = b[0] & 0b00111111; b[0] = AUTO_INCREMENT_NONE; b[0] = b[0] | LEDOUT2; _i2c.write(TLC59116_ADDRESS, b, 2); } // Set bar graph to value between zero and ten. // This routine sets the bar graph only void TLC59116::SetBarGraph(int x) { const int d[11][4] = { //LEDOUT0 LEDOUT1 LEDOUT2 LEDOUT3 0b00000000, 0b00000000, 0b00000000, 0b00000000, // 0 0b00000000, 0b00000000, 0b00001100, 0b00000000, // 1 0b00000000, 0b00000000, 0b00001111, 0b00000000, // 2 0b00000000, 0b11000000, 0b00001111, 0b00000000, // 3 0b00000000, 0b11110000, 0b00001111, 0b00000000, // 4 0b00000000, 0b11111100, 0b00001111, 0b00000000, // 5 0b00000000, 0b11111111, 0b00001111, 0b00000000, // 6 0b11000000, 0b11111111, 0b00001111, 0b00000000, // 7 0b11110000, 0b11111111, 0b00001111, 0b00000000, // 8 0b11111100, 0b11111111, 0b00001111, 0b00000000, // 9 0b11111111, 0b11111111, 0b00001111, 0b00000000 // 10 }; // read current LED status b[0] = AUTO_INCREMENT_ALL; b[0] = b[0] | LEDOUT0; _i2c.write(TLC59116_ADDRESS, b, 1); _i2c.read(TLC59116_ADDRESS, b, 4); b[2] = b[2] & ~d[10][2]; // 0b11110000; b[2] = b[2] | d[x][2]; b[4] = b[3]; b[3] = b[2]; b[2] = d[x][1]; b[1] = d[x][0]; b[0] = AUTO_INCREMENT_ALL; b[0] = b[0] | LEDOUT0; _i2c.write(TLC59116_ADDRESS, b, 5); }