Forum: Mikrocontroller und Digitale Elektronik RGB Steuerung Lösungsansatz gesucht


von Thomas D. (thomasderbastler)


Lesenswert?

Bräuchte Tipps für folgendes vorhaben :

Ich möchte eine 50W RGB LED folgendermaßen ansteuern.
( Hardware und die Erzeugung der 3 PWM Kanäle mit AVR ist kein Problem )

An einem Atmega sollte per Poti (ADC )sowiel möglichkeiten wie möglich 
RGB Misschung erzeugt werden.

Mein erster Ansatz wäre evtl. mit Select Case Anweisungen die PWM Werte 
zuzuordnen. ( Bascom )

Etwa so :

Select Case Potiwert

Case 10
PWM1 =0
PWM2 =10
PWM3 =0

Case 20
PWM1 =50
PWM2 =0
PWM3 =255

usw..

gibt es eine elegantere/feinere  Methode ?

von Basti (Gast)


Lesenswert?

Ja Farbtabelle in Flash und Adc werte auf Farbtabelle abbilden.

von Karl H. (kbuchegg)


Lesenswert?

Thomas der Bastler schrieb:

> gibt es eine elegantere/feinere  Methode ?


HLS Farbsystem

Wenn du nur 1 Poti hast, läuft es darauf hinaus, dass du das Poti an H 
hängst und so den Farbkreis rundum gehst. Mit dem Poti stellst du dann 
den Farbton von rot über grün über blau und wieder zurück nach rot ein.

HLS kann man entweder über die korrekten Formeln zurückrechnen, oder 
aber wenn du nur H variabel hast, kann man da auch eine Vereinfachung 
machen.

> gibt es eine elegantere/feinere  Methode ?

Man möchte es kaum glauben, aber ein Computer kann auch aus einem Wert 
ein paar andere errechnen.

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Karl Heinz Buchegger schrieb:

> HLS kann man entweder über die korrekten Formeln zurückrechnen, oder
> aber wenn du nur H variabel hast, kann man da auch eine Vereinfachung
> machen.

Das sieht dann in den Einzel-Helligkeiten so aus.
Die x-Achse des Diagramms ist dein Wert vom Poti. Die einzelnen Kurven 
zeigen, welcher RGB Wert für jede dieser Stellungen jeweils zu 
realisieren ist.

Dann kannst du mit deinem Poti die Farbe mehr oder weniger stufenlos 
durchdrehen. Wie gut die dann von der RGB Led realisiert wird, ist 
allerdings eine andere Frage.

von Thomas D. (thomasderbastler)


Lesenswert?

Danke Karl-Heinz für die Zeichnung hilft schon weiter.

von Karl H. (kbuchegg)


Lesenswert?

Thomas der Bastler schrieb:
> Danke Karl-Heinz für die Zeichnung hilft schon weiter.

Teil dir den Potiweg in 6 Abschnitte ein.
In jedem Abschnitt sind jeweils 2 Farben konstant während 1 durchgedimmt 
wird (entweder auf oder ab).

von Daniel R. (daro6)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Thomas der Bastler schrieb:
>> Danke Karl-Heinz für die Zeichnung hilft schon weiter.
>
> Teil dir den Potiweg in 6 Abschnitte ein.
> In jedem Abschnitt sind jeweils 2 Farben konstant während 1 durchgedimmt
> wird (entweder auf oder ab).

So habe ich das mal gelöst...
Ist aber schon länger her, aber müsste eigentlich so funktionieren.
1
void Berechnung_Auto (uint16_t Wert)
2
{            
3
  if (Wert <= 51)     // Rot 255 grün ansteigend
4
    {
5
    PWM_R = 255;
6
    PWM_G = Wert * 5;
7
    PWM_B = 0;
8
    }
9
  if (Wert > 51 && Wert <= 102)   // Rot fallend Grün 255
10
    {
11
    PWM_R = 255 - ((Wert - 51) * 5);
12
    PWM_G = 255;
13
    PWM_B = 0;
14
    }
15
  if (Wert > 102 && Wert <= 153)   // Grün 255 Blau steigend
16
    {
17
    PWM_R = 0;
18
    PWM_G = 255;
19
    PWM_B = (Wert - 102) * 5;
20
    }
21
  if (Wert > 153 && Wert <= 204) // Blau 255 Grün fallend
22
    {
23
    PWM_R = 0;
24
    PWM_G = 255 - ((Wert - 153) * 5);
25
    PWM_B = 255;
26
    }
27
  if (Wert > 204 && Wert <= 255) // Blau 255 Rot steigend
28
    {
29
    PWM_R = (Wert - 204) * 5;
30
    PWM_G = 0;
31
    PWM_B = 255;
32
    }
33
  if (Wert > 255 && Wert <= 306) // Rot 255 Blau fallend
34
    {
35
    PWM_R = 255;
36
    PWM_G = 0;
37
    PWM_B = 255 - ((Wert - 255) * 5);
38
    }
39
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.