Forum: Mikrocontroller und Digitale Elektronik Welchen uC als ws2812b i2c Controller?


von Markus J. (dmant)


Lesenswert?

Hallo.

Welcher uC eignet sich am besten als ws2812b Controller den man per i2c 
ansteuern und natürlich beschreiben kann.

Bisher habe ich das immer mit einem atmega8 16au gemacht..

Versorgung, 16mhz Quarz, i2c und ein pin für die LEDs... Da ist ein 
atmega echt eine Verschwendung...

Was wäre da eine gute Alternative?

von Andreas B. (bitverdreher)


Lesenswert?

Tiny13 und den Quarz braucht es dafür auch nicht.

: Bearbeitet durch User
von Herman Kokoschka (Gast)


Lesenswert?

Ich habe sowas auch schon etliche Male mit einem Tiny13 gemacht.
Kommt natürlich auch darauf an, wieviele WS-LED Du verwenden willst, da 
der Speicher im Tiny13 etwas knapp ist.

Geht natürlich auch mit allen anderen "kleinen" AVR, meine ASM-Routinen 
schaffen mit 8Mhz locker das nötige Timing der WS2812.

von Frank K. (fchk)


Lesenswert?

Schau Dir mal diese AppNote an:

http://ww1.microchip.com/downloads/en/appnotes/00001606a.pdf

Inzwischen haben viele, auch kleine PICs CLC-Blöcke, mit denen man sowas 
machen kann. Damit ist die ganze Signalformerzeugung auf eine ziemlich 
geniale Art in Hardware ausgelagert worden.

fchk

von Ingo S. (schicki)


Lesenswert?

Hallo,

da kannst eigentlich jeden kleinen MC mit I²C-Bus verwenden. Die 
Empfehlung von Frank klingt super.

Ingo

von c-hater (Gast)


Lesenswert?

Markus J. schrieb:

> Was wäre da eine gute Alternative?

Hängt im Wesentlichen nur davon ab, wie viele LEDs du zu steuern hast, 
denn davon hängt die Menge an RAM ab, die du als Framebuffer brauchst, 
halt 3 Byte pro LED.

Wenn man Glitches durch das Schreiben über I2C vermeiden will, kommen 
dann nochmal 3 Byte als Buffer hinzu, so dass zumindest pro LED 
konsistente Daten gewährleistet sind.

Werden hingegen über die ganze Kette hinweg konsistente Daten benötigt 
(Lauf- und Blendeffekte o.ä.), dann braucht man sogar 6 Byte pro LED, 
denn dann muss der gesamte Framebuffer "double buffered" sein.

Oder man muß halt die Effekte im LED-Controller selber umsetzen, dann 
bleibt's bei den 3 Byte pro LED, aber dafür ist man dann natürlich auf 
die Effekte beschränkt, die es halt im Controller gibt.

von pegel (Gast)


Lesenswert?

Vielleicht ein schöner Grund STM32 zu probieren?

In dem Fall STM32G031 mit 8k RAM.

von Joachim B. (jar)


Lesenswert?

Markus J. schrieb:
> Versorgung, 16mhz Quarz, i2c und ein pin für die LEDs... Da ist ein
> atmega echt eine Verschwendung...

finde ich nicht, deswegen ATmega1284p mit 16KB SRAM

c-hater schrieb:
> Hängt im Wesentlichen nur davon ab, wie viele LEDs du zu steuern hast,
> denn davon hängt die Menge an RAM ab, die du als Framebuffer brauchst,
> halt 3 Byte pro LED.

s.o.

mit dem ESP32 und Pegelwandler gibts zumindest keinen RAM Mangel, aber 
noch besser gefällt mir natürlich:

pegel schrieb:
> Vielleicht ein schöner Grund STM32 zu probieren?
> In dem Fall STM32G031 mit 8k RAM.

der per DMA auch mehr Kanäle parallel rausschicken kann, aber 8K ist 
trotzdem weniger als 16KB vom 1284p
Es soll größere STM geben?

Mit meinem 1284p krankt es bei 400 LEDs nur das sie kaum noch in mein 
10ms Raster passen, in meiner alten Wordclock mit nano328p und 114 LEDs 
stören die 3ms nicht.

: Bearbeitet durch User
von Johannes S. (Gast)


Lesenswert?

LPC824 ist auch nicht schlecht, hat auch 8 k RAM und kann das LED Timing 
mit SPI/Timer generieren.

