Arduino Speicher Erweitern

Ich habe gerade ein Großes Projekt und der Jetzige code ist jetzt Schon Sehr Groß.
Gibt es eine Möglichkeit denn Arduino Speicher zu erweitern oder über eine SD Karte irgend wie den code zu laden?

Jaein,

du kannst natürlich Inhalte (nach)laden... was Deinen Code angeht, und da beziehst Du Dich auf ein großes Programm, das muß direkt auf dem Controller ausgeführt werden können....
eine Erweiterung des Speichers welcher bei der Ausführung benötigt wird ist meines Wissens nicht möglich, sehr wohl aber kann Flash genutzt/erweitert werden (z.B. durch anderen MC) oder des EEPROMS.... natürlich gibts auch MC Typen mit marginal mehr SRAM...

Es kommt also sehr darauf an, wie dein Programm ausgelegt ist, und wie Du mit größeren Datenbeständen umgehst.... in der Regel kann man das Programm anpassen, sodaß weniger "Hauptspeicher" benötogt wird, dabei jedoch die meist vergessenen Kapazitäten welche ebenfalls auf dem MC oder am MC zu verfügung stehen genutzt werden.

Für die Ausführung wird SRAM benötogt, Daten können aber in Flashram oder eeprom hinterlegt werden....
hier solltest Du Dich ein wenig schlau machen....

  • oder mal Dein Progtramm oder die kritischen Stellen posten....

Lieber Gruß
ChrisS

Du kannst den Arduino Speicher nicht dahingenhend erweitern das Du dadurch grösseren Code (Sketches) laden könntest. In dem Fall müsstest Du dann auf einen anderen Arduino umsteigen, z.B. auf den Arduino Mega 2560.

Was Du tun kannst ist allerdings Daten, welche von deinem Sketch benutzt werden, in einem externen EEPROM wie z.B. dem 24LC256 abzuspeichern !

Was machst Du das der Flash nicht reicht? Bist Du sicher, daß Dein Problem nicht vieleicht zu hoher RAM Verbrauch ist? Falls Du wirklich mehr Code unterbringen willst und keinen größeren Controller nehmen willst dafür aber Performance opfern kannst, dann kannst Du Dir einen Interpreter basteln und dann Code von einer SD Karte lesen und interpretieren. Allerdings ist es Welten einfacher einen größeren Controller zu nehmen.

@Udo:

Wow, so plausibel ... bin aber bisher echt noch nicht auf die Idee eines Interpreters gekommen...
Da stellt sich mir die Frage, ob es schon irgendwo ausgereifte Ansätze eines Standard-Befehlssatzinterpreters gibt?

Oder ist es Unsinn? Von der Sache her wäre die Umsetzung des kompletten Befehlssatzes in interpretierbare Form vom Aufwand sicher
heftig, aber würde jegliche Speichereinschrenkungen auf dem MC ja quasi komplett vernichten.

Man müßte direkt ausführbare Instruktionen von Schleifen oder Bedingungen trennen, Variablen und direkt ausführbare Befehle müßten sich ja 1:1 umsetzen lassen,
bei Schleifen oder Bedingungen wirds dann etwas frickelig, aber müßte sich doch auch überschaubar realisieren lassen....

mmh, im Mement denke ich der Ansatz ist sehr interessant....

Hast Du da zufällig Informationen für mich?

Lieber Gruß
ChrisS

Betrachten wir es mal von einem anderen Blickpunkt.
Ein Microcontroller hat den Vorteil RAM und ROM und Periferie integriert zu haben. Wenn jetzt RAM und ROM nicht ausreichen hat es keinen Sinn Verrenkungen zu machen um esternes RAM oder Rom zu verwenden. In diesem Fall nimmt man einen Microprozessor mit externen RAM, ROM ecc. Dadurch kann man alles fast beliebig erweitern.
Da Ram im ATmega begrenzt ist braucht man für größere Projekte auch ein externes RAM um Systemvariablen, Variablen und Stack abzuspeichern.
Ein Interpreter ist um den Faktor 100 ( schätze ich mal) langsamer als ein compilierter Code, vor allem wenn die Daten und Programm von externen Bausteinen seriell geladen werden muß.

Deshalb sage ich, daß es keinen Sinn hat ROM oder RAM eines ATmega zu erweitern. Man nimmt ein größeres Modell des ATmega.

Grüße Uwe

Wenn das mit dem Faktor100 so hinkommt, dann hast Du sicher recht.
Mir ist zwar noch nicht ganz klar warum ein nur mal als Beispiel im EEprom abgespeichertes Serial.Print abgesehen von den Lesevorgängen 100 mal langsamer sein sollte,
Ich nutze ja den Inhalt des EEproms sozusagen nur als Trigger... für die Originalroutine, welche ja kompiliert ist. Gut, es müßte noch soetwas wie ein CASE abgearbeitet werden....

