Go Down

Topic: analog pin resistance? (Read 2753 times) previous topic - next topic

winner10920

Anyone know what the actual impedance of an analog pin is? Im wondering what the max practical voltage divider would be without being affected by the analog reading

CrossRoads

Atmel spec says to have source with 10k or lower impedance.
Higher works, just need to allow longer settling time of the signal.
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

dc42

The datasheet says it's 100Mohms typical. However, that's not the whole story, because when you switch the multiplexer to select the analog input you want, the sample capacitor has to charge up. The code for analogRead() allows no time for this (stupidly, IMO) which is why you often see advice to read from the port twice and discard the first reading. My own measurements indicate that a 10us delay between switching the mux and starting the ADC conversion gives reliable results with up to 100K source resistance. The conversion itself takes around 100us, so an extra 10us isn't very significant.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

winner10920

I usually discard once and read,
but if I do a 10M and a 2.2M resistor divider I can get an accurate reading without altering it
id try it but I don't want to buy the resistors if its not worth it

MarkT

To be strictly accurate the input _impedance_ is 14pF (the sample and hold capacitor)....  There are internal series resistances of 1k to 100k before that (yes, the datasheet has a value with 2 decades of uncertainty! fig 23-8 in datasheet).  So source impedances of around 100k or more will definitely start to increase the settling time (which is 10us worst case by my calculations).

The sample and hold freezes 1.5 ADC clocks after the multiplexer updates, and the default Arduino setting is an ADC clock period of 8us.  Thus there is 12us settling time available, fine for low impedance sources (25k or less - though if the internal series resistance is more like 1k than 100k a source of 120k would do OK).  For a source of 1M 100us is needed (so two successive calls to analogRead () will be enough.

For more than 1M you have to scale the settling times by 100us per 1M.

An ADC conversion takes 13 ADC clocks (104us in default setup)
[ I won't respond to messages, use the forum please ]

winner10920

So if I had a 10M source it would take 20 throw away calls to analogRead()?

MarkT

Or one call, a delay of 1.8ms, then a second read - the first read selects the correct pin to multiplex to the ADC sample/hold circuit and its capacitor, the second actually runs the ADC successive-approximation loop.

It you only read from one analog pin, life is easier.

Well thats the theory - be interesting to measure the real behaviour.
[ I won't respond to messages, use the forum please ]

Go Up