Step 10: Program the microcontroller

If you are experiencing problems with speed and/or some LEDs not lighting up. Please read this step carefully.

To program the microcontroller, I use avrdude and the USBTinyISP programmer.

My examples will be on an Ubuntu Linux system. The procedure should be pretty much identical on Windows, but I can't help you with that. If you use another programmer, read thet manual for that programmer and avrdude.

First off, Let's just see if we can make contact with the AVR.

Connect the programmer to your cube and your computer.

The command is "avrdude -c usbtiny -p m16", wherer -c specifies the programmer, and -p the AVR model. You can see the output in the images below.

Now, upload the firmware: "avrdude -c usbtiny -p m16 -U flash:w:main.hex".

By now, the cube should reboot and start doing stuff. It will be running at 1mhz (very slowly) using it's internal oscillator. And some of the leds won't work, because some GPIO ports are used for JTAG by default.

To enable the external oscillator and disable JTAG, we need to program the fuse bytes:
run "avrdude -c usbtiny -p m16 -U lfuse:w:0xef:m"
and "avrdude -c usbtiny -p m16 -U hfuse:w:0xc9:m".

Be carefull when doing this step! If you get it wrong, you can permanently destroy your microcontroller! If you are using another microcontroller than the ATMega16, be sure to read the datasheet carefully before changing the fuse bytes!

After writing the correct fuse bytes, the cube should reboot and start operating at regular speed with all leds operational.

Enjoy your new cube :D

About This Instructable


1,433 favorites


Bio: I like microcontrollers and LEDs :D
More by chr: Reverse Engineering: RGB LED Bulb with IR remote Reverse engineering: USB controlled home automation hack LED Cube 8x8x8
Add instructable to: