Which in-system programmer is recommended?

Greetings, I am considering investing in an ICSP in-system programming device, and I am wondering which of them is recommended by the Arduino community-- pros and cons.

TIA

:o

Arduino Uno or Teensy running TinyISP sketch. Simple. Cheap. Highly customizable.

Or, the programmer sold by Pololu... https://www.pololu.com/product/1300. Best purchased during their annual sale.

Thank you! So, I can use one of my Uno boards running TinyISP to program the other Uno board through the ICSP port? <sorry to be so ignorant, new to icsp> If I understand this correctly, is it pin-pin between the two boards (are all six pins needed?

TIA

No, reset is different. The relevant page should mention.

Ever since I made up Atmega chip stand-alone programmer I use it most of the time to program other chips, although there is the extra step of copying the .hex file to the SD card. Only takes a few seconds.

Still, at least I don't have to put up with messages about "avrdude is out of sync" or some such nonsense.

Thanks much, very helpful. I had a buddy recommend Dragon, and Tiny, but it seems the simplest to use the Arduino board I have and run the TinyISP sketch (I'm kinda pumped to try it). Thanks for the blog post, I appreciate it!

Cheers, marcus :)

Start with the ArduinoISP sketch. It is an example that comes with the IDE.

Excellent, thank you…

I appreciate it’s not the cheapest option, but I use an Atmel AVRISP MKii. Simply plug it in and press upload on the Arduino IDE.

You do have to power the Arduino you’re programming, but that can be done by simply connecting the USB connector.

Ian.

Dragon and Atmel AVRISP MkII are both considered obsolete. If you've got $50 to spend, you should probably get an an "Atmel ICE" debugger: http://www.atmel.com/tools/atatmel-ice.aspx This supports PDI (Xmega), TPI (very tiny), and JTAG as well as ISP programming, AND it supports Atmels ARM chips (JTAG, SWD) Also, it supports debugging as well as programming.

If you haven't got $50, ArduinoISP (free, if you already have an Arduino) works fine for programming ISP-capable AVRs with less than 128k of flash.

westfw: Dragon and Atmel AVRISP MkII are both considered obsolete. If you've got $50 to spend, you should probably get an an "Atmel ICE" debugger: http://www.atmel.com/tools/atatmel-ice.aspx This supports PDI (Xmega), TPI (very tiny), and JTAG as well as ISP programming, AND it supports Atmels ARM chips (JTAG, SWD) Also, it supports debugging as well as programming.

If you haven't got $50, ArduinoISP (free, if you already have an Arduino) works fine for programming ISP-capable AVRs with less than 128k of flash.

Dude, thanks! I'm looking into all the options... its not the $50 bucks, its whether I'm going to need all the options... but the deeper I get into this project it looks like I'm going to want to get the right tools. Thanks again.

Mark_H_Harris: Dude, thanks! I'm looking into all the options... its not the $50 bucks, its whether I'm going to need all the options... but the deeper I get into this project it looks like I'm going to want to get the right tools. Thanks again.

UsbtinyIsp hands down, I own one for 3 years and never had a problem. I can plug it to Arduino Uno ISP without extra connections and upload quite easy. And the chinese clones are cheap (mine is a chinese clone and works perfect).

Dont buy dragon, its very easy to burn, I burnt mine.

At this point in time, unless you plan on doing source level debugging, which requires doing some hacking into the IDE build process or using your own makefiles, I wouldn't spring the extra $ for the Atmel-ICE. i.e. if all you plan to do is ISP programming, then I'd get a low cost ISP programmer. The ISP programmers are so cheap it is a nice tool to have and you can always get the Atmel-ICE later if you find you do need it. I think a good determining factor for which ISP programmer to get is to select one that comes supported "out of the box" by the IDE. While it isn't difficult to add additional programmers, having it built in makes it a little bit easier You can see which ones are supported by clicking on [Tools]->[Programmer]

More ramblings and information below --- bill


I wouldn't buy a dragon. I've had one for around 5 years and while it is useful for source level debugging (On linux I use ddd (for the gui) on top of gdb to source level debug Arduino sketches), I use a cheap USBasp programmer for ISP programming much more often because the dragon is slower AND more importantly, the Dragon won't work with the IDE to burn a bootloader unless you go patch avrdude or the IDE.

This issue shows up because the IDE does 2 back to back commands when burning a bootloader to set the fuses and do the bootloader burn.

There is a bug in avrdude that resets the USB bus which causes the Dragon to reset which causes avrdude to not see the Dragon, which causes avrdude to fail on the 2nd back to back command. I've tried for years to get avrdude patched but the Joerg believes it is a libUSB issue and refuses to pull in the 3 line patch to fix it.

So the only alternative is to either patch the IDE to do everything in a single command vs 2 commands, or patch avrdude to fix back to back commands. Since avrdude is shipped with the IDE, even if you have a patched avrdude on your path, unless you go remove the avrdude that is shipped with the IDE, the IDE will run its avrdude vs the avrdude installed on the system.

I have no idea if this same reset USB issue affects the newer Atmel-ICE. It is very possible that it does since the same issue affected the older version AVR ICE product.

I always thought the Dragon was a big disappointment. Not only is the design expensive so the cost was fairly high ($50 with no case, or cables) but it was DOG slow at doing things. Even simple ISP programming was more than double the speed of the Dragon with a cheap USBasp device. There is no reason Atmel couldn't have created an ISP/Debugger device that leveraged more on host resources get the cost down, kind of like what MicroChip did with the picKIT.

One issue you may run into if you do get a USBasp device is that many are not running the latest firmware. The newer firmware can set the clock in USB messages and when using the newer avrdude you will get warning messages since it ALWAYS trys to use these new messages even if the user does not attempt to override the default clock from the command line. (avrdude should not attempt to set the clock to it default rate when the user is not overriding the default clock rate) This is another avrddude issue that is easy to fix but I've not been able to get the changes applied to the code.

--- bill

I have been using a USBasp cable such as this one: http://www.ebay.com/itm/USBASP-USBISP-AVR-Programmer-Tmega8-USB-10-Pin-to-Standard-6Pin-Adapter-Board-US-/221540082270?pt=LH_DefaultDomain_0&hash=item3394d1625e And eXtreme Burner AVR for a couple years. It's wonderful, Windows graphical user interface (you do everything with your mouse). You can read and/or write the sketch.hex file, fuses (or modify fuses), and the bootloader (if you're using one or want to burn one into your chip). You can selectively read and/or write any one of the three items. eXtreme burner is free but they ask for contributions. I finally gave them 20 bucks because I have probably used it over a hundred times. I put bootloaders on all my raw atmega8 and atmega328 chips. You can put a working chip into your socket (I suggest getting a ZIF socket) Read ALL, replace the chip with your target chip and Write ALL. Everything, including the sketch and fuses, will be copied. Takes a couple minutes and you don't have to learn to use command line tools such as AVRdude.

When you compile a sketch, the .HEX file is in a folder such as C:\users\XXXX\appdata\local\temp\buildnnnnnnnnnn.tmp where XXXX is your account user name (mine is just Jim, for example) and nnnnnnnnnn is some seemingly random numbers. The hex file will be named "YourSketchName.cpp.hex"

If you're looking to program bare chips (DIP format) then you should stick with ArduinoISP and build a shield with a nice ZIF socket so you can just drop the chip in, program it, and use the chip in your project. There are also a number of predesigned shields out in the wild if you do a little searching. I guess this assumes that all of your project boards won't have the AVR soldered in place but rather set in a socket but that's a pretty good practice anyway.

pegwatcher: I have been using a USBasp cable such as this one: http://www.ebay.com/itm/USBASP-USBISP-AVR-Programmer-Tmega8-USB-10-Pin-to-Standard-6Pin-Adapter-Board-US-/221540082270?pt=LH_DefaultDomain_0&hash=item3394d1625e And eXtreme Burner AVR for a couple years. It's wonderful, Windows graphical user interface (you do everything with your mouse). You can read and/or write the sketch.hex file, fuses (or modify fuses), and the bootloader (if you're using one or want to burn one into your chip).

You can also just use the IDE with an ISP programmer like USBasp rather than using a bootloader. From the IDE you can burn a bootloader, which sets the fuses according to the chosen board entry from boards.txt You can also upload a sketch using "upload with programmer". If you want to just click the IDE upload button rather than having to use [File]->"upload with programmer" then you have to create a board type that specifies your ISP programmer. After that it works the same as when a bootloader is used.

The nice thing about eXtreme Burner AVR is that it does not erase the bootloader as is normally the case with SPI, where everything is erased, including the bootloader (if the chip has one). With eXtreme Burner you just write the sketch .hex file or change the fuses, without messing with the bootloader. It apparently does an erase/write one byte at a time for sketch .hex files.