Go Down

Topic: Leichtes Glimmen am LED-Stripe, tortz analogWrite=0 (Read 930 times) previous topic - next topic

da2001

Oct 06, 2012, 03:47 pm Last Edit: Oct 06, 2012, 04:11 pm by da2001 Reason: 1
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: http://www.ladyada.net/products/rgbledstrip/

uwefed

#1
Oct 06, 2012, 06:49 pm Last Edit: Oct 06, 2012, 06:53 pm by uwefed Reason: 1
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

da2001

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 :)

Mein Sketch sieht wie folgt aus:
Code: [Select]

#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ß

da2001

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 :)


Go Up