Its been a lot written about AVR microcontroller programmers. This article concludes most common programmers.
The easiest programming method is Serial Downloading so-called ISP. This allows to program AVR microcontroller without removing it from the target board. Usually in such boards are a special ISP connector where you connect an external AVR ISP with standard 6 or 10 headers.
AVR ISP usually connects to computers COM or LPT port. COM port has the advantage of the ability to use long cables while LPT is limited up to about 1 metter long. But in the other hand, using a COM port requires an additional complementary circuit to match the voltage levels, while the simplest LPT programmer doesn’t need any parts at all:
But it is safer to use some kind of buffering circuit like 74HC244 to add some protection from port failure.
Another programmer that can be successfully used is ByteBlaster. This is recommended when you are used to working with PLD (Altera) devices. You may easily modify ByteBlaster to be able to program AVR microcontrollers. For programming AVR microcontrollers, you may use AVReAL programming software or avrdude. It is up to you how you will configure your software. You don’t even have to modify your ByteBlaster programmer if you will not use a standard header.
In mass production, it is convenient to use a parallel programmer. IF for ISP programming, there were only 4 data lines used and 2 power lines, then for parallel would be 20 (depending on microcontroller type). Using a parallel programmer, you can program multiple AVR microcontrollers at the same time. You would say that a parallel programmer is useless for you. In some cases, no, because many AVR microcontrollers have the ability to use RESET pin as genera I/O pin, and this fuse bit selection can only be made in parallel programming mode. Restoring of normal RESET function can only be done in parallel mode. Using parallel programming mode, you can also disable Serial Downloading mode. The parallel programmer is a more complex circuit, and hobbyists usually don’t use it:
This time I skip JTAG and Bootloader based programming methods as they will be discussed in separate threads.