Burn Bootloader -> w/ Arduino as ISP option

Hi, can some please one tell me how to use the new Uno as ISP to boot clone Atmega 328 chips?

Thank you

I just successfully burned bootloaders onto some ATmega644/644P chips with my Uno using a Mac so I'd thought I would give some simple steps to get yours working. Before you start, check out this link http://arduino.cc/en/Tutorial/ArduinoISP or if you plan to burn a bootloader to a breadboard setup http://arduino.cc/en/Tutorial/ArduinoToBreadboard Once you read that you will have the basic understanding of what to do. But in case that doesn't explain it well enough for you here are the steps:

  • First, simply upload the ArduinoISP sketch up to your existing Arduino.
  • Next, connect your existing Arduino to the microcontroller your want to burn. Make sure you connect it correctly, you may need to look online for the datasheet of the microcontroller to confirm the pinout. Also, don't make the mistake of forgetting to connect the Vcc and Ground of your microcontroller! I did this and caused 2 hours of frustration. >.<
  • Next, you need to set up the software. This depends on the chip you are going to burn and how it is set up. For a ATmega328/168 with a 16MHz external clock you need to select "Arduino Duemilanove or Nano w/ ATmega328" from the Tools >> Boards menu. If you have no clock use "ATmega328 on a breadboard (8 MHz internal clock)" this means you will need to download the configuration file called breadboard.zip http://arduino.cc/en/uploads/Tutorial/breadboard.zip and copy the contents of the boards.txt file to the /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/boards.txt file on you computer. DO NOT REPLACE YOUR EXISTING FILE. Append the information of the downloaded file to the end of the existing file.
  • Finally, go to the Tools >> Burn Bootloader menu and select w/ Arduino as ISP. It should work. If it doesnt after a couple of tries please post the error message and I will see why it isn't working.

I hope this helps my fellow Mac users! If you have any remaining questions please let me know!

P.S. if you don't know how to get to Arduino's internal files you just go to your Applications in Finder and right click the Arduino application icon and click "Show Package Contents".


Hello mr_mac3,

Thanks for the short but to the point tutorial. Now, once I have successfully burned the bootloader how do I copy any sketch to the newly burned chip? I'm a bit confused since I'm using the new Arduino Uno. The part that gets me confused is that the ArduinoToBreadBoard page says:

"Once your ATmega328p has the Arduino bootloader on it, you can upload programs to it using the USB-to-serial convertor (FTDI chip) on an Arduino board. To do, you remove the microcontroller from the Arduino board so the FTDI chip can talk to the microcontroller on the breadboard instead."

And the UNO does not have this FTDI chip. Am I safe to assume that it will talk to the chip (atmega328P-PU) on the breadboard regardless using the same connections?

Again thanks for the bootloader part!

Hi obbi13,

Once you have a boot loaded chip, all you have to do is remove the Atmega 328 from the UNO and replace it with the new burned chip and you are ready to upload any sketch.

After you load the sketch place it in breadboard according to this link:http://itp.nyu.edu/physcomp/Tutorials/ArduinoBreadboard

And you are ready to go...

Make sure you are placing the IC correctly instead of reverse.

I borrow this thread cause I've got a similar question.

Is there any way I can upload a sketch to an Atmega 328 on a breadboard through an UNO SMD-version?

Should work. The one caveat seems to be the auto-reset; it has to be disabled. Folks have reported that a low-value resistor sometimes works. When the resistor doesn't work, a capacitor has to be added. There was a recent discussion in one of the Hardware sections. Search there for details.

I'm kinda new to this and the forums and information I've found covering this tend to conflict. If I have an atmega168 without anything on it, and an arduino uno, can I use the uno to burn the bootloader to the atmega168? If so, how?
Sorry this might be a little less confusing, I bought an atmega168 from mouser, I'm assuming there is no bootloader already on it. I would like to be able to write to it (for example have it make an LED blink), is there a way to do that using the arduino uno?
Thanks

Yes. The description is six posts above this one.

I ran the process multiply times, checking my connections and I got this error.

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

You've disabled the auto-reset and confirmed that the Arduino is, in fact, not resetting?

I have not, I've looked around for how to do that without cutting a trace, and the one that pops up involves a 120 ohm resistor in the 5v and reset sockets. How and when do I do this(what does the setup look like)? Is this a mod of the "burn bootloader" setup? or it's own setup that has to be done before I try to burn the bootloader?

If it helps, this is where I found the information, Hopefully you can help because you suggested it Coding Badly
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295163482/6

Roughly there are two steps...

  1. Upload the Arduino ISP Sketch to your board

  2. Disable auto-reset on the board

At this point, your board will behave like an ISP (in-circuit serial programmer). You can use it to install a bootloader or upload a Sketch (or perform various other "low level" things).

