Leichtes Glimmen am LED-Stripe, tortz analogWrite=0

Moin Moin,

ich habe einen RGB LED Controller mit Hilfe von drei Mosfets gebaut und habe leider das Problem, dass die LEDs trotz analogWrite=0 leicht Glimmen. Bei den Mosfets handelt es sich um STP 16 NF 06. Die Mosfets sind dabei direkt mit dem PINs 3,5 und 6 vom Arduino Nano verbunden. Ist hier eventuell ein Fehler?
Muss ich zum Dämpfen eventuell noch ein Wiederstand dazwischen legen oder ist es doch ein Fehler im Sketch?

Datenblatt vom Mosfet:
http://www.produktinfo.conrad.com/datenblaetter/150000-174999/156110-da-01-en-PWRMOS_60V_16A_STP16NF06L_STM.pdf

Aufbau ist wie hier:


Quelle: RGB LED strip tutorial

Von der Beschaltung her müßte alles richtig sein. Gate an Arduino Ausgang, Source an Masse und Drain an die LED. Wenn Du sie so wie im Bild angeschlossen hast dann ist es richtig. Zur Sicherheit des Arduino-Ausgangs würd ich einen 150 Ohm Widerstand zwischen Ausgang und Gate schalten (um den Strom im Schaltmoment zu begrenzen) wie in http://www.ladyada.net/wiki/_media/products/rgbledstrip/ledstripbjt.gif gezeichent.

Hast Du die Masse der 12V mit der Masse des Arduino verbunden?

Gib uns mal den Sketch.

Grüße Uwe

Hi Uwe,

VIN sind mit dem 12V+ Netzteil verbunden und der GND-PIN vom Arduino mit Masse vom Netzteil.
Die Widerstände hab ich bislang nicht integriert. Bin davon ausgegangen, dass diese nur bei den anderen Mosfets von nöten sind.
Werde es aber morgen nachholen :slight_smile:

Mein Sketch sieht wie folgt aus:

#include <VirtualWire.h>
String mycmd;
String Empf ="02";
int red, green, blue, ledr=3, ledg=5,ledb=6, currentColor=0;
String color;

void setup()
{
  Serial.begin(9600);	// Debugging only
  // Initialise the IO and ISR
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);	 // Bits per sec
  vw_rx_start();       // Start the receiver PLL running
  pinMode(ledg, OUTPUT);
  pinMode(ledb, OUTPUT);
  pinMode(ledr, OUTPUT);
}
 
void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  if (vw_get_message(buf, &buflen)) // Non-blocking
  {
    int i;
    mycmd =  "";
    for (i = 0; i < buflen; i++)
    {
      mycmd +=  (char)buf[i];
      if (isDigit((char)buf[i]) && i > 2) 
      {
        color += (char)buf[i]; 
      }
      if ((char)buf[i] == ',') 
      {
        switch (currentColor) {
        case 0:    // 0 = rot
          red = color.toInt();
          color = ""; 
          break;
          case 1:    // 1 = gruen:
          green = color.toInt();
          color = ""; 
          break;
        }
        currentColor++;
      }
    }
    blue = color.toInt();
    color="";
    currentColor = 0;
    if (mycmd.startsWith(Empf+"|")) 
    {
      analogWrite(ledr, red);
      analogWrite(ledg, green);
      analogWrite(ledb, blue);
      Serial.print("ROT:");
      Serial.println(red);
      Serial.print("Gruen:");
      Serial.println(green);
      Serial.print("Blau:");
      Serial.println(blue);
      Serial.println();
      Serial.println();  
    }
  }   
}

Erklärung: Jeder RGB Receiver hat eine Nummer von 00-99.
Der Sender schickt einen String mit dem Aufbau "Receivernummer|R,B,G" z.B. "01|255,255,255" für die Farbe weiß

Hatte leider nur 180ohm zur Verfügung und hab es damit probiert. Anfangs gibts jetzt ein kleines Glimmen, aber nach wenigen Sekunden verlischt dies und die Emitter sind komplett dunkel. Damit könnte ich leben. Vielen Dank schonmal :slight_smile: