3

Looking at Arduino as ISP and Arduino Bootloaders, it is stated

The 10 µF electrolytic capacitor connected to RESET and GND of the programming board is needed only for the boards that have an interface between the microcontroller and the computer's USB, like Mega, Uno, Mini, Nano. Boards like Leonardo, Esplora and Micro, with the USB directly managed by the microcontroller, don't need the capacitor.

Some of the Fritzing diagrams show the electrolytic capacitor connected between the RESET and GND pins:

Mega as ISP to Uno

But it is not shown in all of the images on that page.

Nor it is shown in this image from Nick Gammon's Atmega bootloader programmer (see original image):

Uno programming a Mega

So, is the capacitor really needed, when using a Mega or Uno as an ISP, and if so, why exactly?


I was wondering after having written this answer to the question How to install new ATMEGA firmware via the ISP pins? for a 3D Printer control board.

2 Answers 2

3

The purpose of the capacitor is to prevent the "master" Arduino (the Mega in the first image above) from resetting when the serial port is opened. If that board resets, then programming fails.

There are many ways of preventing that reset - some more permanent than others - but the capacitor trick is one of the simplest.

So yes, you do need the capacitor unless you have made other modifications to prevent the reset.

I think the purpose of the second image is more to illustrate how to use the ICSP headers and where to connect the target's reset pin on the master. It is to be seen as complementary to the first image.


Edit:

It seems what you are using is not Arduino As ISP, but instead something written by Nick Gammon that acts as a standalone programmer. The rules for Arduino As ISP do not apply in this case. Since you are not programming via the master Arduino (as you would with Arduino As ISP) there is no need to prevent the master from resetting.


Here's a little history about the auto-reset system:

Originally, when the Arduino used the FT232, the DRT signal would reliably reset it automatically. The operating system (all operating systems) would automatically assert DTR when the port was opened, and all was well.

Then, out of the blue, and without telling anyone, Future Tech removed that auto-DTR asserting from the FT232 driver for Windows. Since Windows doesn't control DTR for you, but leaves it up to the driver or the software (and all other operating systems automatically control DTR for you - Windows has to do the opposite of everyone else - it's in their remit...!) all of a sudden the boards stopped resetting properly for programming.

So Arduino added specific reset code into the IDE to get around the problem (interestingly enough: if you watch the DTR pin on Linux you see it being asserted multiple times when programming - both the OS and the IDE are toggling it).

But then Arduino moved to the ATmega8U2 (and later the ATmega16U2) chip which uses the standard CDC/ACM instead of the custom FT232 driver. Now the auto DTR assertion was working again, but they kept the manual assertion in the IDE to cope with older boards in Windows.

I guess they didn't put the DTR assertion workaround in the bootloader programming code since you don't really want DTR asserted at that point anyway.

So if you have an FT232-based Arduino and are running Windows I guess there is no need for the capacitor, since DTR won't be asserted by the OS.

However in Linux and OS X, regardless of the USB chip, you will need the capacitor, since it will always assert DTR.

But then along came China and threw the CH340G into the works. Now we have a third option, with dodgy drivers from who knows where. And who has the slightest clue what they do? Do they assert DTR for you? Your guess is as good as mine. If it doesn't, then you won't need the capacitor. If it does, then you will.

It's all such a mess now thanks to too many options and combinations. It's simpler just to have the capacitor regardless, since it won't stop it working if it's not actually needed in your specific configuration.

1
  • Comments are not for extended discussion; this conversation has been moved to chat.
    – Majenko
    Commented Aug 22, 2018 at 12:01
2

If you're using Nick Gammon's programmer, the RESET signal to the target board comes from the Arduino programmer - from Pin 10. Read his instructions: https://www.gammon.com.au/bootloader

You modify the 6 pin cable as shown on his website.Cut wire 5 and attach to Pin 10 of the programmer board

Not the answer you're looking for? Browse other questions tagged or ask your own question.