When the RESET pin is high (+5V) the processor runs. When the RESET pin is low (GND) the processor is held in reset. The 120 ohm resistor is used to keep the RESET pin close to +5V. It goes between the +5V connection and the RESET pin. Connect the resistor after you have successfully uploaded the Arduino ISP Sketch.

So I upload the ISP then without unplugging the usb, plug a 120 ohm resistor(Does it have to be a 120 or can it be any resistor?) directly from the 5V to the reset, then I pull out the resistor and without unplugging the usb still, I setup up the board for the bootloader burn then run it like normal.
(How do I know whether or not the auto-reset is disable?)

Sorry for all the question, I just don't want to short something that's not suppose to be shorted

So I upload the ISP then without unplugging the usb, plug a 120 ohm resistor

I would unplug the board after uploading Arduino ISP before adding the resistor. It's much safer to disconnect power when mucking with wiring.

(Does it have to be a 120 or can it be any resistor?)

I have no idea. You don't want to use anything below 120 or the current flow gets to be too much. If the resistance is too high, the auto-reset circuitry will be able to pull the line low and cause a reset. If you don't have a 120 on hand, pick the next higher resistance and try it. You won't cause any damage, it just may not work. You can use more than one resistor (like two >= 240 ohm resistors in parallel).

directly from the 5V to the reset

Yes. The RESET line needs to stay close to +5V.

then I pull out the resistor

No. Once the Arduino ISP Sketch is installed, the resistor stays in place until you are finished using the Arduino as a programmer. There is no need to yank the resistor at any point in this process.

(How do I know whether or not the auto-reset is disable?)

The bootloader flashes the LED on pin 13. The bootloader will run once when the board is first powered (LED will flash). If you have auto-reset disabled, when you open the Arduino serial port using something like Serial Monitor, the bootloader will not run.

Sorry for all the question, I just don't want to short something that's not suppose to be shorted

Don't use a resistor less than 120 ohms. Only muck with the wiring when power is off. Other than that, your Arduino is safe.

  • I connected my Arduino Uno to my computer with a usb cable

  • Then I uploaded ArduinoISP

  • Then I unplugged the usb cable(killing power to the board)

  • Then I setup my board in http://arduino.cc/en/uploads/Tutorial/SimpleBreadboardAVR.png

  • Then I connected a 120 ohm resistor directly from the reset hole to a hole on the breadboard right next to the 5V(so that they are connected and the board was setup for burning the bootloader)

  • Then I plugged the usb cable back in

  • Then I selected ATmega328 on a breadboard (8 MHz internal clock)

  • Then I went to the "burn bootloader" drop down menu and selected "w/ Arduino as ISP"

Then I got this error
(I tried this multiple times with the same error)

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

Then I connected a 120 ohm resistor directly from the reset hole to a hole on the breadboard right next to the 5V(so that they are connected and the board was setup for burning the bootloader)

The word "reset" is a bit overloaded in this discussion. I suspect you have the resistor in the wrong place.

Go here...

Along the bottom edge of the board is a pin labeled RESET. Two pins over is a pin labeled 5V. The resistor goes across those two pins.

Yep we're talking about the same reset

Yep we're talking about the same reset

Excellent. Does it look like the bootloader runs? Or does it look like the Arduino ISP runs?

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

Good news: It appears the Arduino ISP is working.

Then I selected ATmega328 on a breadboard (8 MHz internal clock)

I bought an atmega168 from mouser

Bad news: You've selected the wrong board.

Worse news: There's no option for a breadboard 168.

Good news: Adding this to boards.txt should work...

##############################################################

atmega168bb.name=ATmega168 on a breadboard (8 MHz internal clock)

atmega168bb.upload.protocol=stk500
atmega168bb.upload.maximum_size=14336
atmega168bb.upload.speed=57600

atmega168bb.bootloader.low_fuses=0xE2
atmega168bb.bootloader.high_fuses=0xD9
atmega168bb.bootloader.extended_fuses=0x07
atmega168bb.bootloader.path=arduino:atmega
atmega168bb.bootloader.file=ATmegaBOOT_168_pro_8MHz.hex
atmega168bb.bootloader.unlock_bits=0x3F
atmega168bb.bootloader.lock_bits=0x0F

atmega168bb.build.mcu=atmega168
atmega168bb.build.f_cpu=8000000L
atmega168bb.build.core=arduino:arduino

Is this
atmega168bb.bootloader.path=arduino:atmega

Suppose to be this
atmega168bb.bootloader.path=arduino:bootloaders:atmega

Because for the arduino 22 file package that's where the file is located

And I tried what you said and with that change and I'm still getting the same error