M74HC595B1 - 8 bit shift register with storage and tristate output latches

About a week ago, after noot made his brainwave machine, I was talking about the things I saw at 22c3 and the blinkenlights projects. About how I wanted to make a led panel and control it through my computer.

Noot then said he has such a panel at home, from a cigarette commercial at his father's store. So he brought it over.

[I so much need to buy me a new digital camera to take pictures...]

The led panel is mounted inside a metal box. It connects to a standard power outlet and has 3 buttons to control what appears on the screen. The box has 2 led panels actually: front and back. After getting the metal box off, I found that there are 4 identical led panels inside (2 front, 2 back) with a total of 2048 leds. Inside, there is also a motherboards with lots of ICs.

Each of the panels is filled with leds, but oddly, not much other components are on the panel. The panels are interconnected with a 10-wide IDC cable-ribbon. Power is supplied by another pair of cables running to each board.

After disconnecting and taking out one of the panels, I noticed that the leds are controlled in groups of 4 (arranged in a square). Each panel has 16x32 leds, but 8x16 pixels. Still, good enough to play with.

Since the panel consisted of 8 rows of pixels, I theorised that 8 of the IDC cable-ribbon cables carried serial data, while the 2 other probably were ground and clock-signal. I wasn't far off...

At first glance, I discovered 2 components that were not resistor ladders and capacitors: ST ULN2803A and M74HC244B1. The former is an IC with 8 darlington transistors. The latter is a "OCTAL BUS BUFFER WITH 3 STATE OUTPUTS".

That looked pretty scary, because neither of these actually seem to do anything useful (in a functional way).

The theory now was that the pixels were lid up one at the time and that it happened so fast, the eye saw all leds lighting up at once.

So I whipped out an oscilloscope and (first learned how to use it using this page) started looking for a block-wave that indicated a signal.

Of course, I was working blind. I had no idea what pins of which IC was doing whatever. I discovered a couple block-waves, but no modulation on it.

So I took out one of the panels and took a closer look at it. The panel is subdivided in 2 regions that are identical (so 8x8 pixels). The IDC connector had pathways coming from it that went directly into the first column of 8 identical ICs. But those were not the M74HC244B1 IC's I thought they were. They were M74HC595B1 ICs: 8-bit shift register with storage and tristate output latches.

That was the missing component!
I set down with a multimeter and drew a map of the PCB. Each row of the panel (well, actually half of it) was connected to a shift register. The first 8 pins of the IDC connector were in turn connected to the shift register serial-in pin of each row. The remaining 2 pins were not ground and clock signal as I thought. They are shift register clock and storage register clock. After setting a signal on the data-line (serial-in), the clock on the shift register clock line is raised and the shift register remembers the value. Then, after 8 shifts, the register is filled. Then the storage register clock is raised and all 8 registers are transferred to the storage registers. These storage registers are what control the leds.

What I need now, is to test this theory. When AITEC opens tomorrow, I will buy a 20-pin male IDC connector, a block with 8 dipswitches (for the datalines), 2 push buttons and an empty PCB. And I will try to program the leds manually.

If it works, I can hook up the panel to a parallel port and control it through my computer. I plan to write a kernel driver for it, to control the panel in both a text-mode and graphical mode.

I already have plans to program a game of tetris on it :) Maybe with an FPGA...