This circuit uses the Arduino ISP code to implement a serial driven ISP, but then uses a USB to TTL converter to get the serial. It is fairly versatile - with it you can:
The schematic as shown assumes you will be putting a two position toggle switch and three LEDs somewhere off-board. There is no reason they couldn't be on the board, but that will need to be an early design choice. I want to say now that this is not the fastest AVR programmer. Its versatility is what sets it apart from the others. If you are the type who burns a bootloader, then uploads code, this is the one for you. If you just flash the code, you might be a lot happier with the parallel port programmer.
The software needed is the Arduino environment, which comes with the Arduino ISP as an example. It will work out of the box.
I mounted the breakout board upside down because the pin identification is on the bottom, except for the four that duplicate TX, RX, and a couple more, which are on the top with the LEDs. Keep that in mind when you put the headers on. It took me about four hours to assemble the ArduinoISP programmer. About half an hour was spent hogging out the little openings in the box.
If you decide to build it with just a board, and no external parts, you will want to put the LEDs and switch on the board. In that case you can use a SPDT slide switch to select between the ISP and Serial modes.
If you look at pins 1, 2, and 3 on X2 you will see ISP, GND, and Serial. These go to a toggle switch that selects whether the ArduinoISP gets the serial data from the PC, or the data goes out the 6-pin SIP to another board with a downloader installed. If you choose to use that switch, make sure you turn DIP switch 4 & 5 OFF, or you will be running two outputs into the same wire. To use the serial as an external Arduino sketch downloader, ground "Serial#". To use it as an ISP programmer, ground "ISP#". Do not ground both unless you have extra 74HC125's around. Trust me.
Also on that 8-pin SIP are three lines for LEDs to indicate power, programming, and error. The power LED "throbs" when the power is on - a cute feature of the Arduino ISP. The LEDs are on when the line is pulled high, so ground the cathodes.
If you have access to an ATmega168 or ATmega328 with the Arduino bootloader in it already, you won't have to write one line of code, nor will you need another programmer to program this one. I picked up a pair of ATmega328's with the Arduino bootloader in them at Evil Mad Science. The ATmega328 is getting hard to find right now, but the ATmega168 will do fine. Just make sure to select the right microcontroller in the Arduino environment when you flash the programmer with the Arduino ISP sketch.
You may get the error:
avrdude: Can't find programmer id "arduino"
Don't try to change your local Arduino preference file. Although the local file is supposed to override the global one, the Arduino environment will just change it back. Instead, go to the AVRDUDE site and get the latest version and install it. It supports this programmer directly, as "arduino".