Using the Adafruit ArduinoISP shield to bootload a 8MHz standalone ATmega328

Programming an ATmega328 using an in-system programmer (ISP) is pretty straightforward. I was tasked with using an Adafruit ArduinoISP shield to make an ATmega328 run standalone using its internal 8MHz clock. These are my notes.

Create A New Board Definition

The Arduino web site doesn’t have very clear instructions for creating a minimal circuit aren’t too clear for the Mac.

  • Close the Arduino IDE if it’s open.
  • Download the file.
  • Extract the file contained therein.
  • Append it to the list of definitions found in


When you start the Arduino IDE, you should see ATmega328 on a breadboard (8 MHz internal clock) in the menu.


Burning the Bootloader

The code to turn the host Arduino into an ISP is here. Copy/paste into a new sketch and upload. Screenshot_5_28_13_7_10_PM

  • Install an ATmega328 in the ZIF socket.
  • Set the programmer to Arduino as ISP.
  • Choose Burn Bootloader.

The board should sing, the green light should blink rapidly while burning, and finally go dark. The Arduino IDE should say Done burning bootloader in the status bar at the bottom of the sketch window.

4 thoughts on “Using the Adafruit ArduinoISP shield to bootload a 8MHz standalone ATmega328

  1. Radu

    I cannot upload the code to host arduino while ATmega328 on a breadboard (8 MHz internal clock) is selected…

  2. maxpierson

    Okay, I have a 16Mhz board available to program, but my target board is 8Mhz. So, while burning the bootloader, do I use a 16Mhz resonator on the target board, or an 8Mhz resonator?


  3. James Reuben Knowles Post author

    I think perhaps I need to rework the article to be a little more clear.

    There are two parts of the equation: the programmer and the target microcontroller.

    Here, a separate stand-alone Arduino is being used as the programmer. It is running at its usual 16MHz. Its configuration as doesn’t factor into the bootloader choice.

    The target Atmel microcontroller is what is receiving the bootloader. It may be running with an external oscilator or its internal oscilator. The configuration of the target board drives the decision of which bootloader to use.

    If one changes the program on the target board often, this method is a little tedious and error prone so I would recommend using a dedicated programmer.

Leave a Reply