Arduino Mega 2560 wie Board, aber mit mehr RAM

Ich mache einen POV-RGB-LED-Globus, der Animationen auf seiner Oberfläche abspielt. Derzeit verwende ich einen Arduino Mega 2560 mit 256 KB Flash-Speicher. Mein Programm und der Bootloader belegen 20 KB Speicher, sodass ich 236 KB habe.

Es gibt 64 RGB-LEDs mit 8 Bit Helligkeit, die 64 Mal pro Umdrehung die Farbe ändern. $\left( 64 \cdot 64 \cdot 3 \cdot 8 \right) \div 1024 = 12\mbox{ kB}$ == 12288 BYTES

Jeder Animationsframe benötigt 12288 BYTES (12k) Speicher. Damit bleiben mir nur 19 Animationsframes. Gut, aber nicht großartig, bei 10 Bildern pro Sekunde sind das nur 2 Sekunden Animation. Ich hatte auf ~64 Animationsframes oder 768k RAM gehofft. (768+20=788k insgesamt)

Ich habe einige Lade- und Dampfmethoden (SD, Wireless) ausprobiert, aber sie können nicht mit den erforderlichen Daten Schritt halten, während die Daten zu den LEDs gestreamt werden. Ich werde als nächstes versuchen, eine einfache Komprimierungsmethode zu verwenden, aber ich habe keine großen Hoffnungen, dass das System in der Lage sein wird, die Daten zu dekomprimieren, während die Farbinformationen zu den LEDs gedämpft werden.

Ich habe derzeit 10 Animationsframes mit dem Arduino Mega 2560 getestet und es funktioniert. Irgendwie gibt es noch ein paar Bugs. Aber ich möchte ein Arduino-Board nicht wirklich ausschalten, wenn ich es vermeiden kann.

Meine Fragen sind:

  1. Gibt es vorgefertigte Arduino-Boards mit mehr RAM?
  2. Kann ich einem vorhandenen Arduino-Board RAM hinzufügen?
  3. Schlagen Sie ein anderes Dev-Board vor, das dem Arduino mit einem C++-Compiler SEHR ähnlich ist.

Vielen Dank für Ihre Zeit.

Bearbeiten: Ich verwende das Schlüsselwort "PROGMEM", um meine Animationen im Flash-Speicher und nicht im SRAM zu speichern. http://www.arduino.cc/playground/Learning/Memory

(64 * 64 * 3 ) / 1024 != 12288. Außerdem haben wir großartige LaTeX-Unterstützung durch MathJax, , also könnte das $\left( 64 \cdot 64 \cdot 3 \right) \div 1024 = 12\mbox{ sein kB}$ (Rechtsklick zum Anzeigen der Quelle)
Nach meinen Berechnungen betragen Ihre Datenanforderungen nur etwa 40 kB/Sekunde, was mit spontanem Laden, SD-Karten oder (einigen) drahtlosen Netzwerkoptionen sowie seriellem Flash-Speicher (ich denke, Sie möchten Flash, nicht RAM, dafür). Können Sie erklären, wie Sie festgestellt haben, dass sie nicht mithalten können?
12 kB pro Frame und 10 Frames pro Sekunde für insgesamt 120 kB pro Sekunde. \left( 12 \cdot 10 \right) = 120\mbox{ kB} Aber du hast recht, das ergibt keinen Sinn. Da sollte die SD-Karte mithalten können. Ich werde die Frage mit meiner Erfahrung mit der SD-Karte bearbeiten.
@Steven - Umgeben Sie Mathematik mit $Zeichen, um die LaTeX-Formatierung aufzurufen. Mir fehlt jedoch der Punkt, an dem Sie mit drei multiplizieren müssen - Haben Sie 8 Bit für jede Farbe der RGB-LEDs?
@reemrevnivek - Ja, 8 Bit Helligkeit pro Farbe auf den RGB-LEDs. Entschuldigung, ich hätte deutlicher sein sollen. Mit anderen Worten, es werden 3 BYTES oder 24 Bit für jede einzelne RGB-LED benötigt.
Falls Sie das noch lesen: neu angekündigtes chipKIT Max32 hat 512kB Flash

Antworten (5)

