Anfänger Projekt - Dimmen von LEDs mit Arduino

Hallo liebe Forenmitglieder,

ich möchte mich mit dem Arduino vertraut machen und bin totaler Anfänger :stuck_out_tongue:

Was habe ich vor?

13 LED sollen nacheinander eingeschaltet werden. Die Einschaltvorgang soll als FADE-Effekt ablaufen.

So, was brauche ich dazu?
Als Basis wollte ich das Arduino Mega 2560 verwenden, weil es wohl über 14 PWM-Ausgänge verfügt.
Zusätzlich benötige ich natürlich eine Spannungsversorgung - Dort wollte ich ein Universalnetzteil verwenden (sind Links erlaubt? Dann reiche ich es gerne nach)

Die LEDs benötigen eine Spannung von 3,2V - Max. 4,0V und 20mA Stromstärke.
Bei der Bestellung kann optional ein Vorwiderstand gewählt werden (6V, 9V, 12V, 14V, 16V, 24V).
Ich hatte jetzt vor LED ohne einen Vorwiderstand zu bestellen und dann einen entsprechenden Widerstand auf dem Streckbrett zu verwenden.

Genau - ein Streckbrett zum Probieren - Was nehme ich da für eins? Hat jemand einen Tipp? (Reichelt z.B.?).
Der Widerstand müsste nach meiner Berechnung 75 Ohm stark sein (Wo bestelle ich solchen Kleinkram? Auch Reichelt?)

Wenn die "Hardware" soweit stimmt, dann würde ich mich mit dem Code beschäftigen
Ich hoffe soweit wenigstens etwas richtig zu liegen und würde mich über Antworten freuen.

Danke für eure Zeit und die Mühen,

Viele Grüße,
Alexander

Hallo Alexander,

ja Links sind erlaubt. Die Auswahl scheint auch erstmal schlüssig zu sein und Reichelt als Quelle ist auch nicht das schlechteste. Du solltest aber bei 13 LEDs bedenken, das auch der Arduino Mega nur einen begrenzten Gesamtstrom hat, der fliessen darf. Bei 13 LEDs * 20 mA (bei max. HElligkeit) hast Du schon 260 mA und das könnte bereits knapp werden. Die einzelnen Ausgänge des Arduino sind in Ports zu je 8 Pins zusammengefasst, diese Ports wiederum vertragen auch nur einen begrenzten Strom. Hier würden sich ggf. Low current LEDs anbieten, die mit maximal 5mA laufen und die dann kein Problem mehr darstellen sollten. Alternativ kannst Du auch die "normalen" LEDs mit deutlich weniger Strom betreiben, die sind dann halt nur nicht ganz so hell. Wenn Deine Anwendung nie alle LEDs auf einmal mit voller Helligkeit betreibt, ist das wohl auch nicht so tragisch, aber ich persönlich wäre da lieber vorsichtig.
Mario.

Hi Mario,

danke für deine schnelle Antwort.