Naja, egal...

Ich kenne keinen ATMEGA, ohne Ram welcher auf externen SRAM / Flashram ausgelegt ist. Gibts da ein kompatibeles Modell? Ich habe noch nichts davon gehört.

Aber Du hast recht, daher spiele ich hier schon einige Zeit mit einem 1284p rum... genau wegen dem SRAM... nicht mal wegen dem Flash....
Würde ich dem Threadstarter auch nahelegen... oder gleich ein großes professionelles Board ala Mega...

Lieber Gruß
Chris

Der Unterrschied zwischen Compiler und Interpreter ist, daß der Compiler den Sketch übersetzt und dann Maschienencode erzeugt wird. Dieser Maschienencode wird im Flash abgespeichert und ausgeführt. Beim Compilieren wird der Code optimiert.
Der Interpreter übersetzt beim Ausführen den Sketch. Darum ist er langsamer und die Ausführungsgeschwindigkeit hängt sehr stark von der Qualität des Sketches ab, da dieser nicht optimiert wird. Im Speicher des ATmega existieren keine Routienen, kein Betriebsystem, kein DOS, die aufgerufen werden könnten, das muß alles der Interpreter integriert haben.

Mir ist zwar noch nicht ganz klar warum ein nur mal als Beispiel im EEprom abgespeichertes Serial.Print abgesehen von den Lesevorgängen 100 mal langsamer sein sollte,

Ein Serial.Print ("hallo word") compiliert sind Maschienenbefehle die alles unter 100 Maschinenbefehle machen könnten. (wieder geschätzt)
Ein Interpreter muß "Serial.Print" als Funktion erkennen, den Text konvertieren und senden. Schon das erkennen will heißen, daß 12 Byte von "Serial.Print" mit einer Liste aller vorhandenen Funktionen verglichen werden muß, um zu erkennen, wohin gesprungen werden muß, um die Funktion abzuarbeiten. Du mußt zB "Serial.Print" und "Serial.Println" unterscheiden können. Wieviele Maschienen-Zyklen braucht es dazu?
ZB: bei einem Interpreter ist ein unterschied ob ein variablenname 2 Zeichen lang ist oder 10.

Grüße Uwe

ChrisS:
.. als wäre ein Interpreter ein Compiler welcher auf dem atmega läuft.

Ein Interpreter ist genau das. Ein "Übersetzer" der auf dem ATmega läuft, während ein Compiler ein "Übersetzer" ist der auf dem PC läuft und das übersetzte Ergebnis im ATmega abspeichert.

Bei einem compilierten Sketch arbeitet der Atmega dann aber nur mehr die "Übersetzung" in seiner für ihn lesbaren Form (Maschinencode) ab. Aus diesem Grund kann man keinen Sketch vom ATmega herunterladen und auf C-Programmcode zurückführen. Bei einem Interpreter hättest Du den C-Quelltext auf dem EEProm des ATmega (oder auf externen EEProm) abgespeichet.

Einen vorkompilierten Sketch im externen EEProm kannst Du nicht direkt ausführen weil der Controller die Maschinenbefehle nicht vom externen EEprom lesen kann. Du müßtest per Programm die vorkompilierten Befehle holen und interpretieren, also praktisch den Atmega per Maschinencode emulieren.

Grüße Uwe

Ja, das verstehe ich, danke für die Erklärung.... du warst zu schnell mit der 2.Antwort....

Huch,

Bei einem Interpreter hätteest Du den C-Quelltext auf dem EEProm des ATmega (oder auf externen EEProm) abgespeichet.

Dann gibt es die Möglichkeit C-Quelltext zur Laufzeit auf dem Atmega zu compilieren? staun Anders geht die Übersetzung von C zu Mashinenbefehl ja nicht....

Lieber Gruß
Chris

Danke für die antworten!

Ich weiß das das Mega besser geeignet währe, aber ich habe gerade nicht so viel "Projektgeld" (Geld das ich für meine Privaten Projekte verwende) um mir ein MEGA zu kaufen es seiden jemand schenkt mir seinen aber das bezweifle ich.

Ich werde mal im Netzt nach Flash speicher und Interpreter suchen, wenn ich irgendetwas brauchbares gefunden habe und einen Code oder Sonstiges habe werde ich es hier Posten :wink:

ChrisS:
Dann gibt es die Möglichkeit C-Quelltext zur Laufzeit auf dem Atmega zu compilieren? staun Anders geht die Übersetzung von C zu Mashinenbefehl ja nicht....

