Using an Arduino as an ISP Programer to Burn the Arduino Bootloader

My setup, Uno on the left, target 168-20P on the right.

This is going to seem silly to some of you, but I just beat my head over it for 20 unnecessary minutes, so damnit, I’m making a public note. Here’s how to fix errors trying to use ArduinoISP.

I have a raw manufacturer-fresh ATMega168-20P chip that I need a bootloader on. I followed Sparkfun’s tutorial here to make this happen. But I ran into problems. I hooked everything up as per the image and that tutorial, but upon trying to flash and being unsuccessful, I discovered two problems. They were causing weird errors, such as

avrdude: stk500_recv(): programmer is not responding

and

avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.

The fix was two fold. First, on the PROGRAMMER board, the UNO, add a 10uF capacitor between reset (+ side, if polarized) and GND (-). This disables the Uno’s auto reset, necessary for programming. Second, the code that’s included with Arduino 1.0 under File>Examples>ArduinoISP has an error as per this page: you must change delay(40); at the end of void heartbeat() to delay(20);. For some reason, the delay of 40 breaks the timing of programming, and everything fails.

After making those two changes to my setup, my 168 burned just fine. New breadboard Arduino, ho!

ADDITIONAL NOTE: Peder in the comments below makes an important observation that “apparently you can’t have pin 13 connected to ground on the arduino you’re gonna program.” So if you’re still running into issues, verify that pin 13 is disused on your target.

7 Comments

  1. Mike
    March 11, 2013

    Hey, the capacitor on reset really helped me out with avr_dude timeout. Thanks!

  2. June 7, 2013

    The Capacitor at reset solved my bootloading problem. Thanks a ton!!!

  3. Ben
    October 15, 2013

    Also make sure you use the “upload using programmer” command. I kicked rocks over that for hours before realizing what I was doing wrong.

  4. M
    March 8, 2016

    Hey, I was trying for Days to get the Bootloader burned..
    Thx so much for the advice with the capacitor..

    Thank you so much! 😀

  5. Craig
    February 15, 2017

    Alex, Thanks for sharing. I implemented both changes. I still get “Yikes…”. Been stuck with this for days and weeks. I don’t know where to go with this. All the web solutions have led nowhere.

  6. Peder
    January 20, 2018

    I can add a little tidbit I just discovered when I was going to update an UNO using another UNO as ISP Programmer. Apparently you can’t have pin 13 connected to ground on the arduino you’re gonna program. My project used pin 13 to determine what to do on start up, and when I was re-programming it I had it tied to ground, which resulted in an “Invalid device” error.

  7. January 20, 2018

    @peder Awesome info, thank you for taking the time to mention it! I’m going to add a note in the post.

Leave a Reply

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