I need to display some dynamic Chinese characters to 12864 using Arduino. What to show is transported from my web server. The character is stored as a 16x16 dot matrix, needing 16*16/8=32 byte. And I need to show some sentences, which contains more than 100 Chinese characters.

The problem is that I can't storage all the dot matrix data in Arduino because it has too small memory.

  • If I get the dot matrix data from web server, I need to have 100*32B memory, but SPAM with EEPROM have only 3k. So that failed.
  • If I save the dot matrix "library" in the Flash memory, I need 3500*32B (There are 3500 Chinese frequent-used characters), but there is only 32K Flash. Saving the "library" means that I should storage the dot matrix data of all the 3500 chars in Flash, then the server only need to send the Unicode of characters, and I can get the matrix of the char.

Any help is appreciated!

  • The character is stored as 16x16 dot matrix, 1 character=1 B... why don't you change the type of the character. sincer is 1 B, I assume is char/unsigned char. But you can reduce the size of the variable using bitfields. struct { type [member_name] : width ; };
    – 23ars
    May 9 '15 at 11:02
  • 1
    @23ars Yes I already use unsigned char[16*16/8] to storage a character dot matrix.
    – ch271828n
    May 10 '15 at 3:46
  1. Use a different Arduino or Arduino-clone with more flash memory

  2. Store the character bitmaps in external EEPROM (example)

  • Er, how to clone with more flash memory? I can't find the solution in your first link.
    – ch271828n
    May 10 '15 at 3:43
  • @Turtle: I wasn't clear enough, I meant a clone of an Arduino design not manufactured by the Italian company of that name. I'll revise the answer to clarify. May 10 '15 at 11:34
  • 1
    Option 3: Add an external SPI SRAM chip to store the incoming dot-matrix data - you can get them commonly up to 128KiB in size.
    – Majenko
    May 10 '15 at 13:06
  • @Majenko er, could you please tell me how to search for it? And what's the name of these chips?( for example, 24lc256)
    – ch271828n
    May 14 '15 at 9:06

The basic EEPROM write, each 1 byte, as is mentioned in the above answer.


The PAGE WRITE which is suitable for this situation. One can easily read 32 bytes for a dot matrix.


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.