Nein, das ist kein Compilieren zur Laufzeit, da spricht man nicht von Compilieren da kein Maschienencode erzeugt wird sondern der C-Quelltext wird interpretiert, also zB wenn Du Serial.Print schreibst dann muß das,das und das gemacht werden.
Grüße Uwe

Entschuldige, aber ist dann der Bezug auf "C-Quelltext" nicht ein wenig umständlich....
reicht doch wenn ich für BEFEHL1 (CASE1:) eine 1 um EEprom habe. Ich weiß, daß ist nicht ergoniomisch, und wie soll man dann den Quelltext verstehen... ich weiß... ich meine damit nur Platzhaltwer, die weniger lang und weniger komplex sind....

Was Du meinst ist die Umsetzung des im EEprom befindlichen Ablaufschemas in für den Atmega umsetzbare Befehle...

War nur über "C" Quelltext gestolpert... das muss ja nicht unbedingt C sein...

Wenns mein Projekt wäre... und ich unbedingt solch einen "Interpreter"/Umsetzer (was auch immer) nutzen wollte, würde ich mir einfach eine Tabelle mit "Kurzbefehl(EEpromKurz-Variante Befehl)" und der entsprechenden Arduino Funktion in eine Tabelle schreiben, und danach "programmieren"....

Nuja... ich finde die Möglichkeit interessant... ob es sinnvoll ist oder sein kann ist wohl Projektabhängig...

Danke danke für die Ausführungen....

Lieber Gruß
Chris

@Vedel: STOOOOOP!!!!!!!

Es ist ein Irrtum, daß man unbedingt 60 Glocken für ein Originalboard hinlegen muss....

Was da drauf ist ist ein ATmegachip, nen Quarz, nen FTDI oder ATMEGA8U2 Chip, und ein wenig drumherumbeschaltung....

Wenn Du gern bastelst, dann hol Dir ein Breadboard, ein Quarz, ein paar Widerstände und einen Taster...

Bei Pollin bekommst du den GROESSTEN ATMEGA in Dip-Bauform gerade hinterhergeschmissen....

Und der Knaller, daß für Dich so wichtige SRAM ist größer UND SOGAR DOPPELT SO GROSS als bei dem original Arduino Mega2560....

Fazit: Dir muss keiner einen Arduino Mega2560 schenken, wenn du für 7€ einen Atmega bekommst, der doppelt soviel SRam hat wie die größte original Arduino Bude....

Denk mal drüber nach, ob sich der Breadboardvorschlag nicht lohnen könnte.... den FTDI Adapter oder isp-Dongle wirst du immer gebrauchen können....
Langfristig lohnt es sich auf alle Fälle..... und Du bekommst hier alle Hilfe die Du brauchst.....

Lieber Gruß
ChrisS

@ChrisS

SUPER! ich wollte schon immer meinen eigenen Arduino Bauen! Ich liebe es sachen selbst zu bauen! ich weiß nur nicht wie ich die arduino Software brennen soll. Ich hatte sowieso vor von watterott ein FTDI Breakout Board zu kaufen (5V).

Danke für den tipp!

Hey, na das passt doch super, dann bist du dein Speicherproblem los, und hast Projekt2 auch gleich in Angriff genommen....

Software brennen,.... mmh, Du brauchst den Bootloader auf dem atmega... dann kannst du per FTDI deine Programme einfach hochladen...
(das ist der Sinn des Arduino Bootloaders).

Problem wird sein, wie bekommst du den Bootloader auf den Chip....

Entweder es findet sich hier jemand der Dir das machen würde, oder du hast jemanden im Bekanntenkreis der einen Programmer hat, ODER DU NUTZT DEINEN VORHANDENEN ARDUINO....(das geht bei manchen Modellen auch), oder Du holst Dir einen ISP-Dongle....

Falls Du letzteres für am wahrscheinlichsten hälst, kann ich Dir sagen, daß es bei myavr sehr günstige Dongle gibt.... MySmartUSB light ist verhältnismäßig weit verbreitet....

man kann aber auch über den Paralelport den Computers brennen (ehemaliger Druckeranschluß... kennst Du das?) oder man baut sich einen günstigen und einfach Dongle selbst....

Ich denk fürs erste sollte ein Freund/bekannter/"Arbeitskollege vom Vater des Freundes dir den Bootloader brennen... die FusesEinstellungen sind manchmal etwas tricky... und die Basis sollte solide sein, experimentieren wirst du dann sowieso reichlich....

Wenn Du hier preisgibst in welcher Stadt du wohnst, vielleicht gibts dort ja noch einen Arduinofan der dir helfen würde....

