Go Down

Topic: TLC5940+RGB Leds (Read 598 times) previous topic - next topic

maestrox

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: [Select]

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?!

uwefed

Code: [Select]

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: [Select]

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


MaFu

#2
Jan 30, 2013, 11:27 am Last Edit: Jan 30, 2013, 12:01 pm by MaFu Reason: 1

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: [Select]

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: [Select]
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: [Select]
void loop()
{
 setRGB(0, 255, 0, 0);
 setRGB(1, 12, 64, 255);
 setRGB(2, 128, 128, 32);
 Tlc.update();
}
_______
Manfred

maestrox

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?!

Go Up