Ich kann leider nichts zum zulässigen Gesamtstrom des Mega 2560 finden - Woran erkennt man, dass die Ausgänge in 8 Pins zusammengefasst sind?
Nach der Beschreibung (http://arduino.cc/it/Main/ArduinoBoardMega2560) waren es für mich 15 Digital I/O Pins, die PWm unterstützen.
Ich hatte mich darauf verlassen, dass diese Eingänge jeweils bsi 40mA vertragen :slight_smile:

Viele Grüße und Besten Dank,
Alexander

Auf die Schnelle habe ich folgendes gefunden: Arduino Playground - ArduinoPinCurrentLimitations. Genaue Details finden sich vermutlich nur im Datenblatt des Atmel Controllers.
Ein einzelner Ausgang kann bis zu 40mA treiben, das ist richtig. Aber Du kannst nicht auf allen gleichzeitig 40mA abziehen, da die Gesamtlast aller Ausgänge ja komplett durch den Controller fliesst.
Wie gesagt, bei low current LEDs sollte es keine Probleme geben, da Du bei 5mA bei allen 13 LEDs gerade mal auf 65 mA kommst, das schafft der Mega locker.
Mario.

Gibt es -wenn ich auf die LEDs festgelegt bin- eine andere Variante eines Arduino, welcher die Ströme aushalten würde?
Es sollte möglich sein, alle LEDs gleichzeitig auf voller Leistung laufen zu lassen.

EDIT: Könnte nicht ein LED-Treiber mit PWM jeweils Abhilfe schaffen? (Link: http://www.ebay.de/itm/High-Power-1W-LED-Driver-333mA-output-/110766255986?pt=LH_DefaultDomain_0&hash=item19ca2eef72)

Ich glaube dieser PWM Trieber wäre übertrieben. Bei 5 Dollar pro Stück bist Du 65 Dollar los. Es würde sicher reichen, wenn Du die LEDs über einfache Transistoren schaltest. Das PWM-Signal generiert ja schon Dein Arduino.
http://www.sqlskills.com/blogs/paulselec/post/Arduino-figuring-out-transistors-and-associated-resistors.aspx kannst Du als Vorlage nehmen.
Die Transistoren gibt's für ca. 5Cent pro Stück bei rechelt und Co. und die Widerstände kosten auch nicht die Welt. So bekommst Du für 5 Euro vermutlich alle Teile für Dein Projekt, inkl. der LEDs :slight_smile:

Hallo Mario

mkl0815:
... Die einzelnen Ausgänge des Arduino sind in Ports zu je 8 Pins zusammengefasst, diese Ports wiederum vertragen auch nur einen begrenzten Strom. ...

Von dieser begrenzung innerhalb eines Ports ist mir nichts bekannt. Die Begrenzungen sind 40mA pro Pin die durch die Ausgangstransistoren des ATmega fließen und 200 mA Gesamtstrom der über die Masse/Spannungsversorgungspinns fließt. Da git es keine Begrenzung innerhalb des Ports.

mkl0815:
...Wenn Deine Anwendung nie alle LEDs auf einmal mit voller Helligkeit betreibt, ist das wohl auch nicht so tragisch, aber ich persönlich wäre da lieber vorsichtig. ...

Daß man den Gesamtstrom begrenzt, wenn man bei PWM nicht 100% durchsteuert ist ein Trugschluß. Da PWM nur die Ein- zu Aus-Zeit-Verhältnis ändert, heißt das nicht, daß nicht alle Ausgänge gleichzeitig HIGH sein können und somit die LEDS den vollen Gesamtstrom ziehen.

@alex_e
Als Alternative zu einem Arduino MEGA würde ich Dir einen Arduino UNO mit einem (falls Du mehr als 16 LEDS betreiben willst oder mehreren) TLC5940 nennen.
Arduino Playground - TLC5940 (leider sind da einige Bilder abhanden gekommen.
Google Code Archive - Long-term storage for Google Code Project Hosting. (Hier gibt es die Bilder noch)
oder http://www.planetarduino.org/?p=3327
ein Breakout: http://www.watterott.com/de/TLC5940-Breakout?x96114=7280758bc1bbeb366aab401e4a0c7bd7

Grüße Uwe

@Uwe:

uwefed:
Von dieser begrenzung innerhalb eines Ports ist mir nichts bekannt. Die Begrenzungen sind 40mA pro Pin die durch die Ausgangstransistoren des ATmega fließen und 200 mA Gesamtstrom der über die Masse/Spannungsversorgungspinns fließt. Da git es keine Begrenzung innerhalb des Ports.

Ich bin auch nur über den Playground darüber gestolpert: Arduino Playground - ArduinoPinCurrentLimitations Habe aber noch nicht im Datenblatt des ATMega geschaut ob das korrekt ist.

uwefed:
Daß man den Gesamtstrom begrenzt, wenn man bei PWM nicht 100% durchsteuert ist ein Trugschluß. Da PWM nur die Ein- zu Aus-Zeit-Verhältnis ändert, heißt das nicht, daß nicht alle Ausgänge gleichzeitig HIGH sein können und somit die LEDS den vollen Gesamtstrom ziehen.

Damit hast Du natürlich recht, zumal es sehr wahrscheinlich ist, das sogar alle LEDs gleichzeitig angesteuert werden, da der PWM-Takt ja für alle gleich ist.
Mario.

mkl0815:
Ich bin auch nur über den Playground darüber gestolpert: Arduino Playground - ArduinoPinCurrentLimitations Habe aber noch nicht im Datenblatt des ATMega geschaut ob das korrekt ist.

Du hast Recht, das sind die Werte aus den Fußnoten der Tabelle 28.2 DC Characteristics auf Seite 313 von http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf stammen.
Diese Grenzwerte machen den Arduino nicht kaputt, sondern bei Überschreiten der Werte werden die Werte der Tabelle für "VOL Output Low Voltage(3) except RESET pin" bzw "VOH Output High Voltage(4) except Reset pin" nicht garantiert. Je nach Beschaltung der Ausgangspingruppen kann es zu Problemen kommen, wenn die Ausgangspannung kleiner/größer als die als HIGH bzw LOW erkannte Spannung wird. Da da aber Reserven sind VOH min = 4,2V VIH min = 3V bei 5V Versorgungspannung bzw VOLmin = 0,9V und VIL = 1,5V können diese Werte bei zB Beschaltung mit LED oder Transistoren auch unterschritten werden, da diese Bauteile ziemlich tollerant auf die Signalspannung sind und die Werte der Widerstände normalerweise großzügig bemessen sind. Von mir aus ist aber falsch zu sagen daß die Masse-Pins des Atmega328 im ganzen 400mA Vertragen.

mkl0815:

uwefed:
Daß man den Gesamtstrom begrenzt, wenn man bei PWM nicht 100% durchsteuert ist ein Trugschluß. Da PWM nur die Ein- zu Aus-Zeit-Verhältnis ändert, heißt das nicht, daß nicht alle Ausgänge gleichzeitig HIGH sein können und somit die LEDS den vollen Gesamtstrom ziehen.

Damit hast Du natürlich recht, zumal es sehr wahrscheinlich ist, das sogar alle LEDs gleichzeitig angesteuert werden, da der PWM-Takt ja für alle gleich ist.
Mario.

Ich bin mir zwar nicht sicher, ob die PWM Signale phasengleich sind, aber im Zweifelsfall und bei über 50% ist es wahrscheinlich.

Grüße Uwe

uwefed:
@alex_e
Als Alternative zu einem Arduino MEGA würde ich Dir einen Arduino UNO mit einem (falls Du mehr als 16 LEDS betreiben willst oder mehreren) TLC5940 nennen.
Arduino Playground - TLC5940 (leider sind da einige Bilder abhanden gekommen.
Google Code Archive - Long-term storage for Google Code Project Hosting. (Hier gibt es die Bilder noch)
oder http://www.planetarduino.org/?p=3327
ein Breakout: http://www.watterott.com/de/TLC5940-Breakout?x96114=7280758bc1bbeb366aab401e4a0c7bd7

Grüße Uwe

Nabend und Vielen Dank für eure Antworten :slight_smile:

@Uwe:
Was wäre denn der Vorteil der Breakout-Variante bzw. wann würde man diese Version nehmen?

Könnt ihr mir vielleicht ein Set zum Stecken (Board, Kabel, etc.) empfehlen? Für den Dauerbetrieb ist so etwas sicher nicht geeignet und ich müsste wenn es denn mal verbaut wird Löten (lernen) oder?

Ihr habt mir schon sehr viel weiter geholfen.

Das Breakout TLC5940 zusammen mit einem Arduino UNO kostet weniger als ein ATmega. Der TLC hat 4096 PWM-Stufen, der ATmega nur 256. Der TLC begrenzt den Strom der LED aktiv, es braucht keine Vorwiderstände an den LED und jedes LED kann individuel auf seine Helligkeit tariert werden (unabhängig vom PWM Wert. Der LED-Strom wird mittels eines Widertands am TLC bestimmt.

Was meinst Du mit Set zum stecken? Sowas: Breadboard incl. Kabelset - Watterott electronic ?
Für Dauerbetrieb ist es nicht vorgesehen aber für schnelles Schaltung aufbauen und verändern.

Grüße Uwe

Genau soooo ein Set meinte ich XD

Ich wollte gerne den Vorteil von dem Breakout gegenüber dem normalen TLC (Bild: http://tronixstuff.files.wordpress.com/2010/07/tlc5940sss.jpg) verstehen :slight_smile:

Ich als Laie würde sagen: Es ist schon ein Board und ich erspare mir das verlöten auf einer Platine?

Viele Grüße,
Alex

Ist kein Unterschied. Zum experimentieren ist das Breakout einfacher; wenn Du eine Platine baust dann geht ein DIP wie auf dem Link besser und ist billiger. Im Endeffekt mit den versndspesen ist abzuwäägen ob das teuerer Breakout billiger ist weil Du auch noch andere Sachen bestellst und den TLC nicht bei einer anderen Quelle mit extra Versandspesen kaufen mußt.
Grüße Uwe

Hi,

ich wollte meinen freien Tag nutzen um die Sachen zu bestellen.

Welche Widerstände würde ich brauchen, wenn ich das Arduino Uno mit dem Breakout des TLC und den LEDs mit den Daten - Spannung: 3,2V - Max. 4,0V und 20mA Stromstärke - nutzen möchte?

Liebe Grüße und nochmals vielen Dank :slight_smile: Freue mich schon sehr auf mein Projekt :slight_smile:

Laut Beschreibung TLC um ca 20 mA zu haben 1x 2,2kOhm für den LED-Strom. Dieser ist aber schon auf dem Breakout enthalten:

Finally, the 2.2k resistor on the Iref pin sets the output current to 17.8mA but a parallel through-hole connection is provided for an additional resistor to increase the current if necessary.

Laut http://tlc5940arduino.googlecode.com/svn/wiki/images/breadboard-arduino-tlc5940.png
sollte ein 10kOhm Widerstand von Blank auf +5V geschaltet sein damit die LED nicht aufleuchten solande der Arduino resetiert bzw beim Einschalten im Bootloader steckt. Der Widerstandswert ist unkritish.

Grüße Uwe

Danke Uwe :slight_smile:

Muss ich weitere Transistoren für die LEDs verbauen um die Spannung zu gewährleisten?

Viele Grüße,

Hi,

die Sachen sind hoffentlich bald bei mir :slight_smile: Die Wartezeit habe ich genutzt um Arduino-Einsteiger-Videos zu gucken.
Zum zukünftigen Code habe ich mir schon Gedanken gemacht:

Aufgabe LED 1-10 sollen nacheinander mit Fade-Effekt eingeschaltet werden.
Testen konnte ich noch nicht, was denn wirklich passiert :grin: Einen Simulator habe ich nicht gefunden

#include "Tlc5940.h"

void setup()
{
  Tlc.init();
}

void loop()
{
  int led = 1;
  int fade = 0;
 
for (led; led < 11; led++){
      for (fade; fade < 4095; fade++) {
          Tlc.clear();
          Tlc.set(led, fade);
          Tlc.update();
          delay(5);
          }
}

}

Wird es so funktionieren? Vielleicht habt ihr ja sogar einen Simulator für mich?

Danke euch und Viele Grüße,

alex_e:
Danke Uwe :slight_smile:
Muss ich weitere Transistoren für die LEDs verbauen um die Spannung zu gewährleisten?
Viele Grüße,

Von welcher Schaltung reden wir jetzt?
Bei dieser Schaltung braucht es keine. Der TLC steuert die LED an und begrenzt den Strom der LEDs.

Grüße Uwe

Nabend Uwe,

die Frage hatte sich bereit erledigt - Die Antwort die du darauf gepostet hattest, hatte ich überlesen :smiley:

Sollte ich für den Code ggf. "tlc_addFade" nutzen? Einbindung der tlc_fades.h natürlich vorausgesetzt...

Viele Grüße,

alex_e:
Sollte ich für den Code ggf. "tlc_addFade" nutzen? Einbindung der tlc_fades.h natürlich vorausgesetzt...

Du stellst schwierige Fragen. :wink: :wink: :wink:
Ich kann Dir nicht antworten, da ich weder die eine, noch die andere Bibiothek je benutzt habe. Du mußt es selbst ausprobieren.

Grüße Uwe