Allereinfachste Möglichkeit.... Dir bietet jemand einen vorgeflashten 1284p Arduino an.... keine Ahnung ob es hier spezies gibt, die geflashte Atmegas verschrubben.... (Lizenz?!? mmh)....

Na, halt uns auf dem laufenden... ich drückDir die Daumen und wünsche Dir viel Erfolg!!!!

Lieber Gruß
ChrisS

..eigenen Arduino Bauen

Hmmm..., vergess mal das Wort "Arduino" wenn du ein Steckbrett oder andere Platine mit dem Atmega benutzt.
Es ist ein simpler "Atmega1284P".

Mit Arduino meint man das Board welches die Spagettei-Esser mit USB und der Teilweise unlogischen
missbrauchten Win-Avr-Logik gefüllt haben.

Der Teilweise unmögliche vorverdaute Spagettikode blockt einem machnmal an der freien Entfaltung mit dem Winavr.
Zb ist es nicht möglich damit eine L298D mit PWM zu Regeln für 2 Motoren.
Funktioniert einfach nicht. Das ganze PWM-Timing wird durch die fertige "setup()" und "loop" durcheinander gebracht. Es konnte bis jetzt noch keiner eine Routine laufen lassen um die Geschwindigkeit des Motor zb von 0-255 zu regeln.

Ich habe noch weiter unverhoffte Bremsen entdeckt, habe stundenlang gesucht...lag wieder an der "setup()" zb.

Also nicht wahnsinnig werden.

Gruss

vedel26:
SUPER! ich wollte schon immer meinen eigenen Arduino Bauen! Ich liebe es sachen selbst zu bauen! ich weiß nur nicht wie ich die arduino Software brennen soll. Ich hatte sowieso vor von watterott ein FTDI Breakout Board zu kaufen (5V).

Guckst du hier:

Das Prinzip ist beim 1284P das gleiche.

Ich wünsche auf jeden Fall viel Spaß bei dem Projekt!

Bedenke aber bitte, dass es scheinbar noch keine Anpassung der Arduino-IDE/Bibliotheken für den ATmega 1284p gibt! Das funktioniert nicht out-of-the-box!

Als Orientierung kann man aber z.B. AVR-Netino nehmen. Die Erweiterung unterstützt den 644p und ist damit schon ganz nah dran!

Ich würde gerne nochmal auf das Thema Code-Optimierung kommen! Ich habe bereits ein Projekt eines Freundes, dass nicht mehr in einen 168 passen wollte, mit ein paar Änderungen auf einen 8er bekommen.

Gruß,
Lupus

@funkheld:

FALSCH!

Arduino ist Bootloader, Hardwaredesign und IDE.... und auch eines der weltweit wirklich erfolgreichen Openhardware Projekte.

Ein Atmega ist ebenfalls quasi irgendwie Arduino wenn der Arduino Bootloader drauf ist.
Du erzählst mir ja auchnicht das nen BMW eigentlich Fische* ist nur weil dort ne Schraube von Fische* verbaut ist... ist doch quark....
Ein Atmega ist leer erstmal ein "Halbzeug"/"Ding" (kannste leer so ziemlich nix mikt anfangen), und der Bootloader macht ihn funktionabel... oder halt Software im allgemeinen....
Klar geht auch mit den nicht so erfolgreichen Varianten und IDE's :wink: .... gähn Du bist aber hier und nicht im Bascm Forum oder im WinAV Forum... komisch oder.... wo doch alles so blöd ist nur nicht ... :D* .

Außerdem finde ich Deine Ausdrucksweise bzw. Haltung ziemlich für den A*...

Du hast so ziemlich anscheinend noch weniger Plan als ich, und das will was heißen...

Setup() bringt PWM durcheinander? Hae?

Ist ziemlich gequirlt was Du schreibst... sch* lasse ich mal weg... aber ausschließen würde ich dich hier gern,
weil Arduino eine ziemlich coole Plattform ist, und du von Spaghetti sprichst.... frage mich nur was Du mit deinem Grundwissen hier überhaupt bewerten willst....
dein post ist arrogant, naiv, eigentlich etwas dumm....

und selbst wenn ich hier nur eine Menge blödes Zeug schreibe, dann lasse ich die Väter der Plattform mal schön in Ehren...
ich bin hier Gast, und ich denke du ebenfalls... also benimm dich... Spegetthiesser ist definitiv unter dem Schnitt.

Das Arduinoteam hat etwas tolles entwickelt, ... Du wohl kaum... und wenn schon... rechtfertigt wohl kaum ausgerechnet hier im Arduino Forum den Arduino schlecht machen zu wollen...

Kritisieren ist erlaubt, dann aber sachlich und im richtigen Thread... und nicht zusammenhangslos und unter alles sau...

Lieber Gruß
ChrisS