Forum: Mikrocontroller und Digitale Elektronik Komischer Anfängerfehler - RGB LED dimmen klappt nur halb


von Dirk K. (dekoepi)


Angehängte Dateien:

Lesenswert?

Guten Morgen zusammen,

da ich nicht nur die "fortgeschrittenen" Sachen machen, sondern alles 
bis ins Detail korrekt verstehen will, habe ich mir folgende 
Minischaltung zusammengelötet: RGB-LED via 150 Ohm-WIderstand auf GND, 
einzelne Farben an Pins B0-B2 des ATtiny85. Pin B3 hat einen 
10kOhm-Pulldown, daran hängt ein schön prellender Taster/Schließer, der 
den Pin auf Vcc zieht. Da endlich meine SMD-On-Off-Schalter angekommen 
sind, habe ich beim sauberen Neuaufbau gestern auch gleich mal versucht, 
den zu integrieren und schalte damit Vcc am µC von der CR2032-Speisung 
(man sind die bekloppt für Lochraster ... siehe Lötkatastrophe am 
Schalter auf dem Foto).

An so etwas einfachem kann man einiges lernen - mein erster Versuch mit 
Taster war noch ohne Pulldown, zum Beispiel. Meine erste Version des 
Programms war ein simpler PoC, der in der Main endlos die 
Animationsroutine aufruft und via Interrupt den Taster abfragt.

Jetzt wollte ich auch das Programm neu und "richtig" aufbauen, sodass 
ich die RGB-LED auch richtig als solche ansteuere - also mit richtiger 
(Software-)PWM und nicht via Proof-of-Concept-Schnellschuss-Direkt-Code. 
Eigentlich funktioniert das auch, nur folgender erstaunlicher Effekt 
tritt ein und ich sehe und verstehe nicht, warum:

In meinem Programmcode blende ich alle Farben und deren Kombinationen 
einmal durch. Das klappt für: Rot, Grün, Blau, Grün+Blau. Die anderen 
Kombinationen Rot+Grün, Rot+Blau und Rot+Grün+Blau hingegen dimmen nur 
Rot.

Seht ihr irgend etwas, was das verursacht? Habe das auch mal 
umgestrickt, nicht direkt die Port-Bits zu beschreiben, sondern eine 
tmp-Variable eingeführt und das jetzt damit gelöst, das Ergebnis bleibt 
jedoch gleich. Volatile will der Compiler für mein LED-struct/die 
my_led-Variable nicht.

Wie so etwas Triviales nicht klappen kann, ist doch erstaunlich. Von 
diesem kleinen Schei*ding, das ich nur mal so als Spaßdingen gelötet 
habe, bin ich hellauf begeistert. So viele Dinge, die unerwartet nicht 
klappen und einem die Grundlagen verdeutlichen! :)

Danke schon mal für eure Zeit!

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dirk K. schrieb:
> RGB-LED via 150 Ohm-WIderstand auf GND
Ein Vorwiderstand für alle Farben. Das ist der Fehler. Denk mal über der 
Begriff "Durchlasspannung" nach. Und zeichne dann das Ersatzschaltbild 
nach, wenn z.B. alle drei Pins des uC eingeschaltet sind.

Und dann merkst du dir: jede LED braucht ihren individuellen 
Vorwiderstand.

: Bearbeitet durch Moderator
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Bau doch mal noch den HSV Farbraum ein ;)
Dann ist das einfacher die passende Farbe und Helligkeit zu finden.

von Praktiker (Gast)


Lesenswert?

Martin Wende schrieb:
> Bau doch mal noch den HSV Farbraum ein ;)
> Dann ist das einfacher die passende Farbe und Helligkeit zu finden.

Was hat das mit dem Problem zu tun.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Das Problem hat Lothar doch schon aufgelöst, war also nurn Tip fürn 
weiteren Lerneffekt ;)

von Dirk K. (dekoepi)


Lesenswert?

Danke für die Antworten!

Lothar: Das hatte ich auch erst überlegt - nur klappt das mit dem 
"PoC-Direkt-Code" einwandfrei. Habe das daher von der ersten Lötübung so 
übernommen.
Edit: Und jetzt fällt mir auf - im PoC-Code habe ich sauberer gearbeitet 
als gedacht - quasi im Multiplex; da war nur eine LED zur Zeit an ... 
ok, Fehler eingesehen!

