Large LED Dot Matrix Display

Introduction

LED dot matrix displays are seen at many places such as train stations and on buses to inform customers of departure times and other information. These displays usually consist of a number of smaller LED modules packed together to form a large display that has hundreds or thousands of LED's. While you can buy quite large LED dot matrix display units for a reasonable price when it gets to a certain size you might as well make your own which is exactly what this page is about.

You can email me at james.boshikoopa@gmail.com

To return to the interfacing page please click here.

This project started with me buying 72 red LED dot matrix displays from ebay for £15 with each display having 5 x 7 LED's which seemed ideal for displaying characters (letters and numbers), especially as the displays have an unused area top and bottom which would make it difficult to display a large, continuous graphic. A message board seemed an obvious choice, to display the status of the Underground trains and the weather, by pulling information from online.

The displays I will be using for this project have the model number CSM57121D (written on the side) which has common cathode columns and measure 22mm x 38mm. On the back of the display it has the text 'CS57121' and the pin at the bottom right is marked with a '1'. If we use the following numbering:

14 13 12 11 10 9 8

CS57121

7 6 5 4 3 2 1

Then we have this pinout:

1 - R6

2 - C5

3 - R4

4 - C3

5 - C2

6 - R7

7 - R5

8 - R3

9 - R1

10 - C4

11 - C3

12 - R4

13 - C1

14 - R2

Where Cx is the column number and Rx is the row number. Note that R4 and C3 are duplicated.

I did find the datasheet for the display, which also covers similar displays, and it can be viewed at:

http://www.icpdf.com/icpdf_datasheet_1_datasheet/CSM57121D_pdf_1662669/

The datasheet does specify the forward current of 20mA and a forward voltage of about 2V.

In total there will be 2,520 LED's and you may wonder not only how we can handle the connections of such a large number of LED's but also how we can update them. To address the LED's we can use a technique that involves scanning the columns at high speed (turning them on and off in turn) and setting the required rows for each column, or we can scan the rows at high speed and set the required columns each time. If we do this fast enough it will look to the viewer as if all the LED's are lit at once even though they are actually being turned on and off very fast. The more LED's we have on at once the more current will be drawn so it is difficult to get a good balance between the number of rows and columns, and having all LED's evenly lit and bright while keeping power consumption low.

This project went through many changes and I looked into many different types of chips but in the end I settled on using an Arduino Mega to communicate with 12 MM5451 IC's which drive the columns, with each MM5451 providing constant current sink to 6 display each. The MM5451 not only helps to keep the LED's bright and without the need of limiting resistors it also cuts down on I/O as each MM5451 only needs to 2 inputs for communication: clk and data. By connecting all of the clk lines together we can update all of the MM5451 IC's at the same time, which helps to reduce flicker. Although a MM5451 has 35 outputs only 30 of each chip is used as we would have left over outputs even if we used all 35 and with only 30 used from each IC that simplifies the wiring as each MM5451 handles 6 displays which works out well as each of the circuit boards holds 6 displays across (see diagram below).

As well as talking to the MM5451 chips, the Arduino Mega also drives the display rows but it does so through a number of TD62783 transistor driver array, equivalent of UDN2981. The TD62783 acts as source drivers and gives a boost in current as the quicker we update the MM5451 chips the less current each LED will get and unfortunately the more LED's we have on at once the dimmer the LED's will be. We will use only 7 of the 8 drivers in each TD62783 just to keep the wiring the same for each circuit board but you may use individual transistors if you like, however, you would have to use a base resistor for each transistor whereas the TD62783 has built-in base resistors.

The arrangement of the displays is 18 x 4 which gives us a total of 72 displays (see image below), which should allow us to display a reasonable amount of information. As for generating the information to be displayed, an Asus Tinker Board (you could use a Raspberry Pi) pulls the information from online and breaks it down into rows for the Arduino Mega.

I couldn't get a prototype board big enough for all the displays so I ended up getting x6 9cm x 15cm boards. These boards have copper pads on both sides with a number of wider pads on 2 of the ends. The boards are laid out in a 3x2 format, as seen above, with the thick lines outlining the individual circuit boards.

Rather than solder direct to the displays I soldered female headers (40 wide each) for the displays to plug into. Each display has 7 connections across but actually takes up 9 holes because of extra spacing on the displays where there aren't pins. Each of the 9cm x 15cm boards supports 2 displays vertically but the the top displays of the lower board actually starts on the top boards as to give the same spacing between the displays vertically without having to cut the board. I did cut the boards vertically so that there were no gaps between boards and so the headers run across 2 boards uninterrupted which in turn helps keep them together.

For each MM5451 IC I soldered to its own board which in turn has its outputs soldered to the display columns behind the display boards at a right-angle. The MM5451 boards have power in and out, as well as clk in and out so that it is straightforward to provide power and clk to the next board.

All content of this and related pages is copyright (c) James S. 2017