Summary of 8×8 Bicolor LED Matrix using MAX6964
### Summary The author successfully built a compact 8×8 bicolor LED matrix driver using only SMD components, fitting it beneath the display. After three attempts to perfect the PCB via toner transfer and exposure unit, the final version achieved precise alignment with minimal etching time. The MAX6964 controller manages outputs and brightness via I²C, while software compensates for a unique pixel wiring scheme designed to reduce vias.
Parts used in the 8x8 Bicolor LED Matrix:
- SMD resistors
- SMD transistors
- 74HCT138 chip
- MAX6964 chip
- Bicolor LED Matrix (8x8)
- Toner transfer materials
- Etching solution
- Desoldering braid
For a long time I had a layout for this circuit, but could never build it, because the layout was to small to be made by tonertransfer.
So it was the first layout I made with my new exposure unit. It’s quite small, so it fits under the LEDMatrix itself. Therefore only SMD parts are used.
It took three trys to get it right. The first failed because the etching solution was to weak, took to long and caused heavy underetching. The second was not properly exposed.
The third try worked perfectly. The alignment of the two layers was good and the etching took only 10 minutes.
Soldering the SMD resistors and transistors was not very difficult using a magnifyer and tweezers.
The 74HCT138 was more or less easy to solder, but the MAX6964 was a bit harder. (The pins have a pitch of only 0.635mm.) But with desoldering braid any superfluous solder can be removed.
The MAX6964 is controlled via I²C. It has 2 8-bit registers which switch the 16 outputs on and off and 8 8-bit registers which controll the brightness (via PWM).
To keep the layout easy and the number of vias low, i had to wire the pixels of the LED matrix in somewhat weird way. But this is easily compensated in software.

The correct order for the rows is saved in a lookup-table (just an array).
The data for one row is two bytes long. The first byte contains the data for the first four pixels. (Two bits per pixel, for red and green.) The first byte is left to right, the second byte is right to left.
Most of the code is I²C communication and transforming pixel data to the correct format for the MAX6964.
Layout and code can be downloaded here. Datasheet for MAX6964 here. (Maxim is very generous when it comes to shipping free samples. For more Detail: 8×8 Bicolor LED Matrix using MAX6964
- Why was the first PCB layout attempt unsuccessful?
The etching solution was too weak, causing heavy underetching. - What caused the second PCB fabrication failure?
The board was not properly exposed during the process. - How difficult is soldering the MAX6964 chip?
It is harder than other parts due to the 0.635mm pin pitch. - How does the MAX6964 control the LED outputs?
It uses two 8-bit registers to switch 16 outputs on and off. - How is brightness controlled in this project?
Brightness is managed via PWM using eight 8-bit registers. - Why were the pixels wired in an unusual way?
This method kept the layout simple and reduced the number of vias. - How much data is required for one row of pixels?
Data for one row consists of two bytes. - What determines the order of rows in the code?
The correct row order is saved in a lookup table array.
