Pages: [1]   Go Down
Author Topic: TLC5940+RGB Leds  (Read 490 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich habe einen TLC5940 an mein Arduino Board angeschlossen und die ersten Funktionstests
laufen auch erfolgreich. 
Jetzt versuche ich 5x RGB Leds sinnvoll anzusteuern. Dazu verwende ich die Tlc5940.h

Jedoch finde ich nicht den richtigen Einstieg. Einfache Durchläufe habe ich bis jetzt so gelöst:

Code:
int rPIN [] = {1,4,7,10,13} // rote pins
int gPIN [] = {2,5,8,11,14} // gruene pins
int bPIN [] = {3,6,9,12,15} // blaue pins

tlc.clear();
for (int i=0;i<=4;i++)
{
 tlc.set(rPIN[i],4095);
 delay(100);
 tlc.update()
}
... usw

Um jedoch Farben zu mischen oder Farbübergänge zu realisieren müsste man ja bei meiner Programmierung
viel Aufwand betreiben.

Ich stelle mir das eigentlich so vor, dass ich eigentlich jede RGB -LED einzeln anspreche und ihr einen RGB wert und die Helligkeit übergebe.
Quasi :
rgb1.set(255,125,80,2000); // rot=255,gruen=125,blau=80,pwm=2000
rgb2.set(180,80,255,4095); // rot=180,gruen=80,blau=255,pwm=4095
usw....

Also im Grunde möchte ich später Regenbogen Farbverläufe oder andere Farbwechsel incl. Fade Funktion Programmieren. Nur weiß ich nicht wie ich das mit dem TLC5940 Ressourcen schonend hin bekomme.

Vielleicht habt ihr ja ein paar Denkanstöße?!
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21243
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
for (int i=0;i<=4;i++){
 tlc.set(rPIN[i],4095);
 delay(100);
 tlc.update()
}
Zu was braucht es das delay und warum sendest Du die daten aus dem Buffer jedesmal an den TLC?.
Es genügt alle werte zu ändern und dann die daten aus dem Buffer in den TLC zu +bertragen. also so:
Code:
for (int i=0;i<=4;i++){
 tlc.set(rPIN[i],4095);
 }
 tlc.update()
}

rgb1.set(255,125,80,2000); // rot=255,gruen=125,blau=80,pwm=2000

Schreib eine Funktion.
die RGB-Werte müssen dabei dem Helligkeitswert angeglichen werden. Wenn Du für helligkeit 0-100% nimmst dann einfach:
TLCrot = (rot * 16 * 100)/helligkeit. Du mußt dabei mit long Variablen rechnen oder auf Genauigkeit verzichten und (rot * 100/helligkeit)*16 rechen da ansonst mit int ein Überlauf stattfindet.

Grüße Uwe

Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

ich habe einen TLC5940 an mein Arduino Board angeschlossen und die ersten Funktionstests
laufen auch erfolgreich.  
Jetzt versuche ich 5x RGB Leds sinnvoll anzusteuern. Dazu verwende ich die Tlc5940.h

Jedoch finde ich nicht den richtigen Einstieg. Einfache Durchläufe habe ich bis jetzt so gelöst:

Code:
int rPIN [] = {1,4,7,10,13} // rote pins
int gPIN [] = {2,5,8,11,14} // gruene pins
int bPIN [] = {3,6,9,12,15} // blaue pins

tlc.clear();
for (int i=0;i<=4;i++)
{
 tlc.set(rPIN[i],4095);
 delay(100);
 tlc.update()
}
... usw

Um jedoch Farben zu mischen oder Farbübergänge zu realisieren müsste man ja bei meiner Programmierung
viel Aufwand betreiben.

Ich stelle mir das eigentlich so vor, dass ich eigentlich jede RGB -LED einzeln anspreche und ihr einen RGB wert und die Helligkeit übergebe.
Quasi :
rgb1.set(255,125,80,2000); // rot=255,gruen=125,blau=80,pwm=2000
rgb2.set(180,80,255,4095); // rot=180,gruen=80,blau=255,pwm=4095
usw....

Also im Grunde möchte ich später Regenbogen Farbverläufe oder andere Farbwechsel incl. Fade Funktion Programmieren. Nur weiß ich nicht wie ich das mit dem TLC5940 Ressourcen schonend hin bekomme.

Vielleicht habt ihr ja ein paar Denkanstöße?!
Also eine Funktion mit vier Parametern wie rgb1.set(255,125,80,2000) macht erst mal keinen Sinn, da in den RGB Werten die Helligkeit ja schon enthalten ist.

Aber Du könntest Dir so eine Funktion basteln:
Code:
void setRGB(int led, int r, int g, int b)
{
  Tlc.set(rPIN[led], map(r, 0, 255, 0, 4095));
  Tlc.set(gPIN[led], map(g, 0, 255, 0, 4095));
  Tlc.set(bPIN[led], map(b, 0, 255, 0, 4095));
}
und dann so nutzen
Code:
void loop()
{
  setRGB(0, 255, 0, 0);
  setRGB(1, 12, 64, 255);
  setRGB(2, 128, 128, 32);
  Tlc.update();
}
« Last Edit: January 30, 2013, 06:01:47 am by MaFu » Logged

_______
Manfred

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,


Quote
for (int i=0;i<=4;i++){
 tlc.set(rPIN,4095);
 }
 tlc.update()
}
Das delay sollte eigentlich ein Lauflicht erzeugen. Wenn ich den update() Befehl außerhalb der Schleife mache,
gehen ja alle roten Led gemeinsam an.

Quote
TLCrot = (rot * 16 * 100)/helligkeit

das verstehe ich so nicht richtig?!
Logged

Pages: [1]   Go Up
Jump to: