Forum: Mikrocontroller und Digitale Elektronik Anzahl PWM Ausgänge zu Anzahl RGB LEDs


von Adam P. (adamap)


Lesenswert?

Hallo zusammen,

für meine neue kleine "Spielerei" benötige ich PWM um 3 RGB LEDs 
anzusteuern.

Info: PWM & Multiplexen hab ich zumindest in der Praxis noch nie 
genutzt.

Verfügbare µC:
- STM32F303K8 Nucleo
- Atmel SAM4E / SAM4L
- ATtiny2313  ATmega32  ATmega1284P

Nun die Grundsätzliche Frage:
Macht es sinn einen µC zu wählen der soviele (Timer) PWM Ausgänge hat, 
dass ich alle 9 (3 LED x 3 Farben) direkt ansteuern kann oder reicht es 
z.B. ein ATmega32 / ATmega1284P zu nehmen.

Ich würde schon gerne (mindestens) 16-bit Timer nutzen, bzgl. Auflösung.

Die ATmega haben halt am 16-bit Timer 2x PWM - somit kann ich nicht alle 
3 Farben direkt ansprechen und dann nur das Multiplexen der 3 LEDs 
zusätzlich.

Müsste man in diesem Fall nur einen PWM Ausgang nutzen und den dann für 
die 3 Farben und 3 LEDs multiplexen?

Bin für alle Vorschläge dankbar.

von Wolfgang (Gast)


Lesenswert?

Adam P. schrieb:
> Macht es sinn einen µC zu wählen der soviele (Timer) PWM Ausgänge hat,
> dass ich alle 9 (3 LED x 3 Farben) direkt ansteuern kann oder reicht es
> z.B. ein ATmega32 / ATmega1284P zu nehmen.

Ich würde einen ATmega328 nehmen und mich bei PWM auf 12 Bit 
beschränken. Bei 16 Bit Auflösung musst du schon mit mehreren MHz 
takten, damit es nicht flackert. 16 Kanäle mit 12 Bit PWM erledigt z.B. 
ein PCA9685

von Adam P. (adamap)


Lesenswert?

Wolfgang schrieb:
> und mich bei PWM auf 12 Bit beschränken

Ja, mir gings darum nicht nur 8-bit zu nutzen, das wäre zu abgehackt.

Und warum dann den 328, wenn es über I2C läuft.

von Mark W. (kram) Benutzerseite


Lesenswert?

Warum nicht einfach digitale RGB LEDs benutzen, die den PWM kram schon 
integriert haben. Braucht nur ein oder zwei pins. Z. Bsp. APA102-2020 
oder WS2812B...

von Wolfgang (Gast)


Lesenswert?

Adam P. schrieb:
> Und warum dann den 328, wenn es über I2C läuft.

Weil ich den hier funktionsfähig auf kleinen, ausgesprochen 
kostengnstigen Platinchen liegen habe ;-)

Mark W. schrieb:
> Warum nicht einfach digitale RGB LEDs benutzen, ... Z. Bsp. APA102-2020
> oder WS2812B...

Die WS2812B können genau 8 Bit pro Kanal, i.e. sind weit entfernt von 
den geforderten 16. Die APA102-2020 mit ihren 5 Bit für die 
Grundhelligkeit und den 8 Bit für die RGB-Kanäle sind da deutlich 
besser, wenn es um feine Farbabstufung bei niedriger Helligkeit geht.

von Mark W. (kram) Benutzerseite


Lesenswert?

> Mark W. schrieb:
>> Warum nicht einfach digitale RGB LEDs benutzen, ... Z. Bsp. APA102-2020
>> oder WS2812B...
>
> Die WS2812B können genau 8 Bit pro Kanal, i.e. sind weit entfernt von
> den geforderten 16. Die APA102-2020 mit ihren 5 Bit für die
> Grundhelligkeit und den 8 Bit für die RGB-Kanäle sind da deutlich
> besser, wenn es um feine Farbabstufung bei niedriger Helligkeit geht.
Ok, das hatte ich etwas uebersehen, wenn er 16 Bit Aufloesung pro Farbe 
braucht, dann gehen die digitalen LEDs nicht.

von Wolfgang (Gast)


Lesenswert?

Mark W. schrieb:
> Ok, das hatte ich etwas uebersehen, wenn er 16 Bit Aufloesung pro Farbe
> braucht, dann gehen die digitalen LEDs nicht.

Warum liest du nicht einfach den Eröffnungs-Post, wenn du dich zu dem 
Problem äußern willst?

Adam P. schrieb:
> Ich würde schon gerne (mindestens) 16-bit Timer nutzen, bzgl. Auflösung.