Das mit den unterschiedlichen Durchlassspannungen sollte für 
unterschiedliche Helligkeiten sorgen im Wesentlichen? Man müsste 
natürlich, um es richtig sauber zu machen, noch die maximale Duty-Cycle 
nachregeln, um auch bei allen LEDs gleiche Helligkeit zu erzeugen. Aber 
andimmen müssten durch diesen Code eigentlich alle LEDs, ich müsste also 
mindestens "etwas" Grün und Blau sehen, auch wenn ich Rot mit ansteuere. 
Das dimmt aber nur Rot.

Martin: Farbraum bauen und so kommt dann noch beim Weiterbasteln. 
Erstmal ganz sauber und klein anfangen und alle Fehler bis dahin 
mitnehmen - wenn du dir das Programm anguckst, das ist noch ganz klein 
und harmlos ;)

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dirk K. schrieb:
> ... ok, Fehler eingesehen!
Für alle, die sich jetzt noch Fragen: und welcher war das? Hier die 
Antwort: wenn alle LED an sind,vdann sind Sie praktisch an einem 
einzigen Vorwiderstand parallel geschaltet und es leuchtet nur die LED 
mit der kleinsten Uf: die Rote...

von Mike (Gast)


Lesenswert?

Dirk K. schrieb:
> Das mit den unterschiedlichen Durchlassspannungen sollte für
> unterschiedliche Helligkeiten sorgen im Wesentlichen?

Nein, wenn die rote LED leuchtet, stellt sie fast soetwas wie eine 
Kurzschluss für die grüne und die blaue dar.

Zeig mal deinen Schaltplan.

Das Problem läßt sich natürlich umgehen, indem jede LED-Farbe ihr 
eigenes Zeitfenster bekommt, so dass immer maximal eine gleichzeitig 
angesteuert wird. Das schlägt mit einem Faktor 1:3 auf die 
Maximalhelligkeit, dürfte aber wegen der logatihmischen 
Helligkeitsempfindung nicht so schlimm sein. Die PWM-Modulation für jede 
LED findet dann immer nur in dem Zeitfenster der Farbe statt, also z.B. 
für Orange (100% Rot, 60% Grün):
1
... |  R  |  G  |  B  |  R  |  G  |  B  | ...
2
     _____             _____              ___
3
 R _|     |___________|     |___________|
4
           ___               ___             
5
 G _______|   |_____________|   |____________
6
                                             
7
 B __________________________________________

von Dirk K. (dekoepi)


Lesenswert?

Danke Lothar für die Bestätigung, dass ich den "richtigen" Fehler 
verstanden habe :) Stelle mir das nur eher so vor, dass die Spannung bei 
den ~1,9V der roten LED "sättigt" und daher einfach Grün und Blau 
(Durchlassspannung ~3,0V) nicht losglimmen können. Falscher 
Gedankengang?

Mike: So habe ich das unbewusst ja in meinem ersten, "hingerotzten" 
Programm gehandhabt. Jetzt wollte ich das halt so richtig richtig machen 
und habe meine Elektronik-Unkenntnis schamlos ausgenutzt, das zu 
vereiteln :D

: Bearbeitet durch User
von Dirk K. (dekoepi)


Angehängte Dateien:

Lesenswert?

Korrektur per Code endete bei meinem einfachsten Ansatz bei 1/6 der 
Leuchtkraft, das ist zuwenig und nur Nacht-tauglich. Habe meine 
kleinstmöglichen SMD-Widerstände gesucht und paar 470Ohm gefunden. Das 
heißt doch "Senkrecht Montiertes Ding" (SMD) ;)

q.e.d. - läuft jetzt korrekt! :)

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dirk K. schrieb:
> Stelle mir das nur eher so vor, dass die Spannung bei den ~1,9V der
> roten LED "sättigt" und daher einfach Grün und Blau (Durchlassspannung
> ~3,0V) nicht losglimmen können. Falscher Gedankengang?
Richtiger Gedankengang, aber noch das falsche Wort. Die LED sind (über 
einen kleinen Umweg=Portpin) alle parallel geschaltet und die rote LED 
begrenzt die Vorwärtsspannung auf unter 2V. Das ist zuwenig für die 
blaue und die grüne LED.

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.