Arduino Uno R3 as a true ISP programmer for any AVR

Just to summarise, because I have seen too many people on the net trying and failing to use Arduino Uno as an ordinary ISP programmer.

Tutorial for a target board having a 16 MHz external oscilator connected to an Atmega328p:

Arduino Uno R3 as a true ISP programmer like any other dedicated ISP programmer on the market

  1. Connect your Arduino Uno R3 to the PC. Using Arduino 1.0.1 upload the ArduinoISP sketch.
  2. Take a breadboard, put a target to be programmed Atmega328p on it, already configured for 16 MHz, and make the connections as indicated in the attachment. Do not use the resistor. Forget about it.
  3. Launch avrdude and use its commands to write and read, any code you want, to and from the target Atmega328p. You do this in only one step, not following the complicated path described in the official Arduino as a programmer tutorial on the net.
  4. In case avrdude outputs the error message "Device signature = 0x000000 avrdude: Yikes! Invalid device signature." despite the fact all connections you made seem correct, as per attached schematic, most likely the external 16 MHz oscillator does not work because of too much stray capacitance the breadbord introduces. I fixed this problem by getting rid of the two 22 pF capacitors and leaving the 16 MHz crystal alone, plugged into the breadboard as close as possible to the XTAL pins of Atmega328p.

BreadboardAVR16MHz.png