[Diskussion beendet] AVR schon mal ausgelastet?

Servus!

Wenn man sich nach anderen MCUs neben dem 328p umsieht bekommt man manchmal auch Sätze wie: "Der XXX taktet auf XXX Mhz und ist so schnell!"

Aber (& wann) braucht man diese Geschwindigkeit überhaupt? Neben steht ein Nano der ne 256 Punkte FFT macht, die Daten etwas analysiert und auf 50 WS2812B anzeigt. Jeder durchlauf schaltet einen Pin ein und kurz danach wieder aus, mit einem Multimeter auf HZ gestellt bekomme ich ~59Hz raus, also 59 Fps. Hätte ich nie erwartet! Hammer!

Wofür braucht man nun viel schnellere und meist 32bit MCUs? Die braucht man doch meistens, wenn man zu wenig Speicher frei hat oder kein WLAN oder irgendsowas.

Hatte jemand schonmal ein Projekt, für das der 328p zu langsam war? Trotz auf Geschwindigkeit optimiertem Code?

Freue mich auf Antworten!

Verzweifler:
Hatte jemand schonmal ein Projekt, für das der 328p zu langsam war? Trotz auf Geschwindigkeit optimiertem Code?

NB: Ups, da hat sich das Forum wohl verschluckt. Ein Fullquote ohne eigenen Text mache ich nicht.

Wenn man geschickt programmiert, kann man auch mit einem lahmarschigen Arduino sehr viel anfangen. Die Grenzen, an die ich bislang gestoßen bin, konnte ich durch passende Maßnahmen jedesmal zu meinem Vorteil verschieben.

Gruß

Gregor

PS: Ein echtes Problem bereitet eher das ziemlich knappe RAM. Aber auch da gilt: Kreativität kann vieles wettmachen.

WS2812B wäre schon ein einfacher weg den AVR auszulasten. Beim Senden kann der Prozessor nichts anderes mehr machen und Interrupts sind gesperrt.

Ich habe mal 12 Animationen für 75 Neopixel auf nen Attiny85 gequetscht. Inklusive ein paar Bedienmöglichkeiten und Farbpalette. Dur nur 512 Bytes Ram sind die Animationen relativ simpel.

Thema WS2812B:
Durch saubere Programmierung des Programms, also ungefähr so:

void loop(){

knopf_auslesen();

bild_gernerieren(); //Nur ein Bild!

FastLED.show(); //Nur hier FastLED.show();

}

So braucht man keine Interrupts.

Desweiteren kann man bei FastLED interrupts erlauben, dadurch schlägt eben das Anzeigen des Bilds fehl, aber wir rauschen je nach Anzahl leds und aufwändigkeit der berechnungen drum rum eh so schnell durch das Programm, sodass man ein fehlendes Frame nicht wirklich bemerken sollte.
Habs allerdings noch nicht getestet, habs noch nie gebraucht.

Die LED bespaßung kann an einem 328p schon Grenzen zeigen, besonders weil der RAM knapp wird. Man kann zwar gerne 600 Leds anschließen, aber dann hat man nur noch simple Animationen machen. Da würde ich ganz klar zu den schnelleren MCUs raten. Gut zu wissen FastLED unterstützt bei einigen MCUs Paralellen Output.

Sobald FastLED.show( ) ausgeführt wird, kann dein Controller keine Befehle mehr entgegen nehmen. Pro WS2812B, die angesteuert, brauchst du ca eine ms. Jenachdem, wie sehr sich FastLed an die Timings des Datenblatts hält. Einzelne Bildaussetzer, wenn auch nur kurz, würde ich niemals ignorieren. Sondern darauf achten, dass es nicht passiert.

Wenn das Senden 20-50ms dauert, könnten extern ankommende Signale schon nicht mehr korrekt eingelesen werden.

Sehe wenige Gründe, warum der WS2812B noch so beliebt ist. GIbt bereits deutlich schnellere ICs, die kein Bitbanging benötigen.

24 Bit bei 800kHz sind 30µS nicht einige mS pro WS2812B.

Grüße Uwe

