Summary of Watch futurama on an 8×8 pixel screen using atmega168 microcontroller
This article details a mid-level AVR project converting video into pixelated displays on a 2-color 8x8 LED matrix. Using Linux, the process involves extracting video frames, processing images with Python, and driving the hardware via an ATmega168 microcontroller and shift registers. The setup requires specific software dependencies like mplayer and avr-gcc to compile code that controls row scanning and color mixing through serial-to-parallel conversion.
Parts used in the Video to LED Matrix Project:
- 8x8 2 color led matrix
- atmel avr atmega168
- 74hc595 shift register (2 units)
- 3.3V regulator
- Linux system
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.
ingredients:
– (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

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
etc.
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.
PORTD:
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.
PORTB:
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

For more Detail: watch futurama on an 8×8 pixel screen using atmega168 microcontroller
- What components are required for the circuit?
The project uses an 8x8 2-color LED matrix, two 74hc595 shift registers, a 3.3V regulator, and an Atmel AVR ATmega168. - How do you convert video into stills for the display?
You use mplayer or optional mencoder to extract video frames and python with the python image library to process them into light patterns. - Does the system require sound playback?
No, the project explicitly states it plays video with no sound. - What is the role of the 74hc595 shift register?
The shift register converts serial data into parallel data to control the red and green LEDs independently. - Can this project be run without Linux?
The author states you need Linux because the method relies on common Linux tools like avr-gcc and python. - What happens if you light both green and red LEDs at once?
Lighting both colors simultaneously creates a yellow and orange hue on the matrix. - How is animation achieved on the matrix?
Animation is created by holding all ground pins high except for the specific line intended to be drawn at that moment. - What oscillator does the ATmega168 use by default?
The chip runs at 1MHz on an internal RC oscillator by default, which is noted as not very stable but acceptable for this project.
