RGB LED Programm NPN Transistor

Hallo
habe meine RGB Lampe folgendermaßen aufgebaut,
9,10,11 PWM ausgänge steuern mit einem Basiswiderstand dazwischen je einen NPN transistor(die Basis.).
Am Emitter ist jeweils GND angeschlossen und am Kollektor jeweils die Kathode der RGB LED( haben gemeinsame Anode).

Soweit so gut, doch jetz wollte ich folgenden Code verwenden:

/*
  _____       .__  __         .__                
_/ ____\______|__|/  |________|__| ____    ____  
\   __\\_  __ \  \   __\___   /  |/    \  / ___\ 
 |  |   |  | \/  ||  |  /    /|  |   |  \/ /_/  >
 |__|   |__|  |__||__| /_____ \__|___|  /\___  / 
                             \/       \//_____/  
          __                 __                  __   .__  __   
  _______/  |______ ________/  |_  ___________  |  | _|__|/  |_ 
 /  ___/\   __\__  \\_  __ \   __\/ __ \_  __ \ |  |/ /  \   __\
 \___ \  |  |  / __ \|  | \/|  | \  ___/|  | \/ |    <|  ||  |  
/____  > |__| (____  /__|   |__|  \___  >__|    |__|_ \__||__|  
     \/            \/                 \/             \/         

Example      RGB LED Fader
Autor        Stefan Hermann
Date         16.06.2011

Description  This example lets you fade through the colors of a RGB LED.

*/

int LEDGreen=9;
int LEDBlue=10;
int LEDRed=11;


int sensorPin=0;
int val;

void setup(){
  Serial.begin(9600);
  pinMode(LEDRed,OUTPUT);
  pinMode(LEDGreen,OUTPUT);
  pinMode(LEDBlue,OUTPUT);  
}

void loop(){
  
  val=map(analogRead(sensorPin),0,1024,0,900);
  Serial.println(val);
  if (val<150) {
    analogWrite(LEDRed,0);
    analogWrite(LEDBlue,255); 
    analogWrite(LEDGreen,255);    
  } else if (val<300) {
    analogWrite(LEDRed,map(val,150,300,0,255));
    analogWrite(LEDBlue,map(val,150,300,255,0)); 
    analogWrite(LEDGreen,255);
  } else if (val<450) {
    analogWrite(LEDRed,255);
    analogWrite(LEDBlue,0); 
    analogWrite(LEDGreen,255);  
  } else if (val<600) {
    analogWrite(LEDRed,255);
    analogWrite(LEDBlue,map(val,450,600,0,255)); 
    analogWrite(LEDGreen,map(val,450,600,255,0));
  } else if (val<750) {
    analogWrite(LEDRed,255);
    analogWrite(LEDBlue,255); 
    analogWrite(LEDGreen,0);  
  } else if (val<900) {
    analogWrite(LEDRed,map(val,750,900,255,0));
    analogWrite(LEDBlue,255); 
    analogWrite(LEDGreen,map(val,750,900,0,255));
  }
  delay(10);
}

Und ich musste feststellen das die Schaltung zwar funktioniert, aber alles ist umgedreht, heist, bei 0 sind meine LEDs an und bei 255 sind sie aus.

Was habe ich falsch gemacht?

MfG

arduflo:
Hallo
habe meine RGB Lampe folgendermaßen aufgebaut,
9,10,11 PWM ausgänge steuern mit einem Basiswiderstand dazwischen je einen NPN transistor(die Basis.).
Am Emitter ist jeweils GND angeschlossen und am Kollektor jeweils die Kathode der RGB LED( haben gemeinsame Anode).

Zuerst mal fehlen die Vorwiderstände für die LED. Diese müssen zwischen Kollektor unf Kathode geschaltet werden.

  val=map(analogRead(sensorPin),0,1024,0,900);

AnalogRead liest bis max 1023.
Aber das sind Fehler die nicht das Verhalten der Schaltung erklähren würden.

Was habe ich falsch gemacht?
MfG

Mir fällt da nichts auf.

Grüße Uwe

Hallo uwe,
die Vorwiderstände habe ich natürlich verbaut..

Hi

