Like I promised earlier, this is a solution for larger LED displays, with as few as possible pin costs, my solution uses only 7 micro controller pins, and controls 128 LED’s, this can be scaled up to 2048-4096 without problems (check the schematic).
The heart of the schematic is a simple serial to parallel conversion, in other words a shift register (IC1,IC2) this can be connected directly to the SPI of the ATmega88, or to any SPI master. To further optimize the pin count I used a 3 to 8 decoder (IC3), since only one row is powered at any given time there is no use to directly connect the rows to micro controller pins. The schematic contains also the power buffer, which is made with discrete transistors, basically this is also a row to column addressing solution, to prevent the LED’s from flashing when the shift registers are updated the row’s must be disabled for a short time, this can be made with LEN input (IC6 pin6).
Example of a sequence: disable the rows, by pulling LEN to logic 0, update the shit registers via SPI, select the row, enable the row by setting LEN to logic 1. Between the row updates it is usefull to place a delay, makes no sense to have a refresh with a few kHz, this makes the display ligth fade, if the delay is to large the image won’t be steady, you must experiment the optimum refresh rate, my advice is that 50Hz-100Hz of image refresh is enough, this result in 400-800Hz row refresh.
By inserting more shift registers or decoders the resolution of the display can be increased, the only limit is the refresh rate, if you have a large display and you want to make some complicated animation which need a lot of computing and considering also the SPI frequency, the refresh rate could became to slow and the display will flicker.
Advanced LED display board.