Brauche mehr Speicher

Liebe Arduino-Gemeindemitglieder,

ich habe immer wieder das Problem dass mir der Speicher ausgeht.

aktuell bastle ich gerade an einem Humidorregler auf Arduino Nano Basis.
Rechenleistung und Pins reichen völlig aus, aber ich habe gerade ein Speicherproblem.
freemem() meldet 180 byte freies RAM, die 1.6.4 IDE meldet 246 Byte frei.

Jetzt kann man mit code-Optimierung sicherlich noch ein paar Byte rausholen, aber das Grundproblem bleibt:

wenn ich mehr Speicher will, muss ich einen MEGA nehmen (der ist zu groß) oder die 5V Welt verlassen.

Gibt es denn kein kleines Board, auf dem ein ATMEGA mit mehr Speicher verbaut ist?

Hallo,

naja Speicher braucht auch Platz. Du bist doch Bastler. Es gibt da noch einen Atmel 1284P-PU im 40pol. DIP Gehäuse. 16k SRAM und 128k Flash. Mit dem DIP Gehäuse könnte man sich eine kleine schlanke Platine bauen.

Edit:
auf der Seite etwas weiter unten gibts ein Board minimal größer wie das DIP Gehäuse. Da wurde alles reingequetscht was geht. Falls Du das nachbauen kannst. rasmicro.com 1284P schlank

F() Macro eingesetzt?
Konstante Datenbereiche ins Flash ausgelagert?

Es gibt Boards mit dem ATMega128, die haben 4K Sram

Doc_Arduino:
auf der Seite etwas weiter unten gibts ein Board minimal größer wie das DIP Gehäuse. Da wurde alles reingequetscht was geht. Falls Du das nachbauen kannst. rasmicro.com 1284P schlank

Das sieht schon richtig gut aus!
Wenn es sowas dann noch irgendwo zu kaufen gäbe.... (ich bin froh, wenn ich meine eigenen Projekte fertig bringe. Wenn ich noch Anfange meine eigenen Boards zu bauen, bin ich mit meinem Humidor noch nächstes Jahr beschäftigt. Ausserdem bin ich ein fauler Hund!)

Meinen aktuellen Code werde ich schon reinbekommen. Da sind noch einige "nice to have" Funktionen drin, die ich rauswerfen kann.

Aber ich finde es schade, dass es hier keinen Arduino gibt. Ich hätte zum Beispiel gerne noch eine Dataloggerfunktion mit SD drin gehabt, aber das ist mit 2k RAM ausgeschlossen.

Ich wäre aber auch froh, wenn ich ein kompatibles Board finden würde.

Du hast es ja bereits angesprochen, dass dir ein Wechsel auf 3,3V-Typen nicht unbedingt zusagt. Da du jetzt aber SD-Karten ins Spiel bringst, würde würde ich trotzdem einen Teensy 3.1 vorschlagen. Das erspart die die Pegelanpassung bei den SD-Karten, zudem sind die Eingänge des Teensy 3.1 (im Gegensatz zu denen des Teensy 3.0) 5V-tolerant. Das wäre schonmal die halbe Miete...

Hallo,

firebirduino.com
fertig gibts das leider nicht. Nur fertige Platinen gibts zu bestellen. 3 Stück für 8 Dollar.

Brauchst Du mehr SRAM oder Flash?

hier steht dabei "not for Mega2560". Also müßte es mit dem Uno und Konsorten funktionieren.
http://playground.arduino.cc/Main/SpiRAM
Ob das Sinn macht weis ich leider nicht.

Atmega128 ist wie gesagt auch eine Option. Der scheint vom Namen her schlechter zu sein als der Atmega328, hat aber mehr Pins, mehr RAM und 2 UARTs.

hi,

oder, oder gleich ein kleiner 2560er...

http://www.google.de/imgres?imgurl=https%3A%2F%2Fwww.chip45.com%2Fproduct_images%2F300%2Fcrumbuino-mega.jpg&imgrefurl=https%3A%2F%2Fwww.chip45.com%2Fproducts%2Fcrumbuino-mega_arduino_compatible_atmega2560_module_board_usb.php%3Fde&h=154&w=300&tbnid=SJV7nyIgc8Vj7M%3A&docid=rXD5ufpEkZU-GM&ei=DS62VaX4CIXnygPy7ImwDQ&tbm=isch&client=firefox-a&iact=rc&uact=3&dur=583&page=1&start=0&ndsp=16&ved=0CCEQrQMwAGoVChMI5bLAwbH7xgIVhbNyCh1ydgLW

gib bei google atmega2560 mini ein und geh auf bilder, da findest Du vieles...

gruß stefan

Eisebaer:
hi,

oder, oder gleich ein kleiner 2560er...

