Limited data problem with 8x6 LED matrix

Hi guys!

This is my second Arduino project, so I’m still a beginner… (I’m new to electronics)
I built an 8x6 LED matrix, I drive it with two 74HC595 shift registers (one for cathodes, one for anodes, resistors on anode side, nothing else).
I wrote my own driver for it (almost from scratch besides the ShiftOut function), which turns out to be problematic.
I wanted to use it with an ATtiny85, but this is not important right now.

Everything works great, but…
When I upload a certain amount of data (mean: I want to display a longer string), it just stops working. Sometimes the screen starts to flicker some kind of random stuff, sometimes it just goes blank, but it’s not working.
The data limit for the Arduino Uno is about 35-40 characters (only 10-15 with the ATtiny85), anything above drives it crazy.

I didn’t attach a schematic bacause it’s almost identical to the one can be found in the ShiftOut example, only difference is that the pins from one shift register go to the cathodes, and the pins from the other go to the anodes.

Could anybody help me out?
Thanks in advance!

ps.: the compiled code for the Arduino Uno with this "HELLO ARDUINO!!! " string is only 4708 byte, so way below the limit (it is somewhere around 2000 byte with the ATiny85)

display_driver.ino (15.6 KB)

The data for your letters occupies over 1900 bytes of your 2K of SRAM. Consider moving it into progmem. A simpler temporary solution might be to declare those arrays as byte, halving your memory use.

Oh silly me... Thank you very much!!! :) I tested it with a much larger string, and worked even without PROGMEM, took much less memory :)

Better yet re-encode them as binary bytes as well. This would mean recoding your display routines slightly but it save even more memory (1/6th of the original).

You might even stop encoding them backwards for better readability.

