Watch futurama on an 8×8 pixel screen using atmega168 microcontroller

Circuit overview

here’s how to convert otherwise reasonable quality video into pixelated garbage and play it on a 2 color 8×8 led matrix, with no sound and only moderate sync.
– (1) 8×8 2 color led matrix
– (1) atmel avr atmega168
– (2) 74hc595 shift register
– (1) 3.3V regulator
– (1) a linux system
this is a mid level avr project, in that it assumes ( does not explain ) how to get a program onto a chip. it’s pretty easy once you’ve done it though, so don’t worry. to see how to actually load up a program, The Real Elliot has a nice introduction.

Step 1 Have linux, avr-gcc, python, mplayer…

you’ll need linux to use this method, because i used common linuxy things in it. these things are, in no particular order:
1. avr-gcc: needed to make c code into avr code –> wiki stuff about it
2. python: a surprisingly nice programming language –> official site
3. python image library: used here to turn nice video into tiny specs of light without nearly as much hassle as that sounds like. –> pil
4. mplayer: used to turn video into stills –> mplayer
5. mencoder: (optional) change the frame rate of video –> same place as mplayer
i think that is all of the dependancies.

Step 2 Circuit overview

Circuit overview

shift registers:
we use 2 of them, one for green and one for red.
the 74hc595 shift register is a simple latched device that converts serial 1’s and 0’s to parallel 1’s and 0’s. the ‘don’t clear’ pin is held high while the serial data is clocked in, then the latch pin is set high triggering the output of the parallel data. dropping the ‘don’t clear’ pin empties the output register and gets ready for fresh data.
all that means is the chip acts as a friendly robot that patiently waits until you have said 8 things while touching it on the shoulder. and then when you punch it in the stomach the robot says them all at once out of its 8 mouths. just slap it upside the head and it forgets, ready to go again.

Step 3 Circuit overview: led matrix

this particular led matrix has a green and a red led in each of the 64 positions. if you light them both at once you get a sort of yellow and orange color.
the only thing special about this matrix is that it is the one i had when i did this. a HUGE improvement in the final result would be to use an RGB led matrix and an additional shift register, but i don’t have 64 RGB leds lying around.
moving on:
say the green shift register outputs some fancy pattern like 10110011, that would light up the matrix like this:
g x g g x x g g
g x g g x x g g
g x g g x x g g
g x g g x x g g
g x g g x x g g
g x g g x x g g
g x g g x x g g
g x g g x x g g
(x means off)
as long as all of the ground pins were held low. same deal with the red register.
so to achieve animation, just hold all of the ground pins high except for the one that is on the line you want to draw to.
x x x x x x x x
x x x x x x x x
g x g g x x g g
x x x x x x x x

Step 4 Atmega168 == brains

the atmega168 has a bunch of storage space and 28 pins, which is more than we need. by default it runs at 1MHz on an internal RC oscillator, which is not very stable. but that’s ok.
to control the ground pins on the matrix, they are wired to PORTD of the avr. in code this will use the &= ~ (see step 6) type of method to keep all pins HI except the one for the row we want to display.
the latch will be on pin 0. the shift register clock is pin 3, green serial is pin2, red serial is pin4, and the no_clear is on pin1.

Step 5 Put it together

Put it together1 (1)

oh my, there are some wires involved.

Step 6: Code for Avr

the avr’s job is pretty easy. the overall procedure is as follows:

1. read a byte from memory and write it to the red shift register
2. read a byte from memory and write it to the green shift register
3. set the appropriate pin low to ground the row we want to display
4. throw the latch to trigger the shift register outputs
5. wait.
6. clear the shift registers and repeat.

Read more: watch futurama on an 8×8 pixel screen using atmega168 microcontroller

Leave a Comment

Your email address will not be published. Required fields are marked *