von pegel (Gast)


Lesenswert?

Joachim B. schrieb:
> Es soll größere STM geben?

Für diesen Fall reicht aber ein SO8. ;)

von Joachim B. (jar)


Lesenswert?

pegel schrieb:
> Für diesen Fall reicht aber ein SO8. ;)

stimmt welcher hat mit 8-Pins mehr Ports für 8-Kanal DMA und mehr RAM?

Der TO dachte so an 2000 WS LEDs, glaube ich zumindest, oder liest du 
was anderes?

von pegel (Gast)


Lesenswert?

Die Möglichkeit hätte er.

von Joachim B. (jar)


Lesenswert?

pegel schrieb:
> Die Möglichkeit hätte er.

sowie Hamster statt Toilettenpapier solange sie einen nicht in den Popo 
beissen?

Mit 8K sind immerhin 2K LEDs möglich, ob das Timing aufrecht erhalten 
über einen Port für 2000 LED möglich ist oder ob die Framerate für 
seriell reicht ist eine andere Baustelle.

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Wie war das? 60mA bei voller Helligkeit pro WS?
Mal 2000, oha.

Dann würde ich den RAM doch lieber für schöne Effekte nutzen.

von Markus J. (dmant)


Lesenswert?

Also ich habe ja einen ATMega128 als Hauptcontroller. Aber je nachdem 
was der macht.. ja.. hat man hier nen interrupt.. da nen nop und ja.. 
dann fing ich an einfach jedesmal einen atmega8 dafür zu nutzen. Habe 
die Routinen, I2C ja alles fertig.. Flashen und gut.

Aber ja.. ich dachte halt auch an Platz auf der Platine.

Aber wie meint ihr das ohne Quarz?

Ich habe bisher keine ws2812b ohne Quarz getimet bekommen.

Super wäre echt ein Chip der das "mehrfach" mal "eben so" macht..

Habe aber bisher nur ATMegas und ja dann direkt Raspberrys genommen.

Ist das viel zu "lernen"?

Wenn wir schon bei Chips... Gibts auch einen direkt mit Logic Anaylzer? 
Software FFT ist schon hart.. auch für einen Raspberry..

Aber das ist offtopic.. das nur so nebenbei...

Super wäre echt so ein Chip wo ich z.b. WB2812b mit paar mal so 100 x 
pro Reihe ansteuern könnte.. oder

Dem ich dann per I2C sage => Reihe A Modus 3 <= oder => Reihe C Modus 1 
<= und er dann das ganze macht unabhängig vom Host...

Vielleicht noch ein paar DS18S20 an einzelnen Pins (damit man nicht die 
Adresse auslesen mus).. so. 10 Stück auch noch nebenbei mit macht und 
mir alle daten per I2C bereit hält...

von Markus J. (dmant)


Lesenswert?

Achso..

Also es werden rund 800 LEDs... Strom ist auch kein Problem.. grob 4A.. 
Das ist ja nix..

Allerdings werden nur knapp 400 LEDs angesprochen.. da es sich um 2 x 
400 LEDs handelt die ich einfach parallel angeschlossen habe..

von Joachim B. (jar)


Lesenswert?

pegel schrieb:
> Wie war das? 60mA bei voller Helligkeit pro WS?
> Mal 2000, oha.

ist genauso lösbar in Segmente a 36 LEDs für Power mit stepdown.
Die Zuleitungen bleiben dann im Rahmen und ob der Stepdown 20V oder 24V 
bekommt ist dem auch egal, es ist sogar egal wenn an jedem Segment ein 
eigenes Netzteil zu 5V hängt. 230V~ findet sich in Abständen leichter 
als 5V oder 24V mit etlichen Ampere über weite Strecken zu jagen.
Ist also genauso sinnvoll wie 2000 LEDs seriell aus einem Port bedienen 
was du ja meintest:

pegel schrieb:
> Die Möglichkeit hätte er.

Ich tippe eher auf 8-Kanal DMA als sinnvoller, die Powerproblematik ist 
jedenfalls segmentiert leichter in den Griff zu bekommen als das Timing 
einzuhalten.

Mittlerweile gibt es ja 12V WS die weniger Strombedarf haben.

: Bearbeitet durch User
von Bob (Gast)


Lesenswert?

Markus J. schrieb:
> Also es werden rund 800 LEDs... Strom ist auch kein Problem.. grob 4A..