von Mark W. (kram) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Mark W. schrieb:
>> Ok, das hatte ich etwas uebersehen, wenn er 16 Bit Aufloesung pro Farbe
>> braucht, dann gehen die digitalen LEDs nicht.
>
> Warum liest du nicht einfach den Eröffnungs-Post, wenn du dich zu dem
> Problem äußern willst?
Hab ich doch. :-)
Das war nur eine Vorschlag, sich nach digitalen LEDs umzusehen. Wenns 
absolut nicht reicht, macht er halt 16 bit wie er es vor hatte.

von Adam P. (adamap)


Lesenswert?

Danke schon mal,
also die 16bit sind nicht unbedingt notwendig, 12 wären auch ok.

jedoch bringt mich das grad eher ins grübeln, wenn es die digitalen 
schon fertig gibt und die dann halt nur 8bit können.

damit ihr es euch besser vorstellen könnt,
projekt:
bei meiner tastatur will ich die 3 led durch rgb leds ersetzen. diese 
können in der farbe durch ein pc programm eingestellt werden, 
kommunikation via bluetooth.

habe halt noch so led stripes hier und hätte da einfach die leds 
runtergelötet.

aber vllt sind die digitalen die bessere lösung.

von Wolfgang (Gast)


Lesenswert?

Adam P. schrieb:
> habe halt noch so led stripes hier und hätte da einfach die leds
> runtergelötet.

Wenn das LED Stripes sind, mit denen sich Lauflichter und wandernde 
Farbverläufe erzeugen lassen, sind das "digitale" LEDs, i.e. welche mit 
integriertem Controller. Dann kannst du die direkt verwenden.

von Manfred (Gast)


Lesenswert?

Mark W. schrieb:
> wenn er 16 Bit Aufloesung pro Farbe braucht

... liegt die Spezifikation fern jeglicher Realität. Die klassischen 
16_Millionen Farben am PC per VGA erreicht man mit 8 Bit pro Farbe (256 
x 256 x 256). Feiner abgestuft ist "weil ich es kann", der Mensch wird 
das jedenfalls nicht sehen.

von Bla (Gast)


Lesenswert?

Manfred schrieb:
> Feiner abgestuft ist "weil ich es kann", der Mensch wird das jedenfalls
> nicht sehen.

Na das ist aber auch falsch. Du brauchst schon eine höhere PWM Auflösung 
um den Strom entsprechend fein einstellen zu können, das da am Ende 256 
Farben bei raus kommen.

von Wolfgang (Gast)


Lesenswert?

Manfred schrieb:
> Feiner abgestuft ist "weil ich es kann", der Mensch wird
> das jedenfalls nicht sehen.

Der Mensch sieht die Abstufungen genau dann, wenn bei geringer 
Helligkeit, wo nur noch wenige der 8 Bit genutzt werden, 
Helligkeitsverläufe oder Farbübergänge erzeugt werden.
Nimm 1/64 der Maximalhelligkeit. Dann stehen pro RGB-Kanal noch 2 Bit 
i.e. vier Helligkeitsstufen zur Verfügung. Damit werden aus deinen 
16-Mio Farben genau noch 64 Farbwerte. Die soll der Mensch nicht 
auseinander halten können? Ich glaube, du unterschätzt die 
Farbwahrnehmung des Menschen.

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

hier eine mit Software-PWM elegant gelöste Variante:

Beitrag "noch ein AVR Moodlight"

mfG

von Adam P. (adamap)


Lesenswert?

Also morgen bekomme ich 3 LED mit Controller, werde mir die mal 
anschauen und testen - dann sehe ich ja ob die ausreichen.

Sonst teste ich mal die Idee mit der Soft-PWM und wenn das auch nicht 
das Wahre ist, dann muss halt ein µC mit genug 16bit Timern her.

Vielen dank für die Vorschläge, werde berichten...

von Adam P. (adamap)


Lesenswert?

Ich habe nun 3x WS2812B LED.

Grundsätzlich stellt sich mir die Frage bzgl. der Datenübernahme.

Der Aufbau ist ja wie folgt:

        LED1           LED2           LED3
    -----------    -----------    -----------
 -> | DIN   DO| -> | DIN   DO| -> | DIN   DO|
    -----------    -----------    -----------

Wenn ich nun die 2te LED aktualisieren möchte, dann schiebe ich ja die 
Daten durch die erste LED, woran erkennt diese, dass sie diesen Wert 
nicht annehmen soll.

