← All projects

IEEE LED Matrix Cube Board

  • 74HCT595
  • 24 channels
  • KiCad
  • MMBT3904
KiCad board layout: three shift registers on the left, 24 transistor and resistor pairs across the middle, output headers on the right
The finished layout. Shift registers run down the left edge, the 24 cathode drivers fill the middle, and the two 12-pin headers on the right carry eight RGB columns out to the cube.
Role
One slice of the chapter's LED matrix cube
Drivers
3 × 74HCT595D shift registers, daisy-chained
Channels
24 (eight columns × red, green, blue)
Switching
MMBT3904 NPN low-side sinks, 2.2 kΩ base resistors
Ballast
68 Ω on blue and green, 120 Ω on red
Control bus
Five wires: CLK, DATA, LATCH, BLANK, GND
Tool
KiCad

Eight RGB columns, five wires

An LED cube needs a huge number of separately controlled outputs, and a microcontroller doesn't have nearly enough pins. The solution is to clock the LED states in as serial data instead of driving each one from its own pin.

Three 74HCT595 shift registers sit in series. Each one takes serial data on one pin and presents eight parallel outputs, so three of them give 24 outputs, which is eight columns of red, green, and blue. The processor shifts 24 bits in on DATA and CLK, pulses LATCH, and the whole slice updates at once.

The fifth signal, BLANK, drives the registers' active-low output-enable pins together. It turns every output off at once without changing the latched data, so it works as a brightness control. Driving it with PWM dims the whole slice without changing the frame.

Why red gets the bigger resistor

The shift register outputs can't sink enough current for an LED, so each of the 24 channels drives an MMBT3904 through a 2.2 kΩ base resistor and the transistor sinks the current. The ballast resistors took more thought.

Blue and green LEDs drop roughly 3 V; red drops closer to 2 V. With all three on the same 5 V rail through the same resistor, the red channel would get much more current than the others, so the cube's “white” would look pink and the reds would burn out sooner. Using 120 Ω for red and 68 Ω for blue and green brings the three currents into the same range so the colors mix properly.

Built to chain

The board is one slice of a larger cube, so its five-pin output header mirrors its input header exactly: the last register's overflow output becomes the next slice's DATA, and clock, latch, and blank pass straight through. Slices stack without any wiring changes, and the firmware just shifts in a longer frame.

That overflow line goes out through a 68 Ω series resistor. The data line has to make it through a ribbon cable to the next board, and the resistor damps the reflections that fast CMOS edges cause on an unterminated line.

Full KiCad schematic showing inputs, three shift registers, twenty-four cathode transistors, and the output connectors
The full schematic, grouped the way the board is laid out: inputs and decoupling on the left, then the shift-register chain, the 24 cathode drivers, and the output headers.

Designed with the University of Denver IEEE student chapter. This board is the layout for one slice, and the full cube is the chapter's group project.