uint8_t char_bitmaps[][6] =
{
    // space character
      {
        0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
    }
    ,    

    // A
    {
        0b01000000
      , 0b10100000
      , 0b11100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
    }
    ,    
    
    // B
    {
        0b11100000
      , 0b10100000
      , 0b01100000
      , 0b10100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // C
    {
      , 0b11000000
      , 0b00100000
      , 0b00100000
      , 0b00100000
      , 0b00100000
      , 0b11000000
    }
    ,    
    
    // D
    {
      , 0b01100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b01100000
    }
    ,    
    
    // E
    {
      , 0b11100000
      , 0b00100000
      , 0b01100000
      , 0b00100000
      , 0b00100000
      , 0b11100000
    }
    ,    
    
    // F
    {
      , 0b11100000
      , 0b01000000
      , 0b11100000
      , 0b01000000
      , 0b01000000
      , 0b01000000
    }
    ,    
    
    // G
    {
      , 0b11100000
      , 0b00100000
      , 0b00100000
      , 0b10100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // H
    {
      , 0b10100000
      , 0b10100000
      , 0b11100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
    }
    ,    
    
    // I
    {
      , 0b11100000
      , 0b01000000
      , 0b01000000
      , 0b01000000
      , 0b01000000
      , 0b11100000
    }
    ,    
    
    // J
    {
      , 0b11100000
      , 0b10000000
      , 0b11000000
      , 0b10000000
      , 0b10100000
      , 0b01000000
    }
    ,    
    
    // K
    {
      , 0b10100000
      , 0b10100000
      , 0b01100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
    }
    ,    
    
    // L
    {
        0b00100000
      , 0b00100000
      , 0b00100000
      , 0b00100000
      , 0b00100000
      , 0b11100000
    }
    ,    
    
    // M
    {
        0b10100000
      , 0b11100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
    }
    ,    
    
    // N
    {
        0b10000000
      , 0b10100000
      , 0b10100000
      , 0b11000000
      , 0b11000000
      , 0b10000000
    }
    ,    
    
    // O
    {
        0b01000000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b01000000
    }
    ,    
    
    // P
    {
        0b11100000
      , 0b10100000
      , 0b11100000
      , 0b00100000
      , 0b00100000
      , 0b00100000
    }
    ,    
    
    // Q
    {
        0b01000000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b11000000
    }
    ,    
    
    // R
    {
        0b11100000
      , 0b10100000
      , 0b01100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
    }
    ,    
    
    // S
    {
        0b11000000
      , 0b00100000
      , 0b01100000
      , 0b10000000
      , 0b10000000
      , 0b01100000
    }
    ,    
    
    // T
    {
        0b11100000
      , 0b01000000
      , 0b01000000
      , 0b01000000
      , 0b01000000
      , 0b01000000
    }
    ,    
    
    // U
    {
        0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // V
    {
        0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b01000000
      , 0b01000000
    }
    ,    
    
    // W
    {
        0b10100000
      , 0b10100000
      , 0b10100000
      , 0b10100000
      , 0b11100000
      , 0b10100000
    }
    ,    
    
    // X
    {
        0b10100000
      , 0b10100000
      , 0b01000000
      , 0b10100000
      , 0b10100000
      , 0b10100000
    }
    ,    
    
    // Y
    {
        0b10100000
      , 0b10100000
      , 0b01000000
      , 0b01000000
      , 0b01000000
      , 0b01000000
    }
    ,    
    
    // Z
    {
        0b11100000
      , 0b10000000
      , 0b01000000
      , 0b00100000
      , 0b00100000
      , 0b11100000
    }
    ,    
    
    // Special
    // s (latin extended characters for the Hungarian language)
    // Á
    // AA
    {
        0b10000000
      , 0b10000000
      , 0b01000000
      , 0b10100000
      , 0b11100000
      , 0b10100000
    }
    ,    
    
    // É
    // EE
    {
        0b10000000
      , 0b01000000
      , 0b11100000
      , 0b01100000
      , 0b00100000
      , 0b11100000
    }
    ,    
    
    // Í
    // II
    {
        0b01000000
      , 0b01000000
      , 0b00000000
      , 0b11100000
      , 0b01000000
      , 0b11100000
    }
    ,    
    
    // Ó
    // OO
    {
        0b10000000
      , 0b10000000
      , 0b01000000
      , 0b10100000
      , 0b10100000
      , 0b01000000
    }
    ,    
    
    // Ö
    // OE
    {
        0b10100000
      , 0b00000000
      , 0b01000000
      , 0b10100000
      , 0b10100000
      , 0b01000000
    }
    ,    
    
    // ?
    // OEE
    {
        0b10100000
      , 0b10100000
      , 0b01000000
      , 0b10100000
      , 0b10100000
      , 0b01000000
    }
    ,    
    
    // Ú
    // UU
    {
        0b01000000
      , 0b01000000
      , 0b00000000
      , 0b10100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // Ü
    // UE
    {
        0b00000000
      , 0b10100000
      , 0b00000000
      , 0b10100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // ?
    // UEE
    {
        0b10100000
      , 0b10100000
      , 0b00000000
      , 0b10100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // // bers (zero is not present, use O instead ) )
    // 1
    {
        0b10000000
      , 0b11000000
      , 0b10100000
      , 0b10000000
      , 0b10000000
      , 0b10000000
    }
    ,    
    
    // 2
    {
        0b01000000
      , 0b10100000
      , 0b10000000
      , 0b01000000
      , 0b00100000
      , 0b11100000
    }
    ,    
    
    // 3
    {
        0b01100000
      , 0b10000000
      , 0b01000000
      , 0b10000000
      , 0b10000000
      , 0b01100000
    }
    ,    
    
    // 4
    {
        0b01000000
      , 0b01000000
      , 0b00100000
      , 0b10100000
      , 0b11100000
      , 0b10000000
    }
    ,    
    
    // 5
    {
        0b11100000
      , 0b00100000
      , 0b01100000
      , 0b10000000
      , 0b10000000
      , 0b01100000
    }
    ,    
    
    // 6
    {
        0b11100000
      , 0b10100000
      , 0b00100000
      , 0b11100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // 7
    {
        0b11100000
      , 0b10000000
      , 0b10000000
      , 0b01000000
      , 0b01000000
      , 0b01000000
    }
    ,    
    
    // 8
    {
        0b11100000
      , 0b10100000
      , 0b11100000
      , 0b10100000
      , 0b10100000
      , 0b11100000
    }
    ,    
    
    // 9
    {
        0b11100000
      , 0b10100000
      , 0b11100000
      , 0b10000000
      , 0b10100000
      , 0b11100000
    }
    ,    
    

    // Some additional characters

    // exclamation mark
    {
        0b10000000
      , 0b10000000
      , 0b10000000
      , 0b10000000
      , 0b00000000
      , 0b10000000
    }
    ,    
    
    // question mark
    {
        0b01000000
      , 0b10100000
      , 0b10000000
      , 0b01000000
      , 0b00000000
      , 0b01000000
    }
    ,    
    
    // comma
    {
        0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
      , 0b10000000
      , 0b10000000
    }
    ,    
    
    // dot
    {
        0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
      , 0b10000000
    }
    ,    
    
    // single quotation mark aka apostrophe
    {
        0b10000000
      , 0b10000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
    }
    ,    
    
    // double quotation mark
    {
        0b11000000
      , 0b11000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
      , 0b00000000
    }
    ,    
    
    // colon
    {
        0b00000000
      , 0b00000000
      , 0b10000000
      , 0b00000000
      , 0b10000000
      , 0b00000000
    }
    ,    
    
    // Semicolon
    {
        0b00000000
      , 0b00000000
      , 0b10000000
      , 0b00000000
      , 0b10000000
      , 0b10000000
    }
};