Introduction: 64pixels

Picture of 64pixels
This is a tiny device to display animations and short messages. It consists of three components only and is really easy to build. And fun to watch.

If you don't feel like gathering all stuff yourself, you can buy a kit with all needed parts and a pre-programmed microcontroller at the Tinker Store.

Step 1: Parts and Tools

Picture of Parts and Tools
Only four parts needed:

  • ATTINY2313V-10PU, microcontroller, 2 k flash RAM, Digikey
  • LEDMS88R, 8 * 8 LED matrix, Futurlec
  • Battery holder with switch for two AA batteries, Digikey
  • 2 AA batteries or rechargeables

The ATtiny2313V is a microcontroller, that runs from 5.5 down to 1.8 Volt. So its easy to power it from two AA cells.
And as you see, there are no resistors. Normally you would need a resistor to limit the current through the LEDs. We are a bit adventurous here and attach the LED matrix the Evil-Mad-Scientist-way directly to the controller. The controller enables only one row at a time and cycles thru all rows that fast, that a steady image emerges.
With two AA batteries the display ran over two weeks non-stop. Battery life depends a bit on how much pixels are lit at the same time.

To build it, you need:

  • Soldering iron and solder
  • Pliers
  • Wire stripper or knife
  • Alligator clips
  • Third hand (optional)

If you want to program your own animations and messages, you will need an AVR programmer as well.

Step 2: Prototyping on a Breadboard

Picture of Prototyping on a Breadboard

I used a breadboard to test the circuit and to try out new messages or animations. The controller on the breadboard is powered by the programmer with 5 Volts. That's the reason for the 100 Ohm resistors. These are only needed on the breadboard.

Please note, most of the time you need current limiting resistors for LEDs. Only in very special cases you may drop the current limiting resistor. Otherwise you may destroy the LED.

Attached is a zip that contains the source code and a Makefile.

Update May, 7th, 2009: If you have compiled it on your own and it won't fit on the ATtiny2313 (avrdude complaining about address 0xXXX out of range), then please try an older version of avr-gcc. Version 3.4.6 works fine for me. If you are using WinAVR, then look for WinAVR-20060421-install.exe.

Step 3: Prepare the Controller

Picture of Prepare the Controller

Take the pliers and bend the pins slightly up. Afterwards, all pins should be somewhat aligned.

Step 4: Prepare the Display

Picture of Prepare the Display

Now take the matrix display and bend its legs as well. You can use a piece of plastic to bend the legs over it. That may make is easier.

Step 5: Attach the Battery Cables

Picture of Attach the Battery Cables

Now take the cable of the battery case and wrap them around one of the middle pins. Insert the cable on the top side of the matrix. The bottom is marked with an inscription (NFM-12883AS-11), in this picture on the right side of the matrix. Make a simple knot around the pin. That serves as strain relief. Strip the black wire a bit.

Step 6: Align the Display With the Microcontroller

Picture of Align the Display With the Microcontroller

Fix the the controller in place with alligator clips. Place it on the matrix so that there are two pins on the top and on the bottom, that are not attached to the matrix. This can be a bit tricky. Maybe you have to realign some of the pins. There is a small notch on the microcontroller. That notch has to point to the left.

Step 7: Solder It

Picture of Solder It

Now solder two pins, one on each side.

Then remove the alligator clips and recheck the alignment of all pins. If all fits, solder the rest of the pins.

Last job is to hook up the battery cables. Form tiny hooks on the end of each cable. The red one connects to pin 20, the top right pin. The black cable connects to pin 10 at bottom left side.

Step 8: Insert the Batteries

Picture of Insert the Batteries

And that's it. Insert two AA batteries or rechargeables and switch it on. Every time you switch it on, it displays another one of the preprogrammed animation or text messages.

You're done. Hope, you enjoyed it.


goldenshuttle (author)2017-04-08

thumbs up..great project..I add my voice to others...if we can get code for attiny85 would be very great..plz plz plz

skourkos made it! (author)2016-12-08

Congratulations for this very beautiful and fun build. This goes to my Christmas tree for sure The code works without any modification ONLY with a common cathode matrix. You will have to change it to make it work with a common anode matrix. At first i saw the original schematic and i used a common anode matrix but it didn't work. I was too lazy to modify the code so i've tried a common cathode and voila! My led matrix display is KWM-R30881CUYB which is a common cathode.

