I've noticed that the effect of capacitively loading an Arduino GPIO is a perennial question, that tends to attract speculative argument. It's not surprising we resort to anecdote and superstition, given the lack of firm guidance from Atmel. I became interested in the same question recently, and being of the empirically motivated type, thought I'd chuck two data points into the sea of possibility.
I picked two Arduino UNO, new out of the box, to sacrifice at the alter of experimentation. One is a genuine R3 and one a R3 clone from DuinoTECH. I have no reason to expect a difference between the two, given that an ATmega328P is an ATmega328P, but it doesn't hurt to broaden the sample space a little.
Both Arduinos are connected to their own resistor and capacitor in series, between GPIO pin D13
(blue wires) and ground (yellow wires). The resistor is on the ground side and the capacitor is on the GPIO side. Both Arduinos monitor their GPIO pin D2
(orange wires), which is periodically toggled by another UNO acting as master. When the slave Arduinos detect a change, they mimic it on D13
. The master meanwhile, monitors the two slave D13
pins (white and green wires) to check when the signal has been faithfully propagated.
Both Arduinos are powered by a bench supply set to 9V (red and black wires). All three Arduinos share a common ground, which is not shown in the photo.
With a CRO I'm measuring:
- Channel 1 and 3: voltage at
D13
, with respect to ground. Hereafter, the "pin voltage". - Channel 2 and 4: voltage between cap and resistor, with respect to ground. Hereafter, the "voltage across the resistor".
Everything is as long leaded and crudely breadboarded as you can see.
I warmed up with a 1kΩ 1% 0.5W and a 0.1µF 20% 50V Y5V ceramic capacitor, and a pulse period of 1 second.
The rising and falling edges are as you would expect - the GPIO pin manages nearly the full 5V swing, only having to source or sink 5mA, and decaying to full voltage and zero current with a time constant of about 100µs. There is some very minor discrepancies between Arduino 1 and 2, as you might expect from component tolerances and the variance in response time to the master signal.
... splitting into multiple posts because I'm an untrusted noob ...