Ich verstehe den Code nicht ganz.

 if (val<150) {
...
  } else if (val<300) {
...
  } else if (val<450) {
...
  } else if (val<600) {
...
  } else if (val<750) {
...
  } else if (val<900) {

Sind da nicht meistens gleich mehrere Bedingungen erfüllt? Z.B. wenn val 50 ist, ist das doch sowohl weniger wie 150 als auch 300 etc.

Welchen Wert meinst du mit 0 - 255? Der Wert von Val geht ja nach dem Mappen von 0 - 900.
Probier mal statt dieser Zeile: val=map(analogRead(sensorPin),0,1024,0,900);
die Zeile so aus: val=map(analogRead(sensorPin),0,1024,900,0);

if (val<150) {
...
  } 
 else 
    if (val<300) 
 {

Das else wird ausgeführe wenn die if Bedingung nicht zutrifft.
Grüße Uwe

also wenn ich eine led direkt an einem PWM Ausgang über einen Vorwiderstand anschliese funktioniert der Code richtig herum. Schließe ich aber einen NPN Transistor dazwischen ist alles "umgedreht".

Aber eine NPN Transistor ist doch die richtige Wahl bei gemeinsamer Anode, richtig ?

Gruß

arduflo:
Aber eine NPN Transistor ist doch die richtige Wahl bei gemeinsamer Anode, richtig ?
Gruß

Wenn Du den Transistor zwischen LED Kathode-Vorwiderstand und Masse schaltest dann schon.

Wie hast Du den Transistor angeschlossen? Schick uns mal ein Schaltbild oder ein Foto.
Grüße Uwe

Ja. Die musst die Kathoden schalten, also NPN. PNPs schalten gegen Plus, daher für gemeinsame Kathode.

Das passt dann glaube ich. Wenn du eine LED mit der Anode an Plus hast, und du machst an die Kathode Masse leuchtet sie. Wenn du an der Basis des Transistors Plus hast, schaltet er und du hast an der Kathode Masse.

Dreh einfach deine PWM Werte herum.

also angeschlossen ist es so http://img440.imageshack.us/img440/7278/bfjf.jpg
Bitte denk dir die Basiswiderstände und die Vorwiderstände dazu, in echt sind die dran.

Wie dreh ich denn die PWM Werte herum? Kann ich das irgendwie einstellen oder muss ich den ganzen Code verändern?

Gruß

arduflo:
also angeschlossen ist es so http://img440.imageshack.us/img440/7278/bfjf.jpg
Bitte denk dir die Basiswiderstände und die Vorwiderstände dazu, in echt sind die dran.

Wie dreh ich denn die PWM Werte herum? Kann ich das irgendwie einstellen oder muss ich den ganzen Code verändern?

Gruß

Die PWM-Werte dreht man um indem man von 255 den PWM-Wert subtrahiert oder bei Übergängen ihn nicht von 0 bis 255 zählt sondern von 255 bis 0.

Welche Transistoren verwendest Du?
Grüße Uwe

ich hab mehrere NPNs ausprobiert, einmal den bc238b und einmal den bc 547b.

kann ich das einmal im code anführen das die Werte umgedreht werden oder muss das in jeder Zeile manuell gemacht werden?

Gruß

Du hast Kollektor und Emittor vertauscht.
Grüße Uwe

Ich merke es mir immer so:

Von unten auf den Transistor schauen. Gerade Seite zum Boden -> EBC

Serenifly:
Von unten auf den Transistor schauen. Gerade Seite zum Boden -> EBC

Passt bei vielen Transistoren, jedoch nicht bei allen.

Serenifly:
Ich merke es mir immer so:
Von unten auf den Transistor schauen. Gerade Seite zum Boden -> EBC

Das ist leider nicht bei allen Transistoren so. Es bleibt nichts anderes übrig als jedesmal das Datenblatt bemühen.
Grüße Uwe

Ich weiß. Bei den aller meisten NPNs passt es aber :slight_smile:

Gerade bei diesen Standard TO-92 Typen.

Habe den Transistor mal umgedreht, macht keinen unterschied:/

bitte un Foto.
Grüße Uwe

Serenifly:
Ich weiß. Bei den aller meisten NPNs passt es aber :slight_smile:

Gerade bei diesen Standard TO-92 Typen.

Wenn die allermeisten "BCnnn" heissen, habe ich auch diese Erfahrung gemacht.
Dann gibt es welche, die heissen 2Nxxxx und die sind in den allermeisten Fällen anders rum.

arduflo:
Habe den Transistor mal umgedreht, macht keinen unterschied:/

Ist ein Zeichen dafür, dass noch ein weiterer Fehler woanders ist :wink: