Ein TLC5940, 5 RGB-LEDs und ein Arduino

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 TLC5940, 5 RGB-LEDs und ein Arduino - blog.simtronyx.de

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:

Schaltplangröße:

1afbgchdie1j5510101515202025253030353540404545505055556060afbgchdiejTLC5940NT-+-+5V OFF 3.35V OFF 3.3
Für weitere Informationen (z.B. Pinbelegungen von Bauteilen oder genaue Kabelverbindungen)
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 Pinout - blog.simtronyx.de

TLC5940NT – Pinbelegung

RGB-LED - Common-Anode - Pinout - blog.simtronyx.de

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;
  }
}


Download Source Code

… und schon läuft ein Regenbogenfarbübergang über unsere LEDs.

Bauteile (Bezugsquellen):

eBay: Arduino
Breadboard
Breadboard Kabel
Breadboard Power Modul
RGB LED gemeinsame Anode
TLC5940NT
Widerstand 10k
Widerstand 2k
Amazon: Arduino
Breadboard
Breadboard Kabel
Breadboard Power Modul
RGB LED gemeinsame Anode
TLC5940NT
Widerstand 10k
Widerstand 2k

Gut?

Facebooktwittergoogle_plusredditpinterestlinkedinmailFacebooktwittergoogle_plusredditpinterestlinkedinmail