Running in RAM limitations with 328 -- Need MEGA?

What are the best ways to deal with RAM limitation with the Arduino? I have the 328 chip which offers 2k, however, I'm finding that even that doesn't give me enough to store metadata like Artist, Title, Album, Playlist name.

I'm also reading in from Serial to check for certain RS232 commands and using an Ethernet Shield to control a device via IP. I'm storing long strings in PROGMEM and not storing anything that is not needed.

My project runs fine but I get into certain conditions where things choke if I try to add functionality. Then I check avail memory it shows 83 bytes -- so I'm right on the boarder.

I'm using WString, Ethernet2, Client, and pgmspace libraries.

Anyways, back to my question... if I need more RAM, the only option is the MEGA correct? That will give me up to 8K.

Its one option.

Is there any way you could consider using a serial EEPROM, or an SD-card interface? What about splitting the system across multiple ATMegas (not Arduino’s - once your app becomes this complex, you need to think about breadboarding at a standalone level, and plan on a protoboard or custom PCB)?


Yeah, I was thinking about two Arduino's one for ethernet and serial and one to process however, I think a MEGA should do. I do plan on doing my own PCB I just want to make sure I can get it to work properly first. I should have more than enough RAM (famous last words) with the MEGA.

Didn't know if there any tips or tricks that easily added RAM. Searching this forum points to no.

Would a serial EEPROM still have the read/write speed issues and write limitations?


Didn’t know if there any tips or tricks that easily added RAM. Searching this forum points to no.

I think one of the ATMegas (2560? Or maybe a different Atmel processor…) does have a method where you can add external RAM for increased program area; but with the ATMega168/328 it isn’t possible. You can only increase RAM for data storage purposes thru the use of an SD-card interface and/or a serial EEPROM/RAM (in theory you could also use the ports on the ATMega to simulate a data/address bus and interface some old-school 8-bit ported RAM, if you wanted to - but it is easier and cheaper to do a serial EEPROM/RAM).

Also make sure you have the latest WString.h, there's a memory leak in older ones.

So I took the better part of the day cleaning up... amazing what you can squeeze out when you refine your code. I went from 80 bytes free to over 500 and now I can store my metadata...

Now I'm trying to figure out the following: