The 'graphics card' is just an output expander. Just three microcontroller pins are needed to control an almost unlimited number of high voltage/high current outputs. An extra array of transistors allow the output expander to switch higher currents than plain microcontroller pins. Each output extender card has 16 outputs and multiple cards can be chained together. Two cards are required to drive a daft punk table replica with 25 squares. Note that muxing is not used, this is simply a 1:1 output expander.
****NOTE: the blog below is gone. The files are still available here. Important files have been attached to this instructable as well, without permission of the author.....****
The original daft punk table replica instructable didn't include a microcontroller program or a circuit for the output expander board. From the description (and looking at this blog.) we can tell that it uses a few I2C IO port expanders connected to a transistor array. Take a look at the PCB here.
The ULN2803A is used in all the designs I have seen. It is an array of transistors that switch higher current/voltage than plain microcontroller pins. This is a a perfect chip for this project, but note that the output is reversed. The ULN chip sinks current to ground, so we connect it to the ground side of whatever we want to switch.
I have the PCF8574 port expander in my parts box, but I wanted something cheaper, easier, and expandable. I ditched the I2C IO expanders. Why? The i2c bus needs 2 pullup resistors(a pain). I2C peripherals are a bit pricey: $1+ for the PCF8574 i2c port expander. You need to deal with I2C in hardware or software. The PCF8574 chips have a limited number of address selections (determined by the state of 3 pins):if all addresses are used a second I2C bus is needed.
I designed a new output expander with a handy chip I learned about in lady ada's bike POV instructable, the 74HC(T)595.
The 595 is a serial to parallel port expander with 8 output bits. The interface is a simple 3 line affair (SPI) with serial data/clock lines and a latch that puts the data on the pins. Now the cool part: several can be connected end-to-end so that you can create a chain with hundreds of extra outputs. Bits can be clocked in at up to 20Mhz, so large or multiplexed grids are possible.
Read a great detailed 74hc595 tutorial here.
Why its good:
1. Its fast, up to 20 Mhz
2. Simple SPI interface - clock in the bits then set the latch. With 595: <4 bytes per refresh. With (i2c) PCF8574: 8 bytes per refresh (+ i2c overhead). Easy 3 wire interface can be operated with microcontroller, PC parallel port, or even buttons - requires no extra passive components.
3. Its cheap: 0.33 per chip.
4. Massive expansion potential, multiple chips can be chained for a disgusting number of outputs.
The circuit is pretty basic. It only includes those things needed for the graphics card : I/O expanders, transistor array, connection headers. Check the PCB image for photo notes with a pin description for the board (the blue image below).
Power supply and control unit are separate components that will be added in future steps.
The capacitors on the latch line are optional. The datasheet [pdf!] for the 595 suggests adding a 0.1uf capacitor if the output flickers. I didn't need them, but if you experience flicker when changing the latch pin try adding one or two 0.1uf capacitors here.
Schematic and PCB, in Cadsoft Eagle format, are included in the zip archive.
The 74hc595 serial to parallel (SPI-compatible) output expander used in this project.
PCF8574 i2c IO expander used in the original daft punk table replica.
The ULN2803A, an array of transistors that allows us to switch bigger loads than the 595 alone.
Step 1: Controller With USB Interface and SD Card Script Storage.
Image input is accepted from a USB port (as a virtual serial port on your PC or MAC), or from scripts stored on an SD card (scripts generated using the software on this blog).
The driver board isn't done yet. It will go here after some testing. I can post my current draft cct/pcb if anyone would like to follow along.