Probleme mit RGB-LEDs

Hallo!
habe hier einige 4-pin-RGB-LEDs und einen arduino duemilanove. die 3 einzelnen LEDs im innern jeder LED sollte man doch per PWM dimmen und somit jede beliebige farbe erhalten können. (mehrere RGB-LEDs parallel geschalten, somit haben alle immer die gleiche farbe, mit transistoren für die entsprechenden farben)

hier nun mein problem (--> das ist eigentlich fast der gesamte quelltext; green, red und blue sind die PWM-pins):

analogWrite(green, 255);
analogWrite(red, 255);
analogWrite(blue, 255);

---> erwartung: weiss
---> ergebnis jedoch: ROT

immer wenn ROT irgendwie aktiviert ist (egal ob vor oder nach grün oder blau im quelltext), ist grün und blau nicht an! die grünen und blauen pwm-pins sind jedoch trotzdem aktiv (gemessen), es kommt aber trotzdem keine farbmischung zustande, sondern nur ROT (blau und grün aus)!

das heisst: ich bin in der lage die farben ROT, GRÜN, BLAU und CYAN zu erzeugen. jedoch müsste das erzeugen von cyan durch mischung von grün und blau doch genauso funktionieren wie z.b. rot-blau!

noch eine anmerkung: ich habe das gleiche system mit nur EINER led getestet bevor ich mehrere leds parallel geschalten habe. dort ging noch die komplette farbmischung (moodlight-mäßig)! als ich jedoch den quelltext erweitert habe um per serial(9600) die farben an und auszuschalten trat der selbe rot-felher auf!
einen kurzschluss oder ähnluches schließe ich aus (alles erdenkliche wurde überprüft).

ein weiteres kleines problem: meine pins 0 und 1 sind permanent HIGH, ohne dass etwas dazu im quelltext steht! warum??

hat jemand eine idee woran das alles liegen könnte?
gruß

welche LEDs verwendest du? gibt es ein Datenblatt online?

Gemeinsame Kathode oder Anode? Sicher, dass Du den richtigen Pin erwischt hast?

Digital Pin 0 und 1 sind natürlich vom UART bzw. dem FTDI USB Chip belegt... die solltest Du nicht nehmen.

Analog Pin 0 und 1 hingegen könntest Du natürlich nutzen wenn Du sie entsprechend als Ausgänge definiert hast...

welche LEDs verwendest du? gibt es ein Datenblatt online?

leider kenne ich die modellnummer nicht...

Gemeinsame Kathode oder Anode? Sicher, dass Du den richtigen Pin erwischt hast?

gemeinsame GND. ja die pins stimmen, es ist ja möglich alle 3 farben separat zu erhalten, jedoch gemischt nur blau und grün!

Digital Pin 0 und 1 sind natürlich vom UART bzw. dem FTDI USB Chip belegt... die solltest Du nicht nehmen.

das erklärt wohl das blinken beim upload;)

Analog Pin 0 und 1 hingegen könntest Du natürlich nutzen wenn Du sie entsprechend als Ausgänge definiert hast...

die pins 0 und 1 (TX/RX)sind beide definiert um den GND der leds (per transistor) freizugeben. werde sie aber mal ändern..:wink:

// sorry wegen dem doppelpost, kann leider nicht mehr editieren!

kann es sein dass die lichtmischung per PWM am transistor scheitert??? (B337-16)
braucht man spezielle transistoren um mehrere LEDs per PWM faden zu lassen? ist der transistor "zu langsam"..?

(ohne transistoren - mit nur einer LED klappt es wunderbar!)

an der anzahl der RGB-LEDs (es sind 7 - parallel) kann es doch kaum liegen dass nur die rote LED an ist.. weil wenn bei allen strom kommt müssten doch auch alle 3 LEDs eingeschaltet sein..

Verrate uns bitte, wie du das verdrahtet hast. Am besten in bildform. Unter B337-16 konnte ich nichts finden. Meinst du evtl. den BD337 ?

Unter B337-16 konnte ich nichts finden. Meinst du evtl. den BD337 ?

Sorry, hatte das "C" vergessen -.- es sind BC 337-16 NPN-Transistoren.


hier das paint-bild;) (habe momentan kein anderes programm auf dem PC...) es ist alles eigentlich richtig verschalten und am schieberegister liegts nicht.

Also was mir als erstes auffaellt:

