There are four methods of programming AVR devices. High Voltage Serial programming, Jtag, Debug Wire, and ISP.
HVSP is the bazillion-pin interface you can only use on some older devices. It is also the only way to reset some fuse bits once you’ve accidentally set them to something that makes your chip unusable to you(like setting the clock to external when there is no clock connected…).
Jtag is the 10 wire(I think 7 are actually used) interface that is standard on some of the larger devices. If you want to do on-chip debugging for mega16/32/64…you’ll need to use Jtag.
ISP is the cheapest and simplest interface. On the dev. boards you’ll usually have a 6-pin connector, and five of them are used. You can’t debug on the chip with this interface, so when you go to test your code you’ll have to use the (what I consider) nearly inhumane burn-and-run method. The great thing about ISP is it’s dirt cheap ($30 for usb ISP programmer, or $70 for stk500 which has HVSP and ISP).
Debug Wire is the 2-wire interface atmel uses to do on-chip debugging for smaller(and newer) devices. The catch is, you actually need many more pins for this “2-wire” interface than two wires. To use Debug Wire you’ll need to go through a process similar to this:
to debug:
Compile your code and burn it with ISP, enable the debugwire fuse, enter debug mode and debug.
to reprogram:
disable the debugwire fuse, recompile, program with ISP, enable debugwire fuse…repeat.
It doesn’t look like a complicated way to get stuff done…if you’re not doing it for the first time.
Anyways…I’ve done firmware development on the MSP430, AVRs, and dsPICs extensively. The nice thing about AVRs is the kitchen-sink approach to features. Instead of having a million devices(like PICs) they have ~50 or so and generally have everything built in. For small quantities they’re pricey, but for hobby stuff that’s alright. One thing about AVRs that really bothers me, especially after using MSP430s, is the patchwork of registers they have in order to keep reverse compatibility. They’ll have multiple bits across several registers, and sometimes configuring something that would be trivial on other devices is just a pain.
If you do end up using the AVRs, the dragon is a great board to use. It’s pretty cheap, and you can use it to do on-chip debugging for devices up to 32kb. Just be careful with static around it. I haven’t had a problem with mine, but I’ve read articles of people zapping it.
Personally, I would use the free C compiler(since I’ve been using it for years now) GCC and use the free AVR studio environment to do your development. Free is the best price