neevando (author)2015-01-18

Nice , I edited font.h from tomas123 so i have Uppercase and Lowercase font


Genius 470 (author)2014-09-20


I'm trying to program the Attiny from a arduino uno, and i cant read the code, i

was woundering if you could send me the code for the attiny than runs the led matrix. My Email is

Arduino Tech (author)Genius 4702015-01-03

You can't program it with arduino because arduino has atmega and this is an attiny and there pins are different

Mic100 (author)Genius 4702014-10-11

the easier it is to use a timer on EBAY USBASP you also find

you download the file to the programmer, I used v.1.72 progisp under W7 64BIT

and you load the matrix.hex file (which is below

you throw progisp

You select ATtiny2313 (chip select in the top left)

Clicking on flash load (top right to load the hex file)

Custom flash and then write checks then flash

Then you have to program the fuses to 4MHz oscillator and low voltage 1.8V

Clicking on the 3-point (to the right of Auto)and you put CKDIV8 1

LowValue E2

HighValue to DD

and you click on write

Mic100 (author)2014-10-11


Many thanks for this instructable :)

i made it with common anode matrix ,I just downloaded the original HEX file,after flashing 2313, display was weird,

I changed the order of the connections on 2313 and everything is OK now

tomas123 (author)2010-11-18

Hello Alex - thanks for this great idea
I rewrote your program to get significant more space for dozens of patterns.
Further I changed to a better readable (larger) 5x7 font.

I also reworked the nice pattern generator as excel sheet from
Now you can copy the code from excel sheet directly in your program.

My ATTINY2313 without V goes down until 1,8V @ 4Mhz.

PS: Your nice LEDMS88R with rectable LED are hard to purchase in Germany ;-)
I used a cheap 8x8 32mm LED Matrix with the same pin layout (!)
Google for: 12088AMR
he send from Poland to all Europe


8bitscircuits (author)tomas1232012-02-15

how to generate the makefile, I'm a newbie: P thanks

dustlessimage (author)2011-12-22

I am a beginner, but I can not properly display characters.I noticed that:
* NFM-12883 common anode |
* A0B5B4D4B2D3D1D0 +-----+
* PD5 o o o o o o o o | |
* PA1 o o o o o o o o _+_ |
* PB0 o o o o o o o o \ / |
* PD2 o o o o o o o o _V_ |
* PB7 o o o o o o o o | |
* PB1 o o o o o o o o ---+-----C---
* PB6 o o o o o o o o |
* PB3 o o o o o o o o
But My LED matrix is ( See the pic)
Please teach me, how to modify it ??? Thanks you very much.

maomakmaa (author)2011-03-16

Hey , thanks for your nice work ! :-)

I bought your Kit and a cheap USB ISP and worked the first time with Microcontrollers.Awesome !

