0
\$\begingroup\$

I'm making a very simple terminal. It consists of ATMEGA328, which outputs text on an LCD represented by the fonts read from the EEPROM (24LC).

Each character of the font consists of 9 bytes (each bit representing "color"). All the characters are stored one after another. Here's an example of the letter 'B':

enter image description here

I'm calculating the memory location of each character in order to avoid using an cross reference table the following way:

ASCII_VALUE_OF_THE_CHARACTER * 9 = character_memory_location;

So far so good, but the problem is: I cannot load all the fonts into a character array, because the ATMEGA328 has only 2kB of SRAM.

I decided to read the EEPROM directly each time I need to draw a string, but that leads me to my second problem - reading the EEPROM to death.

The datasheet states "More than 1 Million Erase/Write Cycles", but that doesn't seem to be much at all, considering just to render the text from my post would take 1,432 read cycles and would kill the memory in no time, so I believe I'm heading towards the wrong direction.

I could use some 'hacks' and pre-load or cache most frequently used characters into SRAM or use some kind of simple compression algorithm, or add multiple EEPROM's to balance the load, but I would much prefer a proper clean solution.

What would be the proper solution to solve this problem in order to keep the hardware working for as long as possible? Thanks!

\$\endgroup\$
  • 3
    \$\begingroup\$ when reading something, you don't trigger a write/erase cycle \$\endgroup\$ – Marcus Müller Mar 7 '17 at 23:56
  • \$\begingroup\$ @MarcusMüller ohh I didn't realize that!! To confirm, that means I can read it 'infinitely'? Is there some kind of limit? \$\endgroup\$ – Kristian Mar 8 '17 at 0:00
  • \$\begingroup\$ Your micro has flash, too... Why not store it in flash? \$\endgroup\$ – bobflux Mar 8 '17 at 0:39
2
\$\begingroup\$

Erase/write cycles are not the same as read cycles. For EEPROM, you can read many, many, more times than you can write. In fact for all intents and purposes, you can make an unlimited number of reads. So you should be fine storing everything in the EEPROM and reading it each time it's needed.

| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.