Sind 5mA nicht etwas sehr dünn für eine RGB LED?


Warum tut man sich eigentlich überhaupt WS2812B an?
Einfach nur weil es "jeder" macht, da keiner was besseres kennt?

APA102 gibt es auch schon seit Jahren, in verschiedenen Versionen.

Mir "fehlt" da bestenfalls mal eine RGBW mit den Daten und dem 
Interface, gibt es vermutlich sogar, nur drüber "gestolpert" bin ich 
noch nicht.

von Joachim B. (jar)


Lesenswert?

Markus J. schrieb:
> Also es werden rund 800 LEDs...

oh schon eine weitere Salamischeibe?

Markus J. schrieb:
> Strom ist auch kein Problem.. grob 4A..
> Das ist ja nix..

hmm ich komme bei 800 * 60mA für Spitzenweiss auf 48A, die nächste 
Salamischeibe wird gerade geschnitten.....

Bob schrieb:
> Sind 5mA nicht etwas sehr dünn für eine RGB LED?

wer die so dunkel betreiben möchte und das in den Daten sicherstellen 
kann, aber in einem Stripe mit 400 LEDs und einer Einspeisung a 2A 
könnte das evtl. klappen, fragt sich nur nach der Bestückung, der Weg 
bei 30 LEDs/m ist ja nun mal viel länger als bei 144 LEDs/m für 400 LEDs 
pro Stripe!

Die nächste Salamischeibe ist schon vorbereitet.

Warum kommen wichtige Informationen immer häppchenweise?

von Markus J. (dmant)


Lesenswert?

Ich kann darf wie auch immer nicht über diese LEDs reden... Aber...

Es sind jeweils rund 400 LEDs FAST direkt aneinander. Keine stripes oder 
ähnliches.

Und diese sind zweifach einfach parallel angeschlossen.

Macht gesagt rund 800 LEDs.

Ja Rechenfehler.

800 LEDs mal 48000mA also 48A

Ja auch das ist kein Problem.

von Joachim B. (jar)


Lesenswert?

Markus J. schrieb:
> Ich kann darf wie auch immer nicht über diese LEDs reden...

machst du doch trotzdem

Markus J. schrieb:
> Es sind jeweils rund 400 LEDs FAST direkt aneinander. Keine stripes oder
> ähnliches.
> Und diese sind zweifach einfach parallel angeschlossen.

also 2x 400 denke ich oder 2x 200? dein Text wird immer 
unverständlicher!

Also 400 LEDs angenommen die 2x 400 bekommen dieselben Daten aus einem 
PIN brauchen also 1200 Byte SRAM für die RGB Daten und benötigen 30µs 
pro Data = 12ms zum Rausschieben, also ein 328p mit 2K SRAM reicht, bei 
kleineren µC schau einfach auf das SRAM.

von Markus J. (dmant)


Lesenswert?

Es gibt auch so kleine taktgeber... So wie so 1206 bauteile..

Sind das auch quarze? Kann man die auch nutzen?

von Hochism (Gast)


Lesenswert?

> Ich kann darf wie auch immer nicht über diese LEDs reden ...

Hätte eine prima Lösung, leider darf auch ich nicht darüber 
reden/schreiben. Schade. Oder?

von Frank K. (fchk)


Lesenswert?

Markus J. schrieb:
> Es gibt auch so kleine taktgeber... So wie so 1206 bauteile..
>
> Sind das auch quarze? Kann man die auch nutzen?

Es gibt sie als Quarz:
https://www.reichelt.de/keramik-smd-quarz-2-5x3-2x0-7mm-16-0-mhz-16-000000-mt-p101037.html?&trstct=pol_1&nbc=1

Der Quarzkristall hängt zwischen Pin 1 (Links unten) und 3 (rechts 
oben). Du darfst ihn gerne um 180° drehen.

Und es gibt sie als Oszillatoren:
https://www.reichelt.de/16-0mhz-quarzoszillator-keramik-smd-xo53-xo53-16-00000-p85031.html?&trstct=pol_0&nbc=1

Oszillatoren sind Quarz plus Taktgeber-IC in einem Gehäuse.
Übliche Belegung:
1: Enable (link unten)
2: GND
3: Ausgang (rechts oben)
4: VCC (je nach Type 1.8V bis 3.3V, 5V gibts nur bei den großen Kannen 
mit Pins)

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.