Search code examples
algorithmembeddedcompressionarduinoatmega

Arduino: Lightweight compression algorithm to store data in EEPROM


I want to store a large amount of data onto my Arduino with a ATmega168/ATmega328 microcontroller, but unfortunately there's only 256 KB / 512 KB of EEPROM storage.

My idea is to make use of an compression algorithm to strip down the size. But well, my knowledge on compression algorithms is quite low and my search for ready-to-use libraries failed.

So, is there a good way to optimize the storage size?


Solution

  • You might have a look at the LZO algorithm, which is designed to be lightweight. I don't know whether there are any implementations for the AVR system, but it might be something you could implement yourself.

    You may be somewhat misinformed about the amount of storage available in EEPROM on your chip though; according to the datasheet I have the EEPROM sizes are:

    ATmega48P: 256
    ATmega88P: 512
    ATmega168P: 512
    ATmega256P: 1024

    Note that those values are in bytes, not KB as you mention in your question. This is not, by any measure, a "shitload".