We have been using PIC based micro-controllers for the last year, and generally been satisfied. One of the annoying thing we ran across is that the smaller controllers (with only 8 pins) don’t support debugging. To develop (and debug) your code, you need to use a special ICD version of the chip which only comes on an adapter board. Honestly, that is just a minor annoyance.
The real problem we ran into is the eternal nemesis of embedded development: firmware upgrades. In order to upgrade the firmware on a PIC based device, you have to connect the programmer to the processor (often using some kind of clip), fire up the firmware upgrade program and download the new firmware image. No big deal, except when you’re in the field, must unmount the unit from the wall, open up the case, connect everything to your laptop, perform the update, close the case and remount the unit. Now multiply this by a few units scattered around campus, and you’ve eaten up a day…

Enter Atmel’s AVR family of processors. The primary reason we’re looking at them? The ability to perform a firmware update under software control. They call this self-programming flash. Essentially, with the AVR processors, you can partition your flash into a small bootloader section and an application section. When running under bootloader control, you can program the application into flash.

This my friends is a huge advantage when upgrading units in the field.