Hallo Leute!
Sonst bin ich normalerweise regelmäßig dabei, mir hier die Forenbeiträge durchzulesen, heute habe ich allerdings selber eine Frage.
Ich beschäftige mich aktuell damit, einen recht umfangreichen RGB-Controller zu bauen. Angefangen habe ich mit dem Arduino Uno, allerdings hat nach einiger Zeit der Flash-Speicher nicht mehr ausgereicht. Daher habe ich mir den Arduino Due besorgt (weil neben dem Speicher auch die Ein-und Ausgänge knapp wurden), welcher heute eingetroffen ist. Natürlich habe ich mein Programm direkt ausprobieren wollen, dabei ist mir eine Sache aufgefallen:
Auf dem Uno habe ich: digitalWrite(pin,LOW) benutzt, um eine LED abzuschalten. Der Pin wurde zuvor als OUTPUT deklariert und unterstützte PWM. Bei dem DUE ist es ebenfalls ein Pin mit PWM. Allerdings bleibt an dieser Stelle der Befehl: digitalWrite(pin,LOW) ohne Funktion. Alternativ habe ich analogWrite(pin,0) verwendet. Trotzdem verwundert es mich ein wenig. Woran könnte das denn liegen? Der DUE verfügt über eine ganze Reihe digitaler I/O Schnittstellen ohne PWM. Hier funktioniert die Funktion digitalWrite(pin,LOW) problemlos. Liegt es an den Pins mit bzw. ohne PWM? Warum hat es dann allerdings beim UNO funktioniert?
Vorsicht mit LEDs direkt am Due. Die Pins sind wesentlich empfindlicher und können nicht so viel Strom. Es gibt zwei Gruppen:
1.) high current: 15mA source, 9mA sink
2.) low current: 3mA source, 6mA sink
Das ging aber schnell mit Antworten und vielen Dank für die Übersicht!
Mit diesem ganzen 3,3V musste ich sowieso schon einiges ändern.. aber alles halb so wild. Trotzdem interessant zu wissen, dass es High und Low-Current Pins gibt. Beim Uno waren es 40mA pro Ausgang, wenn ich mich nicht irre?
Im Moment hängt nur eine RGB mit Vorwiderstand an 3 PWM Ausgängen. Natürlich dunkler als beim Uno, aber ist ja aktuell auch nur zu Testzwecken. Später werde ich das mit N-FET Transistoren machen..
Aber gibts noch eine Idee zum digitalWrite und analogWrite?
Die Ausgänge des Due geben (außer weniger Strom) auch weniger Spannung. Mit 3,3V sind MOSFET noch schwieriger zu schalten. Es könnte sein daß Du für jeden MOSFET einen MOSFET-Treiber brauchst.
Ich rate Dir statt des Due einen Mega2560 zu nehmen.
Bei den AVRs (Uno) sind das 40mA pro Pin. Jedoch dürfen maximal pro Port(zB. PortD -> Arduino Pin 0 - 7) 200mA genutzt werden.
Die RGBs solltest du am besten direkt mit Transistoren ansteuern. Blaue Leds an einen 3V3 Pin ist zuwenig. Es gibt auch spezielle ICs, bei denen du nur noch 1 Pin für viele RGB Leds brauchst (zB. WS2812/WS2812B).
uwefed:
Die Ausgänge des Due geben (außer weniger Strom) auch weniger Spannung. Mit 3,3V sind MOSFET noch schwieriger zu schalten. Es könnte sein daß Du für jeden MOSFET einen MOSFET-Treiber brauchst.
Es kommt darauf wie viel Strom man schalten will. Der IRLZ44 z.B. fängt schon bei 1-2V an zu leiten. Und macht bei 3V auch schon 2A. Der Widerstand ist natürlich höher, aber das spielt bei geringem Strom keine so große Rolle. Bei ein paar mA ist es völlig egal.
Vielen Dank nochmal für eure Antworten.
Das schalten der RGB's wird nachher (wenn alles so klappt wie ich es mir vorstelle), mit einem UNO geschehen. Der DUE soll quasi nur als Steuerzentrale dienen und per RF die Signale an den UNO senden. Somit soll der DUE also ein Wifi (für Webserver) sowie ein RF-Modul bekommen. Ich hoffe es klappt überhaupt, denn bisher hab ich mich damit noch nicht großartig beschäftigt. Aber so war zumindest die Grundidee.
Aktuell steuer ich meine test-RGB via Infrarot-Fernbedienung und lasse mir die Farbe (mit jeweiligen Farbwert) auf einem LCD-Display anzeigen. Dafür benutze ich die fertigen LCD und IRremote librarys. Für die Farbgestaltung habe ich eine eigene Bibliothek erstellt, welche es ermöglicht die Farben von RGB in HSV bzw. umgekehrt umzurechnen und auszugeben.
Mit dem Display ist eigentlich nur Spielerei (bin ja auch noch Anfänger, aber ich wollte das endlich mal irgendwo mit einbauen), aber vielleicht könnte man das tatsächlich durch ein Touch TFT ersetzen. Dann hätte der DUE neben Wifi und RF noch ein weiteres Shield. Ist das überhaupt möglich?
Edit: achso, aber was ist mit der eigentlichen Frage? Warum lässt sich ein PWM Pin des DUE nicht mit digitalWrite(pin,LOW) abschalten?