Friday, September 18, 2009

Modular LED Matrix Controller (MLMC)


What is it?
The MLMC is a smart daisy chain-able LED matrix module.
I call it smart because a display of these 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 display. When new data is sent old data is passed along the chain to the next module. This makes building an arbitrary length scrolling display very simple to implement.

The LED matrix is on a separate PCB so it is simple to adapt to other LED matrices without chaining the controller PCB/firmware. This means that if you were producing a number of different sized displays you could use the same controller PCB. For example for one made from a 16 by 16 LED matrices or a large one made from custom PCBs using 16 by 16 individual 10mm LEDs.
Why?
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 mean a redesign of firmware and hardware.

I had a small number of dense 16 by 16 matrices sitting about from my times bargain hunting in Akihabara. These 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 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.
What has been done so far?
A prototype 2 Layer PCB has been manufactured by Batch PCB.
Some basic screen display firmware has been written.
A system tested with 1 Bit per pixel, 16 bit columns of the display are clocked in and displayed while last word in buffer is clocked out.
Preliminary PWM brightness control has been tested but not on a pixel per pixel basis.
What needs to be done?

Hardware
  • 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
Firmware
  • Extend from on/off pixels to brightness value
  • ISR response needs improving
Software Library/Examples
  • Arduino software is only a basic testing routine.

What will be done?
To call this project finished these are the things I hope to have done.
  • Release all firmware under a Creative commons License.
  • Release all pcb files under a Creative commons License.
  • Release protocols /data sheets under a Creative commons License.
  • Release an Arduino library to talk to a string of these under a Creative commons License.
How Long will it take?
It will probably never be completed. So I hope to publish unfinished work when it is suitably unfinished whenever I remember.