3 TLC5940s Max Current Consumption

Got no feedback, wondering if I posted too much info; I wrote a short version in the second comment.

Hi All,

I just got a couple of TLC5940s for a project I'm working on, consisting of thirty nine LEDs, and each of the three ICs have thirteen LEDs. I additionally have a knob hooked up to my Arduino that dictates how many LEDs are turned on (at 0%: no LEDs on, 100%: all LEDs on). My project also has the option for variable brightness, because after prototyping this out I'm looking to hook up thirteen RGB LEDs, with each of the three colors going to its own IC - I'm just simulating this with thirty nine LEDs instead.

My issue is that I'm experiencing a dimming across all LEDs once the knob starts reaching the 50% mark, and everything gets increasingly dimmer the closer the knob gets to 100%. This happened whether I had the TLC grayscale brightness at 100% or 10%. At first I had everything being powered from the Arduino's 5V pin, which I know isn't proper at 20mA per LED, and then moved to a separate power supply which just about removed the problem - so the problem was in fact too much current consumption.

Now the reason I'm writing is because of something I read on another post. Obviously you can change the brightness for each channel to be anywhere from 0-4095 within the IC, but a person had posted saying that if you're at 25%, there will only be 25% current consumption. So each LED would go from 20mA consumption to 5mA, and I accepted that because I'm not as savvy with rising-time within circuits, and didn't know if the constant pulsing of the LEDs was happening quicker than the current rising-time (if thats even a thing) and that the current in practice was in fact being "averaged" between 0 and 20mA.

Needless to say, this doesn't seem to be the case, though, because my problem had severely improved when I replaced the IREF resistor with one that only allowed 7mA per channel. So even with the old resistor and my brightness per channel being at 25%, the system was still peaking at 20mA per channel, even though the average over time was 5mA.

Anyways, I was just wondering if this is correct and if anyone knew of a work around to get a smaller peak current (possibly in code). For example, as my circuit/code is now, 39 LEDs at 5mA per channel ( the lowest amount of current the TLC recommends) turning on and off at the same times will pull a peak of ~200mA, no matter if my code has the brightness at 100% or lower. Now, if I had each of the three ICs running anywhere up to 33% brightness, and offset each "ON" period by a third of the normal period, then all ICs will be pulling current at different times, essentially meaning a max of 13 LEDs will be on at one time at 5mA per LED = 65mA max peak current, as long as the periods don't overlap. 33% max brightness is perfect for what I need.

I'd love to think this is possible from code, but from what I can tell, the TLC requests only a 12 bit number for brightness, and does the rest, meaning I can't tell it exactly when to turn on each channel. So each channel turns on at the beginning of every blank cycle, and turns off for the rest of it, at least from what I can see... bummer. My next code approach is to see if I can have three BLANK pins running from the same timer on the arduino, and just have three blank signals sent at different times to each of the TLCs, as described above.

Is there a potential hardware solution? Could capacitors charge and hold that kind of energy? Not really my forte, looking for any help on this though! Thanks in advance,


Upon getting no feedback, I'm wondering if I wrote way too much info in my first post. Short and sweet tl;dr:

I need a way to delay each of three TLC5940s so that the LED "ON" periods of each don't start at the same time, and therefore aren't overlapping. Each will be running at 33% brightness, which means they'll be on for the first 33% of the grayscale period and off for the rest of it, but if they're properly offset from each other, it should result in one smaller continuous flow of current as opposed to one bigger pulse of current 33% of the time (i.e. 100mA of current 100% of the time vs 300mA, 33% of the time, and 0mA for the remaining time). Even though the consumption is the same over time, my end goal is to use a smaller power supply, and it seems as if a bigger (in the above example, 300mA) power supply is needed the way I have everything set up now.

I'm wondering if this kind of offset can be done in software or if some hardware solution is plausible (for example, a capacitor to store the charge for each giant pulse, which is recharged on every off period.. although I'm very unsure of something like this).

If anyone has any useful tips on how to achieve this, I'd greatly appreciate it. Thanks in advance,


but a person had posted saying that if you're at 25%, there will only be 25% current consumption. So each LED would go from 20mA consumption to 5mA,

While the average is 5mA the peak is still 20mA or what ever is set by the Iset resistor.

What you need is more decoupling on the chip. In addition to the 0.1uF ceramic you already should have between power and ground on each chip, add a 47uF in parallel on each chip. This will help to distribute the load. You might even have to use bigger values.

There is no trick to stagger the on time as far as I know with this chip which is why I sometimes use the PCA9865 chip as this allows you to define both the turn on time and the turn off time for each LED.