TLC5940 Unable to interface with Arduino

Sure. I realize it looks a bit ugly, but it's just an attempt at establishing communication between the Arduino and the tlc5940.

I connected it like the example, although it's a bit hard to follow since I routed the wires away from the chip. The example below lays out the connections. I'm totally new to interfacing chips with other chips, so I might very well have done something wrong. I have, however, redone the circuit a few times and checked it out multiple times. I can't figure out what I'm doing wrong.

I'm using the library examples written for this chip, which I got from Arduino Playground - TLC5940. I haven't toyed with the code as provided in the example yet, but here it is:

/*

  • Basic Pin setup:
  • ------------ ---u----
  • ARDUINO 13|-> SCLK (pin 25) OUT1 |1 28| OUT channel 0
  • 12| OUT2 |2 27|-> GND (VPRG)
  • 11|-> SIN (pin 26) OUT3 |3 26|-> SIN (pin 11)
  • 10|-> BLANK (pin 23) OUT4 |4 25|-> SCLK (pin 13)
  • 9|-> XLAT (pin 24) . |5 24|-> XLAT (pin 9)
  • 8| . |6 23|-> BLANK (pin 10)
  • 7| . |7 22|-> GND
  • 6| . |8 21|-> VCC (+5V)
  • 5| . |9 20|-> 2K Resistor -> GND
  • 4| . |10 19|-> +5V (DCPRG)
  • 3|-> GSCLK (pin 18) . |11 18|-> GSCLK (pin 3)
  • 2| . |12 17|-> SOUT (if daisy-chained, this goes to SIN of the next TLC)
  • 1| . |13 16|-> XERR
  • 0| OUT14|14 15| OUT channel 15

    • Put the longer leg (anode) of the LEDs in the +5V and the shorter leg (cathode) in OUT(0-15).
    • +5V from Arduino -> TLC pin 21 and 19 (VCC and DCPRG)
    • GND from Arduino -> TLC pin 22 and 27 (GND and VPRG)
    • digital 3 -> TLC pin 18 (GSCLK)
    • digital 9 -> TLC pin 24 (XLAT)
    • digital 10 -> TLC pin 23 (BLANK)
    • digital 11 -> TLC pin 26 (SIN)
    • digital 13 -> TLC pin 25 (SCLK)
    • The 2K resistor between TLC pin 20 and GND will let ~20mA through each LED.
  • If you are daisy-chaining more than one TLC, connect the SOUT of the first TLC to
  • the SIN of the next. All the other pins should just be connected together:
  • BLANK of TLC1 -> BLANK of TLC2 -> ...
  • The one exception is that each TLC needs it's own resistor between pin 20 and GND.
  • Alex Leone <acleone ~AT~ gmail.com>, 2008-11-26
    */

/* These two includes should go at the top of any file that uses the library */
#include "tlc_config.h"
#include "Tlc5940.h"

void setup()
{
/* Tlc.init() has to be called before using any of the library functions */
Tlc.init();
}

void loop()
{
/*

  • This loop will create a Knight Rider-like effect if you have LEDs plugged
  • into all the TLC outputs. NUM_TLCS is defined in "tlc_config.h"
    /
    int8_t direction = 1;
    for (TLC_CHANNEL_TYPE channel = 0; channel < NUM_TLCS * 16; channel += direction) {
    /
  • Tlc.clear() sets all the grayscale values to zero, but does not send
  • them to the TLCs. To actually send the data, call Tlc.update()
    */
    Tlc.clear();

/*

  • Tlc.set(channel (0-15), value (0-4095)) sets the grayscale value for
  • one channel (15 is OUT15 on the first TLC, if multiple TLCs are daisy-
  • chained, then channel = 16 would be OUT0 of the second TLC, etc.).
  • value goes from off (0) to always on (4095).
  • Like Tlc.clear(), this function only sets up the data, Tlc.update()
  • will send the data.
    */
    Tlc.set(channel, 4095);

/*

  • Tlc.update() sends the data to the TLCs. This is when the LEDs will
  • actually change.
    */
    Tlc.update();

delay(75);
if (channel == NUM_TLCS * 16 - 1) {
direction = -1;
}
}

}