Tuesday, 18 May 2010

Arduino as an ISP

Yesterday, while experimenting with my Veroduino board, I managed to destroy its boot loader. Annoying, but not a show-stopper; I'd recently built the USBTinyISP from Adafruit, and felt sure I could quickly restore the corrupt boot loader.

Revenge of Windows 7

Not that simple, alas.

I attached my USBTiny to my Windows laptop. It runs Windows 7, which refuses to load unsigned drivers without some fairly vigorous persuasion. Even when persuaded, it would not load the driver for the USBTiny. I think the driver may not not compatible with my laptop's 64-bit AMD processor. After an hour of  unsuccessful experimentation I decided to try something else.

My next two attempts also failed. I can drive the USBTiny using avrdude on one of my Linux servers, but I can't install the latest Arduino IDE on that machine. The server is is running Ubuntu Hardy Heron, and I can't upgrade it easily. Its main job is to act as VMware host to a bevy of virtual servers, and VMware server currently needs patching before it will run on Karmic. I'd have to coax avrdude into some tricky fuse setting; it's easy to brick a chip if you get that wrong. I decided not to try.

Next I tried to use one of the virtual servers. It's running Ubuntu Karmic, and the Arduino IDE installs and runs, but it won't recognise the USBTiny. I suspect VMWare's virtual USB drivers are getting in the way.

Arduino to the rescue

Then I came across an article on the main Arduino website which explained how to use the Arduino as an ISP. It took about five minutes to wire the Arduino up to my Veroduino clone, and a minute later the Veroduino had a working boot loader again. Even better, I can use the same approach to program other Atmel chips, including my stock of ATMega8s.