What is it?

The MLMC is a smart LED matrix module that can be chained to produced a scrolling display. I call it smart because a display made of these modules can be extended without changing either the firmware on the module controller or the firmware on the display controller. Each individual module will take care of refreshing its section of the display in a very power efficient way. When new data is sent to the display old data is passed along the chain from one module to the next. This serial shifting action makes building an arbitrary length scrolling display very simple to implement.

The LED matrix itself is hosted on a separate PCB to the module control circuitry. This separation makes it is simple to adapt the module to other LED matrices without changing the controller PCB or firmware. If you were producing a number of different sized displays you could use the same controller PCB for a module made from a 16 by 16 LED matrices as you might for a large module made using 16 by 16 individual 10mm LEDs.

Click for 
	larger Image Click for larger 
Photo 1 Top view of the controller PCB. (click to zoom) Photo 2 Bottom view of the Matrix PCB. This plugs into the controller PCB. (click to zoom)

Why did you design this?

I liked all of the many LED matrix projects seen on the web and in Circuit Cellar magazine. To enlarge or adapt these displays would often mean a redesign of firmware and hardware.

I had a small number of dense 16 by 16 matrices ( see Photo 2 above)sitting about from my times bargain hunting in Akihabara. These matrices are unused by any of the projects I have seen on the web and in magazines. These matrices have a strange footprint, the pin layout is a cross formation rather than two parallel rows of pins which is more commonly seen). This means work is needed to adapt existing projects to work.

If I had built a system purely around the LED matrices I have then very few people could use the resulting design. I would also not be able to reuse the design once my limited supply of these matrices was consumed. By separating out the control hardware from the display hardware I am able to make a much more flexible and enduring design.

I've always been a fan of the 2 Line LCD displays which are common in many projects. These have a standard well known interface so it is trivial to add one to a project. I want to bring that ease of implementation to scrolling LED matrix displays as I have many projects that could all benefit from a large display.

I wanted to experiment with using shift-registers to expand digital outputs and compare it with using a more expensive µController with many IO pins.

What has been done so far?

Click for 
                        larger Image Click for larger 
Photo 3 An Arduino driving 5 MLMC modules displaying the current temperature. (click to zoom) Photo 4 Bottom view of the controller PCBs. (click to zoom)

A number of prototype two layer PCBs have been manufactured by Batch PCB. Some basic screen display firmware has been written. The system currently uses one bit per pixel. The display data consists of 16 bit columns that are are clocked into the first module and displayed. As new data is being clocked in the last column in the modules buffer is clocked out. A preliminary compile time brightness control has been tested but it has not yet been developed on a dynamic (run-time) or pixel by pixel basis.

The current test set of five modules demonstrates driving 1280 LEDs using just two power wires and two control lines. The average current draw by all five of the modules in total is 60mA.

You can download everything done so far at https://github.com/brokentoaster/MLMC

What still needs to be done?


  • Move resistors ( LED module pcb)
  • Add decoupling caps (control module pcb)
  • Add local voltage regs (control module pcb)
  • Build more modules for testing of chaining
  • Build different LED Modules
  • Replace ATtiny261 with ATtiny861 to increase RAM available to firmware(same cost as ATtiny261)
  • Replace AVR with a CPLD to reduce cost (optional)
  • Build dual-colour and RGB LED modules


  • Extend from on/off pixels to an 8-bit brightness value
  • ISR response needs improving
  • Add an onboard font mode so user can send plain text chars to be printed
  • Ability to control whole display at same time ( e.g. clear, blink and fade options)

Software Library/Examples

  • Arduino software is only a basic testing routine. This needs to be expanded into a library offering a simple interface

What will be done?

To call this project finished these are the things I hope to have published under a creative commons license.
  • Release all firmware
  • Release all pcb files.
  • Release protocols and data sheets.
  • Release an Arduino demo
  • Release an Arduino library to talk to a string of these.
You can download everything done so far at https://github.com/brokentoaster/MLMC

How Long will it take to complete?

It will probably never be completed. So I hope to publish unfinished work when it is suitably unfinished whenever I remember.