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.
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
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.
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...
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.
> 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.
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.
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.
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.
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.
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.
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.
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.
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...
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
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.
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.
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
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.
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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.