But I still don`t understand how to make my own pictures and change the scroll or repeat animation...:how to change pixels? the signs on the right to hex!?!?!
0x18, // ___XX___
0x3C, // __XXXX__
0x7E, // _XXXXXX_

i wanna start with the first animation,not scrolled,then change the picture/animation....a hint would be nice :-)

theAVRdude (author)2011-02-17

Ok, thanks for all the treads and comments. I have so much fun with this, my brains need more eeprom!!
I flashed a couple of 2313 and succesfully burnt the right fuses but now I am interested in making some PCBs cause I dont like soldering chips directly to the matrix.
what is the next step? A circuit diagram would be awesome at this point.

Again( I'm such a geekou) thanks for some help in my process

darkria 45 (author)2010-11-24

would it effect anything if i use a socket?

alex_weber (author)darkria 452010-11-24

No, that would work.

darkria 45 (author)darkria 452010-11-24

im afraid i might burn out the chip

tomas123 (author)2010-11-22

This is a christmas card with ATTINY2313 and 8x8 Matrix LED
here a video from 64pixels with all patterns
source code below
AVR Memory Usage
Device: attiny2313

Program: 2034 bytes (99.3% Full)
(.text + .data + .bootloader)

Data: 18 bytes (14.1% Full)
(.data + .bss + .noinit)

alex_weber (author)tomas1232010-11-22

Wow, that's great, really nice animations. Thanks for sharing!

zack247 (author)2010-11-10

what are pins 1 and 11 usually used for?

alex_weber (author)zack2472010-11-10

Pin 1 is used to reset the chip. Pin 11 can be used as input or output.

zack247 (author)alex_weber2010-11-11

ok. thanks.

pumpkinpiiekat (author)2009-10-23

where do you get the stuff to program it?

i got mine from adafuit industries.i think mine is a kit, it hasnt come in yet but its only 11.49 if u use first class mail for shipping

awosme (author)2010-06-19

Is there any way that you could run the 64 pixels on an arduino?

alex_weber (author)awosme2010-06-20

Not as is. Search for "arduino matrix" to see some examples how to use an LED matrix. Then migrate the code for animation and messages. Cheers, Alex

pmcall221 (author)2010-04-13

I downloaded your c file and followed your comments in the c file to change the messages.  However, when the new hex file is written to the microcontroller it still contains the messages of the original c file.  Are there additional steps I am missing?

purpulhaze (author)pmcall2212010-05-14

AVR Studio is the easiest way. After making changes to the c file save then rebuild all. Then flash with the new hex file.

alex_weber (author)pmcall2212010-04-13

I assume, you compiled the c file ...

pmcall221 (author)alex_weber2010-04-14

i did. i used programmers notepad.  Does the .lss file also need to be edited?

pmcall221 (author)pmcall2212010-04-14

I figured out the problem. Just a little makefile snaffu.  It's my first time with WinAVR.

Can editing the animations be done in a similar matter?
Also the text scrolls right to left and animations move left to right.  Is it possible to have animations move from top to bottom or vice versa?

alex_weber (author)pmcall2212010-04-14

Yes, you can have animations going from top to bottom. Take a look at the scroll_animation method. You have to replace the x with y direction.

godofal (author)2010-03-28

mine still doesnt work, but i just decided to look at the code, and can anyone clear this up for me?
i really thought LOLWTF?!

this was in the code from line 32~43

const prog_char PROGMEM message_00[] PROGMEM = "   WTF!?! ";
const prog_char PROGMEM message_01[] PROGMEM = "   I AM NO BOMB! ";
const prog_char PROGMEM message_02[] PROGMEM = "   5   4   3   2   1  ...  BOOM! ";
const prog_char PROGMEM message_03[] PROGMEM = "   I'M SORRY DAVE, I'M AFRAID I CAN'T DO THAT.  ";
const prog_char PROGMEM message_04[] PROGMEM = "   NOW BYE ME A SOLDERING STATION ";
const prog_char PROGMEM message_05[] PROGMEM = "   MAKE STUFF ";
const prog_char PROGMEM message_06[] PROGMEM = "   IF YOU CAN'T OPEN IT, YOU DON'T OWN IT ";
const prog_char PROGMEM message_07[] PROGMEM = "   1337 3L3X7RON!C5 !1!! ";
const prog_char PROGMEM message_08[] PROGMEM = "   MY KUNG FU IS BETTER THAN YOURS ";
const prog_char PROGMEM message_09[] PROGMEM = "   SUDO MAKE ME A SANDWICH ";
const prog_char PROGMEM message_10[] PROGMEM = "   ZOMBIES AHEAD ";
const prog_char PROGMEM message_11[] PROGMEM = "   HTTP://TINKERLOG.COM ";

what does this add to the code? i just cant think of anything...

btw, no wonder nearly no version can make this program small enough to fit inside the attiny2313...

alex_weber (author)godofal2010-03-28

These are the different messages that get printed on the display.

If the compiled hex file is too big for the tiny2313, try the other compiler version as noted on step 3.


godofal (author)alex_weber2010-03-29

its not to big, but i've heard about people getting that...

but you mean that those message's get displayed?

alex_weber (author)godofal2010-03-29

Yes, they are displayed.

godfish (author)2010-03-20

Hmmm when I build the C file I get 4 warnings and no errors, and I just can't get this to work right. I programed the chip with the code anyway and all I get is lots of leds lighting and going off at once.

What could be the prob? I'm using AVR Studio 4 for a compiler.

I also tryed to just use the step 2 hex file to the chip and same. just lots of random flashes, I got the 64 LED matrix from furloc in your link, is there anything I need to do with the code?..

alex_weber (author)godfish2010-03-20

Please check if the pinout of the matrix is the same. Also check if you have the right orientation of the matrix.
And maybe you can try WinAVR compiler.

godfish (author)2010-03-10

 can anyone post a link for the .hex file, when I try and build the .hex from the .c file I get 5 errors and I'm not good at C yet to know how to fix the errors.


alex_weber (author)godfish2010-03-13

Here you go, I added the hex file to step 2.

godofal (author)2010-01-16

im making one with protoboard, since my dot matrix is different (size, other lay-out)
and ive decided to add a standard 6pin header for reprogramming ease.
just 2 quick questions:

when programming, can i use the 5V coming from a USB port. i dont think so, becouse itl burn out the matrix (i think)
so, instead can i just turn it on and program it? (with the 3V from 2 1.5V batteries)

and, ive looked at the datasheets, and it looks like i have a common cathode, but im not sure (always get confused about what cathode/anode is XD)
so, heres the pdf can someone tell me if it is indeed common cathode, and if so, how should i alter the code?
btw, i have reversed the attiny (so where pin1 normally would be is now pin11) to fix this problem (i believe it would anyway) but im not sure if that would work...

alex_weber (author)godofal2010-01-17

Yes, you would probably burn the matrix. You could hook it up with current limiting resistors on a breadboard for programming.
The matrix looks like a common anode one.

godofal (author)alex_weber2010-01-17

and if im going to use batteries for programming? then there wouldnt be enough power to burn it right?
and if i needed the resistors in combo with the 5V, how much would those resistors be needed to be?

so, for the common anode part, i dont need to change anything? and the flipping i did with the chip works?

alex_weber (author)godofal2010-01-17

If you want to use batteries, be sure that you don't connect VCC of the programmer to (+) of the batteries.
If you power the circuit with 5V, 220 Ohm should be ok.
There are parts in the code that deal with common anode or common cathode. Just comment and uncomment the relevant part. You don't need to flip the controller.

godofal (author)alex_weber2010-01-17

and if i already flipped the controller?

and for the programmer part, im using one that connects to my printer port, but i added an USB cable for 5V, but i dont need to plug that in ;)
il just add a 220ohm resistor just in case (that goes in front off the VCC pin to the programmer port right?)

godofal (author)godofal2010-01-17

im gonna flip it back and program it, takes less time :D

alex_weber (author)godofal2010-01-17

the 220 Ohm resistor is a current limiting resistor for the matrix, not for the programmer. I haven't used the parallel port as programmer, so can not help you there.

godofal (author)alex_weber2010-01-18

gonna program it now wish me luck :)

godofal (author)godofal2010-01-18

programmer's notepad is complaining about "make.exe: *** No rule to make target `program'.  Stop."
is there a .hex file by any chance?

