i have a question about the difference between the TLC5940 in DIL or TSSOP packages. Or is there ever any difference except the pin alignment?
background of my question is, i have some TLC5940 in TSSOP packages and i'm try to run them in serial (daisy chain). But already the second chip in the chain doing wrong. The first 3 ports doing the same as the first 3 ports of the 1th chip and all other ports are constant open.
Or is there ever any difference except the pin alignment?
The pin functions are identical because it is the same chip inside the package.
There is a difference in power dissipation due to the different mechanics, the TSSOP has a higher dissipation and is easer to mechanically fix a heat sink to. But the function is still the same so you would be having the same trouble with a DIL device.
I m using the example "BasicUse" from the TLC Library.
In tlc_config.h I set NUM_TLCS = 2 for my two TLCs.
The first TLC is working fine but the scond is doing mismatch.
In the tlc_config.h is witten, that after making changes to
this file, delete Tlc5940.o in this folder so the changes are applied.
But I do not have any Tlc5940.o file on my computer. Maybe is that my problem. Im using the latest Arduino IDE 0018.
/*
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
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. To be precise, it's I = 39.06 / R (in ohms). This doesn't depend
on the LED driving voltage.
- (Optional): put a pull-up resistor (~10k) between +5V and BLANK so that
all the LEDs will turn off when the Arduino is reset.
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 on Arduino -> BLANK of TLC1 -> BLANK of TLC2 -> ...
XLAT on Arduino -> XLAT of TLC1 -> XLAT of TLC2 -> ...
The one exception is that each TLC needs it's own resistor between pin 20
and GND.
This library uses the PWM output ability of digital pins 3, 9, 10, and 11.
Do not use analogWrite(...) on these pins.
This sketch does the Knight Rider strobe across a line of LEDs.
Alex Leone <acleone ~AT~ gmail.com>, 2009-02-03 */
#include "Tlc5940.h"
void setup()
{
/* Call Tlc.init() to setup the tlc.
You can optionally pass an initial PWM value (0 - 4095) for all channels.*/
Tlc.init();
}
/* 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" in the
library folder. After editing tlc_config.h for your setup, delete the
Tlc5940.o file to save the changes. */
void loop()
{
int direction = 1;
for (int 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. */
if (channel == 0) {
direction = 1;
} else {
Tlc.set(channel - 1, 1000);
}
Tlc.set(channel, 4095);
if (channel != NUM_TLCS * 16 - 1) {
Tlc.set(channel + 1, 1000);
} else {
direction = -1;
}
/* Tlc.update() sends the data to the TLCs. This is when the LEDs will
actually change. */
Tlc.update();
delay(75);
}
}
But I do not have any Tlc5940.o file on my computer. Maybe is that my problem.
No now the .o file is generated each time so there is no need to delete it. On some older versions you had to manually delete the file. I think this change happened in version 17.
The code looks OK, what about supply decoupling on the chips? Also as it is a surface mount device how are you physically wiring them up? The second chip is not too far from the first is it?
You posted a wiring picture but as you have a surface mount it is not what you have wired. Have you a schematic?
I do all wiring on a breadboard. The wiring schematic is exactly the same as i posted on the wiring picture. The 5V for LEDs, TLC and Arduino comes from the USB Port or from additional Power Supply (no difference). The SMD TLCs have I soldered on a TSSOP to DIP adapter like this (http://www.nkcelectronics.com/tssop-to-dip-adapter-28pin-065mm-28065.html).
I agree that it sounds like a solder problem. Make sure you clean off the flux well and try a continuity test between all the pins of your smd component. That example should work. I have used it a few times with multiple chips.
... when I switch the SIN Pin from the second TLC from SOUT (from the first TLC) to SIN from the Arduino (Pin 11), both TLCs working perfectly synchronal.
Or you are not driving the library correctly or you have a wiring error.
I can't think of anything else.
At this stage you need an oscilloscope so you can see where you are going wrong. Lots of people have used this example and they have got it to work, therefore there must be something wrong with what you are doing.
It was my fault. I had adjusted the wrong tlc_config.h file.
I had adjusted the tlc_config.h out oft the BasicUse example folder.
The correct file would be finde in the arduino-0018\libraries\Tlc5940\ folder.