Versuchen Sie es mit einem I2C-SRAM-Chip.

Vielleicht passt ein 256 kbit N256S0830HDA @ 3V von AMI: http://www.modtronix.com/products/components/ram/n256s0830hda.pdf

Siehe http://arduino_related.livejournal.com/1414.html für ein Tutorial.

Das ist fantastisch, danke, ich denke, das ist genau das, wonach ich suche.

Datenkomprimierung kann eine Option sein. Sie benötigen wahrscheinlich nicht jede Iteration des Datensatzes 255/255/255. Selbst das Festhalten an 256 Farben wäre mehr als genug für das, was Sie versuchen.

Dann benötigt jede LED nur 1 Byte an Informationen, um ihre Helligkeitseinstellung zu speichern, wodurch sich die Anzahl der verfügbaren Frames auf 57 erhöht, was ziemlich nahe an den 64 liegt, nach denen Sie gesucht haben.

Wenn genügend E/A-Pins übrig sind, können Sie versuchen, den SRAM-Chip anzuschließen und manuell zu steuern. Sie könnten versuchen, zusätzliche Latches zum Speichern der Adresse zu verwenden, um denselben Satz von Pins für Daten- und Adressbusse wiederzuverwenden (z. B. MCS-51-basierte Systeme verwendeten 74HCT373, um den unteren Teil des Adressbusses zu speichern, siehe hier ) . Dieser Ansatz sollte im Vergleich zu I2C-SRAM-Chips schnellere Datenübertragungen ermöglichen.

Beachten Sie, dass der Speicher in der von Ihnen benötigten Größe höchstwahrscheinlich in einem TSOP-Paket oder ähnlichem geliefert wird.

Die Anforderung scheint eher Flash als RAM zu sein, und es gibt viele davon in 8-Pin-SOIC-Gehäusen, die einfach zu löten sind - löten Sie einfach nur einen Eckstift und überprüfen Sie die Ausrichtung, bevor Sie andere löten. Und nachdem Sie einige davon gemacht haben, wird TSOP nicht mehr einschüchternd sein.

Sie können den adressierbaren RAM nicht wirklich erweitern; Der Chip hat alles, was er in sich hat, und weist keinen Speicherbus nach außen auf. Sie könnten ein SD-Schild wie dieses hinzufügen und es als Solid-State-Festplatte verwenden, ähnlich wie Sie es jetzt mit dem integrierten Flash tun.

Einige Leute verwenden mehrere Arduinos (oder andere Prozessoren), von denen jeder einen kleinen Abschnitt einer LED-Anzeige betreibt.

Zum Beispiel könnten Sie vielleicht 8 Arduinos verwenden, von denen jeder für 8 RGB-LEDs Ihrer insgesamt 64 RGB-LEDs verantwortlich ist. (Während mehr Arduino Megas funktionieren würden, eröffnet dies auch die Möglichkeit, kleinere, leichtere und kostengünstigere Arduinos zu verwenden, wie z. B. den Arduino Pro Mini, der weitaus weniger Pins als der Arduino Mega hat).

Auf diese Weise können Sie Ihr Display auf eine beliebige Anzahl von LEDs skalieren, weit mehr, als ein Arduino handhaben könnte.

Das ist immer noch nicht kostendeckend. Die On-Chip-Speicherung von Mikrocontrollern ist um Größenordnungen teurer als externe Speicherchips, die mit einem für die Speicherung optimierten Herstellungsprozess hergestellt werden. Während es also tatsächlich einen Punkt gibt, an dem das Hinzufügen zusätzlicher Prozessoren sinnvoll ist (oder an dem es sinnvoll ist, ein universelles Produkt in großem Maßstab herzustellen, von dem Sie manchmal mehr als einen verwenden können), ist es sinnvoll, jedes Board vorher mit zusätzlichem Speicher zu bestücken Sie fügen weitere Boards hinzu.
@ChrisStratton: Ich stimme zu, dass "es tatsächlich einen Punkt gibt, an dem das Hinzufügen zusätzlicher Prozessoren sinnvoll ist". Fühlen Sie sich frei, diese Antwort zu bearbeiten, wenn es eine bessere Möglichkeit gibt, diese Aussage auszudrücken.