Verzweifler:
Wofür braucht man nun viel schnellere und meist 32bit MCUs?

Mit den WS2812 bist Du etwas auf dem Holzweg, da die Übertragungsfrequenz fest ist. Da begrenzt hauptsächlich der Speicher. Kaufe Dir mal ein paar APA102, schließe sie an Hardware-SPI an, und schon erhältst Du mehr Fps. An die Grenzen der APA102-Hardware gelange ich mit einem Teensy 3.2. Selbstverständlich hängt auch viel von der Komplexität der Animationsberechnung ab.

Bei ganzzahligen Berechnungen von mehr als einem Byte muß ein AVR dies in mehreren Schritten machen. Wenn die Recheneinheit gleich mit 32 Bits arbeitet, geht dies natürlich schneller.

Fließkommaberechnungen sind für AVRs zeitaufwendig, da sie eigentlich nur mit ganzen Zahlen rechnen können. Teensy 3.5 und 3.6 haben eine Fließkommaeinheit, deren Berechnungen deutlich schneller sein dürften. Praktische Erfahrungen habe ich leider noch nicht.

Displays, die nicht Nextion heißen, benötigen gerne viel Speicher. Manche Fontdefinitionen überfordern einen UNO/Nano.

Ich stimme Dir aber zu: Mit geschickter Programmierung kann man mit einem AVR eine Menge machen :slight_smile:

Die Entwickler von FastLED haben schon 50Mbit durch (ich glaube) APA102C oder so gejagt.

WS2812B sind eben die günstigsten...

@agmue: Stichwort lautet Paralell Output, also man teilt seine WS2812Bs auf und hängst sie an mehrere Pins, die gleichzeitig senden, dadurch lässt sich enorm Zeit sparen.

Damit hier kein Krieg ausbricht: Der Schlussstrich!


Unterschätzt die Möglichkeiten der "lahmarschigen" 8-bit Atmegas nicht, der kann viel mehr als man denkt!

Verzweifler:
Damit hier kein Krieg ausbricht: Der Schlussstrich!


Meiner ist länger :stuck_out_tongue:


SCNR

Gregor

Und ich kann nicht verstehen, warum man eine interessante Diskussion beenden muss.-
Wenn keiner mehr etwas (fachliches) dazu beitragen kann, endet das automatisch.

Verzweifler:
Damit hier kein Krieg ausbricht:

Ich bin gänzlich entspannt :slight_smile:

Verzweifler:
@agmue: Stichwort lautet Paralell Output, also man teilt seine WS2812Bs auf und hängst sie an mehrere Pins, die gleichzeitig senden, dadurch lässt sich enorm Zeit sparen.

Hast Du das mal ausprobiert? Ich behaupte, diese Aussage stimmt nicht, da ein AVR immer nur genau ein Signal für WS2812 erzeugen kann. Du darfst mir aber gerne das Gegenteil beweisen. Ich bin in diesem Forum aktiv, um was zu lernen.

@agmue:

Autsch: Ich habe mich wohl ein bisschen unklar ausgedrückt: "Da würde ich ganz klar zu den schnelleren MCUs raten. Gut zu wissen FastLED unterstützt bei einigen MCUs Paralellen Output."

Also bei den schnelleren MCUs gibt es einige, bei denen der Parallelle Ausgang unterstütt wird. Hier wirds beschrieben:

Bei den AVRs kann man gut und gerne seine Leds auf mehrere Pins aufteilen, bringen tut das allerdings nicht viel, außer man möchte nur einen Teil seiner LEDs updaten:

Theoretisch sollte ein auf 16Mhz getakteter AVR in der Lage sein, zwei Signale auszugeben, denn auf einem mit 8Mhz gataketem schafft er es ja auch ein Signal auszugeben.

Ich muss mich aber in diese ganzen Sachen noch reinfuchsen, da ich bis jetzt nur "so wie sonst auch" da mit gearbeitet habe, was auch funktioniert hat.

Der esp kam vorgestern an... (hauptsächlich wegen WLAN)

@Verzweifler: Ja, so paßt es.

Viel Spaß mit ESP und LEDs :slight_smile: