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.
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:
Schaltplangröße:
Für weitere Informationen (z.B. Pinbelegungen von Bauteilen oder genaue Kabelverbindungen)
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...
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.
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?