http://www.google.de/imgres?imgurl=https%3A%2F%2Fwww.chip45.com%2Fproduct_images%2F300%2Fcrumbuino-mega.jpg&imgrefurl=https%3A%2F%2Fwww.chip45.com%2Fproducts%2Fcrumbuino-mega_arduino_compatible_atmega2560_module_board_usb.php%3Fde&h=154&w=300&tbnid=SJV7nyIgc8Vj7M%3A&docid=rXD5ufpEkZU-GM&ei=DS62VaX4CIXnygPy7ImwDQ&tbm=isch&client=firefox-a&iact=rc&uact=3&dur=583&page=1&start=0&ndsp=16&ved=0CCEQrQMwAGoVChMI5bLAwbH7xgIVhbNyCh1ydgLW

gib bei google atmega2560 mini ein und geh auf bilder, da findest Du vieles...

gruß stefan

Der von dir verlinkte chip45.com Crumbuino-Mega ATmega2560 Modul ist echt cool! Danke für den Link. Ist ein stolzer Preis, aber die Größe ist toll!

Oder Du nimmst einen Seeeduino MEGA der hat einen ATmega2560 auf der Grüße wie Arduino UNO.

Hat aber keinen ATmega16U2 USBAdapter

Grüße Uwe

combie:
Konstante Datenbereiche ins Flash ausgelagert?

Kannst du mal ein Beispiel fuer z.B. Integer oder ein 2-D Array aus Ints bringen? Mir scheint, dass im 328 sehr viel reinpassen würde. Wäre aber wohl etwas langsamer der Zugriff.

Ich habe das vor einigen Wochen mal versucht, bin aber gescheitert. Allerdings habe ich es nicht intensiv versucht.

Es lohnt sich die <avr/pgmspace.h> mal anzusehen.

1 Dim int Array:
(explizierter Cast auf int)

#define SIZEOF(array) (sizeof(array)/sizeof(array[0]))
#define FOREACH(array,index) for(uint16_t index=0;index<SIZEOF(array);index++)
#define pgm_read_int(adress) ((int)pgm_read_word_near(adress))


#include <avr/pgmspace.h>


// 4 Elemente, je 2 Byte
const int datenfeld[] PROGMEM = {1,2,-3,-5};


void setup() 
{
 Serial.begin(9600);
 FOREACH(datenfeld,i)
     Serial.println(pgm_read_int(&(datenfeld[i])));
}

void loop() {}

2 Dim int Array:
(implizierter Cast auf int)

#define SIZEOF(array) (sizeof(array)/sizeof(array[0]))

#include <avr/pgmspace.h>



const int datenfeld[3][2] PROGMEM = {{1,-1},{2,-2},{3,-3}};


void setup() 
{
 Serial.begin(9600);
 for(int i=0;i<SIZEOF(datenfeld);i++)
 {
    int wert = pgm_read_word_near(&(datenfeld[i][0]));
    Serial.print(wert);
    Serial.print(",");
    wert = pgm_read_word_near(&(datenfeld[i][1]));
    Serial.println(wert);
 } 
}

void loop() {}

Und das 2 Dimensionale nochmal, in einer anderen Form:

#define SIZEOF(array) (sizeof(array)/sizeof(array[0]))
#define FOREACH(array,index) for(uint16_t index=0;index<SIZEOF(array);index++)
#define pgm_array_int(feld) ((int16_t)pgm_read_word_near(&feld))


#include <avr/pgmspace.h>



const int datenfeld[3][2] PROGMEM = {{1,-1},{2,-2},{3,-3}};

void setup() 
{
 Serial.begin(9600);
 FOREACH(datenfeld,i)
 {
    FOREACH(datenfeld[i],j) // oder auch ausreichend FOREACH(datenfeld[0],j)
    {
      Serial.print(pgm_array_int(datenfeld[i][j]));
      Serial.print(",");
    } 
    Serial.println(); 
 }    
}

void loop() {}

Frage, wenn Fragen offen sind …

uwefed:
Oder Du nimmst einen Seeeduino MEGA der hat einen ATmega2560 auf der Grüße wie Arduino UNO.

Seeed Studio Bazaar, The IoT Hardware enabler.

Der sieht auch sehr gut aus!

uwefed:
Hat aber keinen ATmega16U2 USBAdapter

Was für Auswirkungen hat das?

in der Anleitung steht:

Easy to program, no additional hardware is required to load firmware – just plug to a USB port and you’re good to go.

An alle:
Danke für die Tips.
Mein nächstes Projekt werde ich gleich mit einem mega2560 derivat aufsetzen.
Und für aktuelle Projekt werden wohl ein paar Funktionen rausfliegen.
Da möchte ich nicht nochmal redesignen.

Was für Auswirkungen hat das?

Erstmal keine.
Die Grundfunktion ist auch mit dem FTDI gewährleistet.

Erst wenn du die brach liegenden Fähigkeiten des ATmega16U2 nutzen möchtest, geht das nicht, da nicht vorhanden.

Der originale Arduino Mega ist halt ein Board mit 2 Herzen.