Why the capacitor between RESET and GND for Arduino as ISP

So, I have been using my arduino as ISP wired up from one arduino to another over ICSP, where pin D10 on the programmer is connected to RESET on the target's ICSP, but otherwise with the rest of the ICSP pins connected 1-1 between programmer and target, and with a capacitor between RESET and GND on the headers of the programmer. It works swell either via Arduino IDE w/Arduino as ISP selected as the programmer or via avrdude directly. My question is why the capacitor? What does it do? (electronics relative newb).

Thanks,

Will

  • You are one of a very few who asks questions :+1:

  • A gift for you.

2 Likes

I’ll take a SWAG since I don’t know what hardware you’re using. Generally, a reset is needed for the processor to return to a known state and begin executing code at a specific location (which varies by processor). When the reset begins, the pin is driven low by a switch or another device. Once that device opens, a capacitor starts charging, and when it reaches the reset threshold, the processor starts. This ensures the power and other conditions have stabilized. Adding capacitance increases the time it takes for the processor to come out of reset, delaying the start of the code. I hope this answers your question.

It delays the change a bit to charge or discharge a cap. nature abhors change.

@Delta_G So... normally RESET is HIGH?, and the cap between RESET and GND charges. When it gets the reset signal (meaning voltage on RESET is removed), the cap keeps it HIGH long enough that it doesn't trigger the drop into the bootloader (on the programmer which has the cap)... Does that sound like what you're saying?

@LarryD, ok. I finally figured out what you were showing me. That makes sense, if I'm understanding the role of the capacitor to hold RESET high for however long it takes my 10 microfarad capacitor to discharge and that exceeding the timing of the programmer's bootloader to be triggered...

  • Yes

  • When the PC sends a sketch to the Arduino, a signal called DTR (Data Terminal Ready) is outputted from the Arduino USB receiver chip.
    This DTR signal generates a LOW signal called RESET. RESET going LOW resets the controller, the controller then runs the boot-loader code.
    The addition of the external 10uF to the RESET signal prevents the voltage from ever getting to LOW, hence the controller never sees the reset signal.

1 Like
  • It takes a 10uF capacitor to prevent the RESET from ever getting to a LOW i.e. RESET always stays HIGH.

  • Advantage of using the ISP process is it removes the boot-loader from the target Arduino.
    This speeds up the target Arduino at boot up time by 23X.
    However, boot-loader programming no longer works (unless you rewrite it later).

Speed increase:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.