Habe die Dokus, Beispiele, Grafiken (Datenfluss) nur mal grob 
überflogen, werde mich aber noch genauer einlesen.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Adam P. schrieb:
> Wenn ich nun die 2te LED aktualisieren möchte, dann schiebe ich ja die
> Daten durch die erste LED, woran erkennt diese, dass sie diesen Wert
> nicht annehmen soll.

Die erste LED nimmt ihr Datenpaket und reicht den Rest weiter, bis bei 
der letzten LED nur noch ein Paket ankommt (im Datenblatt unten auf der 
4ten Seite). Du aktualisierst immer alle LEDs.

von Adam P. (adamap)


Angehängte Dateien:

Lesenswert?

Update:

Habe nun die WS2812B mal getestet und für mein Zweck, einfach nur "easy" 
und perfekt.

[Danke für den Tipp @Mark W. (kram)]

Werde nun mal die PC Software schreiben und dann per (Farbwähler) wie 
aus Paint bekannt, versuchen je 10ms die Farbe zu aktualisieren, bei 
neuer Farbwahl.

Anbei die Tests...somit kann ich beruhigt den kleinen ATtiny nehmen und 
der passt super in den "Freiraum" der Tastatur.

von Adam P. (adamap)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

kleines Projekt Update:

(an alle die es noch verfolgen möchten)

- die 5V der Standard-LED musste ich per zusätzlicher Schaltung auf 3,3V 
reduzieren um mit meinem µC den LED Status lesen zu können.
Da kein Level-Shifter zur Hand war, kleine Transistorschaltung.
- Hardwareverdrahtung ist nun für die ersten Test bereit (Bluetooth 
Anbindung fehlt noch)
- Ersten Tests erfolgen direkt per USB<->RS232(UART)

Anbei der Aufbau als Bild(er).

Habe noch ein altes Board mit einem ATmega328P gefunden...passt 
wunderbar.
PC-Software ist noch ausbaufähig :)

Gruß Adam

von Mark W. (kram) Benutzerseite


Lesenswert?

Klasse, Glueckwunsch, dass es funktioniert.

von c-hater (Gast)


Lesenswert?

Adam P. schrieb:

> Nun die Grundsätzliche Frage:
> Macht es sinn einen µC zu wählen der soviele (Timer) PWM Ausgänge hat,
> dass ich alle 9 (3 LED x 3 Farben) direkt ansteuern kann oder reicht es
> z.B. ein ATmega32 / ATmega1284P zu nehmen.

Falsche Fragestellung. Ein Mega1284P hat vier 16Bit-PWM-Ausgänge, da 
er über zwei 16Bit Timer verfügt. Dementsprechend reicht es, einfach den 
zu nehmen.

Wenn er allerdings nur die paar LEDs antreiben soll, wäre er deutlich 
unterfordert. Da würde man eher sowas wie einen Tiny441 nehmen, der 
ebenfalls über 2 16Bit Timer verfügt.

> Müsste man in diesem Fall nur einen PWM Ausgang nutzen und den dann für
> die 3 Farben und 3 LEDs multiplexen?

Nö. Man kann auch einfach die ganze Sache in Software abwickeln, also 
ohne Hardwareunterstützung (abgesehen von dem taktgebenden Timer). Damit 
kann man sogar sämtliche IO-Pins eines Mega16 oder 32 wackeln lassen. 
Mit bis zu 18Bit Auflösung.

Naja, dann flimmert es bei sehr geringen Helligkeiten schon ein wenig.

von Adam P. (adamap)


Lesenswert?

Hallo zusammen,

ich hätte noch eine Frage:

Wolfgang schrieb:
> Die erste LED nimmt ihr Datenpaket und reicht den Rest weiter, bis bei
> der letzten LED nur noch ein Paket ankommt (im Datenblatt unten auf der
> 4ten Seite). Du aktualisierst immer alle LEDs.

Angenommen ich möchte von 3 LED nur die erste bzw. zweite aktualisieren:
Wäre es dann "performance" technisch nicht möglich nur ein bzw. zwei 
pakete zu senden...oder kommt dann die dritte durcheinander, eigentlich 
dürfte sie davon nichts mitbekommen...?!

Das wäre eine Art: bis zu der max. LED schieben die aktualisiert werden 
soll.

Hoffe Ihr versteht mein Gedankengang.
Ich wollte erst mal nachfragen ob das schon jmnd versucht hat, bevor ich 
den ASM Code zerleg und es versuche.

...sonst, sieht alles TOP aus. Danke für eure Ideen und Anregungen :)

Gruß

von Adam P. (adamap)


Angehängte Dateien:

Lesenswert?

Projekt ist somit erstmal abgeschlossen,

vielen Dank an alle die Ihre Ideen beigesteuert haben.

Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.