Atmel AVR programmer schematics and designs.
The typical AVR programmer is an ISP (In System Programming) device, sometimes known as ICSP (In Circuit Serial Programming). It uses the Atmel AVR's SPI (Serial Periperal Interface) port, or in the case of the ATmega128, a dedicated programming port. Although there are both serial and parallel high-voltage programmers, they will not be dealt with here. It should be noted that these are all serial programmers, whether they connect to the PC's serial, parallel, or USB port. I have grouped the programmers by the type of interface to the host system, since the ISP interface is identical on all of them. These programmers will work with all of the AVR ATmega and ATtiny series, with a few exceptions. The compatible AVR microcontrollers are listed in ISP Compatible AVR ATmega and ATtiny MCUs.
You see the AVR "In System Programming" term used consistently to mean exactly that, but the interface is not limited to in system programming at all. You could just as easily build a board with a socket for your favorite AVR, and program it with the same interface. There is just more practical need for real in system programming. Inserting and removing your AVR to program it can lead to pins getting bent or broken.
The AVR programmers here were built and then tested on a test board consisting of 5 AVR ATmega microcontrollers and 3 AVR ATtiny microcontrollers with a common power supply. The programmer schematics show both 6-pin and 10-pin AVR ISP connector pinouts. Although I built several smaller boards with 6-pin connectors, I did not use the 6-pin connectors and cables on the larger test board because they are too difficult to get and to work with.
There are also Atmel AVR ATmega and ATtiny projects, using the ATmega168 & 328 and ATmega644 & 1284 as well as the ATtiny2313. I recently added the ATmega128 and ATmega8 to the growing list of AVRs that I have available to test with. Although the site is becoming more about the hardware that is getting programmed, it is still basically about the programmers themselves.
Last things first. Here's how the different types of programmers performed. To test for functionality, I programmed all microcontrollers with the same code, shown in AVR Test Code. It is an app that just blinks an LED. I changed the blink rate each time to allow me to verify that the program was actually transferred. All of the programmers functioned as expected. To test for speed, I created a 1kB program and used each of the three programmer types to flash and verify an ATtiny2313, and an ATmega328.
|Programmer Type||Speed (Bytes per second)|
|USB Arduino as ISP||347|
It is a little surprising to me that the Arduino as ISP did so poorly. I changed the Baud rate from 19200 to 57600 to see if that would speed it up, and it may have helped around 5% on the verify phase, but it didn't help at all on the program phase. The parallel port programmers are clearly the best as far as speed goes. None of the programmers seem to suffer from reliability problems You should follow best practices and keep the cables short. See the AVR FAQ for additional information on this.
There are many Atmel AVR programmers out there, and each type of programmer, along with several variants of each, is detailed on this site, and links are provided to others. It is hoped that the information found here will provide the user with enough knowledge to build or buy the appropriate one for the job. There are a couple of ways to do AVR serial programming. First, you could make a programmer that had a socket for every ATmega and ATtniy microcontroller. Second, you could make one universal serial programmer that connected to a programming header on the target board and in system programmed the AVR. I chose the latter because I would rather not handle the micrcontroller any more than I have to. You could do it either way using these circuits. Keep in mind that the ATtiny2313 programmer is the same as the ATmega32 programmer. If you choose to make an ISP programmer, they are all ultimately the same at the microcontroller end.
As an aside, do you remember waiting 45+ minutes for a 2708 1kB EPROM to erase, then another 3 minutes for it to program? Three power supply voltages: +12V, +5V and -5V, and "low power" at only 800mW! When I get impatient waiting for flash to program I try to remember that.