Der TLC5940 ist ein LED-Treiber-IC, welchen wir heute dazu benutzen 5 RGB-LEDs mit gemeinsamer Anode anzusteuern. Der Vorteil dieses Schaltkreises liegt darin, dass er eine konstante einstellbare Ausgangsstromstärke für die LEDs zur Verfügung stellt und mit minimaler Beschaltung auskommt.

Ein TLC5940NT, 5 RGB-LEDs und ein Arduino
Der IC verfügt über 16 PWM-Ausgänge, von denen wir 15 für die jeweils 3 Farben der 5 LEDs benutzen. Dazu bauen wir folgende Schaltung auf:
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...
TLC5940NT | Arduino (Uno, Nano, Pro Mini, Olimexino-32U4, Leonardo)/ RGB LEDs (gemeinsame Anode) / 5V Spannungsversorgung |
Pin 1 (OUT1) | RGB LED 1 – grün |
Pin 2 (OUT2) | RGB LED 1 – blau |
Pin 3 (OUT3) | RGB LED 2 – rot |
Pin 4 (OUT4) | RGB LED 2 – grün |
Pin 5 (OUT5) | RGB LED 2 – blau |
Pin 6 (OUT6) | RGB LED 3 – rot |
Pin 7 (OUT7) | RGB LED 3 – grün |
Pin 8 (OUT8) | RGB LED 3 – blau |
Pin 9 (OUT9) | RGB LED 4 – rot |
Pin 10 (OUT10) | RGB LED 4 – grün |
Pin 11 (OUT11) | RGB LED 4 – blau |
Pin 12 (OUT12) | RGB LED 5 – rot |
Pin 13 (OUT13) | RGB LED 5 – grün |
Pin 14 (OUT14) | RGB LED 5 – blau |
Pin 15 (OUT15) | nicht verwendet |
Pin 16 (XERR) | nicht verwendet |
Pin 17 (SOUT) | nicht verwendet |
Pin 18 (GSCLK) | Arduino – D3 |
Pin 19 (DCPRG) | +5V |
Pin 20 (IREF) | Widerstand 2kOhm an Masse |
Pin 21 (VCC) | +5V |
Pin 22 (GND) | Masse |
Pin 23 (BLANK) | Arduino –Â D10, sowie Widerstand 10kOhm an +5V |
Pin 24 (XLAT) | Arduino – D9 |
Pin 25 (SCLK) | Arduino – D13 |
Pin 26 (SIN) | Arduino – D11 |
Pin 27 (VPRG) | Masse |
Pin 28 (OUT0) | RGB LED 1 – rot |
Die gemeinsamen Anoden der RGB LEDs werden mit +5V und der Arduino wird ebenfalls noch mit der Spannungsversorgung verbunden.

TLC5940NT – Pinbelegung

RGB-LED, gemeinsame Anode – Pinbelegung
Programmcode (Sketch):
Wir installieren wir noch folgende TLC5940-Bibliothek und laden dann den Sketch auf unseren Arduino…
#include "Tlc5940.h" #define NUM_LEDS 5 struct RGB { byte r; byte g; byte b; }; RGB rgb; int global_dim=16; void setup(){ Tlc.init(); } void loop(){ randomSeed(millis()); int wait=random(1,30); int dim=random(4,6); int max_cycles=8; int cycles=random(1,max_cycles+1); rainbowCycle(wait,cycles,dim); } void setLed(byte num,int red,int green,int blue){ if(global_dim){ red=red/global_dim; green=green/global_dim; blue=blue/global_dim; } Tlc.set(num*3,red); Tlc.set(num*3+1,green); Tlc.set(num*3+2,blue); } void rainbowCycle(uint8_t wait,byte cycle,byte dim) { int cycles, j, k; for(cycles=0;cycles<cycle;cycles++){ byte dir=random(0,2); k=255; for (j=0; j < 256; j++,k--) { // cycles of all colors in the wheel if(k<0)k=255; // Tlc.clear(); for(int i=0; i<NUM_LEDS; i+=1) { Wheel(((i * 256 / NUM_LEDS) + (dir==0?j:k)) % 256,dim); setLed(i,rgb.r*16,rgb.g*16,rgb.b*16); } Tlc.update(); delay(wait); } } } void Wheel(byte WheelPos,byte dim){ if (WheelPos < 85) { rgb.r=0; rgb.g=WheelPos * 3/dim; rgb.b=(255 - WheelPos * 3)/dim;; return; } else if (WheelPos < 170) { WheelPos -= 85; rgb.r=WheelPos * 3/dim; rgb.g=(255 - WheelPos * 3)/dim; rgb.b=0; return; } else { WheelPos -= 170; rgb.r=(255 - WheelPos * 3)/dim; rgb.g=0; rgb.b=WheelPos * 3/dim; return; } }
… und schon läuft ein Regenbogenfarbübergang über unsere LEDs.
Bauteile (Bezugsquellen):
Gut?