Du verwendest auch NPN transistoren zum schalten der anoden, also als "high side driver". Das hat den erheblichen nachteil, dass du somit am emitter niemals mehr spannung erzielen wirst als ungefaehr 4V. Genauer gesagt die 5V vom arduino abzueglich der V(BE) turn on voltage (siehe datenblatt). Die basis emitter spannung muss positiv sein, damit die basis emitter diode leitet. Alle verbraucher (LED), die am emitter haengen, heben das potential an, womit sich V(BE) verkleinert, bis das teil einfach nicht mehr richtig an geht. Je mehr strom fliesst, desto schlimmer wird das. Als high side driver sind daher PNP transistoren zu bevorzugen, da hier das problem nicht auftritt.

NPN: V(+) --> load --> collector; emitter --> GND; V(BE) > 0 => an
PNP: V(+) --> emitter; collector --> load --> GND; V(BE) < 0 => an

Was weiterhin wichtig ist, ist die V(CE)-sat spannung, also der spannungsabfall innerhalb des transistors bei groesseren stroemen. Nach dem datenblatt sind das auch wieder ca. 1V. Somit bleiben von den 4V nochmals weniger uebrig. Es kann also vorkommen, dass durch die rote LED so viel strom fliesst, dass die summe aller "verlustspannungen" so hoch wird, dass der schaebige rest nicht mehr ausreicht die gruenen/blauen LEDs zu betreiben. Und diese haben ja eine hoehere "forward voltage" von ca. 2.5-3.0V.

1.) PNP als "high side driver" verwenden.
2.) Transistoren mit niedriger V(CE)-sat spannung verwenden und am besten gleich 1-2 nummern groesser in punkto maximal strom. Treibt man die dinger an ihre grenzen, treten allerlei komische effekte auf.

Solltest du vorhaben auf MOSFETs umzusteigen, so ist der R(DS)-on wert wichig, je kleiner (mOhm) desto besser. Es gibt einige MOSFETs (sowohl P also N channel), die sich direkt am arduino betreiben lassen ("logic level"). Das wurde hier irgendwo auch schonmal aufgegriffen.

BC337 datenblatt: Intelligent Power and Sensing Technologies | onsemi

Hallo!
find ich schonmal stark dass jemand ne erklärung für meinen rotstich hat;)
jedoch hat das austauschen gegen einen PNP-transistor (2N3906) leider nichts gebracht.. eine niedrigere V(CE)-sat als der BC337-16 hat er ja auch..!

fazit: wenn ROT aktiviert ist wird immer noch grün und blau unterdrückt (wieder nur cyan, grün, blau und rot möglich!).. =(

ich habe nun mal ein neues progrämmchen zum faden geschrieben, und es ist mir gelungen dass alle LEDs gleichzeitig die farben mischen, jedoch sollte jede der spektralfarben gleich lange leuchten. zu beobachten ist jedoch dass ROT etwa 3mal so lange wie die anderen spektralfarben dauert! --> solange rot auf 255 ist, leuchten die anderen beiden LEDs nicht!

jedoch habe ich noch beobachtet dass alles wunderbar funktioniert wenn z.b.:

analogWrite(rot, 100); //z.B. 100 statt 255!!
--> 100 ist ein funktionierender beispielwert, wo die schwelle genau liegt werde ich bald ausprobieren..:wink: trotzdem sehr komisch.. -.-^^

bei
analogWrite(gruen, 255);
analogWrite(rot, 200);
---> ist das ergebnis schon sehr dunkelorange, also schon fast richtiges ROT-.-

so kommt wenigstens schonmal schwaches gelb oder orange zustande.. alle 16,7mio farben werde ich wohl so nicht nutzen können...:wink:

Nachweislich gibt es also eine korrelation zwischen dem mittleren strom durch die rote LED und dem nicht-funktionieren der gruen/blauen. Das gleiche problem hat man auch, wenn man z.b. einen gemeinsamen begrenzungswiderstand verwendet anstelle je einen pro farbe. dann zieht die rote LED die spannung so weit runter, bis die anderen nicht mehr an gehen.

verwendest du ueberhaupt vorwiderstaende :wink: ?

verwendest du ueberhaupt vorwiderstaende Wink ?

ja, aber für alle farben die gleichen oO;)

Das gleiche problem hat man auch, wenn man z.b. einen gemeinsamen begrenzungswiderstand verwendet anstelle je einen pro farbe.

habe ich.., dachte das würde auch so gehen..oO
werde es aber natürlich sofort ausprobieren!
danke=)

EDIT:
OMG!! das wars;) vielen vielen dank dir;)
die NPN-transistoren nach der RGB-LED (GND) und die tatsche dass ich nur einen einzigen vorwiderstand hatte, waren der grund dafür dass die rote LED die anderen ausgeschaltet hat;)
=)

Ein zufriedener kunde. Das mit den widerstaenden haette ich gleich fragen sollen :wink:

Nachdem der link zu dem BC337 datenblatt oben nicht wie gewuensch funktioniert hier nochmals.