alex_weber (author)godofal2010-01-18

Have you tried "make flash"?

godofal (author)alex_weber2010-01-19

somehow, it worked (while it kept saying it didnt) so i got a .hex file
it failed going into the chip, but i found out that there where 2 wires (miso and mosi) switched.
so, as soon as i get that right, it should work XD

godofal (author)godofal2010-02-03

well, i got the .hex, the programmer works (dont know bout the ISP version, i think i burned the attiny) but now when i program it trough AVRdude (that old version!) i get the error:

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
                 0x67  != 0xff
avrdude:verification error; content mismatch

avrdude: safemode: fuses OK

avrdude done.    thank you

also, a couple of tries before that (no changes in wiring/code whatsoever) i got some error about fuses (after that error described above)

avrdude: safemode: lfuse changed! was 64, and is now ff
would you like this fuse to be changed back?[y/n]  (i pressed Y here)
avrdude: and COULD NOT be changed
avrdude: safemode: hfuse changed! was df, and is now  ff
would you like this fuse to be changed back?[y/n]  (i pressed Y here also)
avrdude: and COULD NOT be changed
avrdude: safemode: fuses not recovered, sorry

avrdude  done.  thank you

ive tried something like 5 times, only had that fuse error once and not since, and that other error about verification keeps coming back...

is the program loaded succesfully and AVRdude just could read the program off the chip? or will it not work?

About This Instructable




More by alex_weber:64pixelsArduino XMAS hitcounterSynchronizing Fireflies
Add instructable to: