I'd like to mimic a digital volt meter's high input impedance (10 to 11MΩ) at an analogue input (ADC) on a microcontroller. Currently I'm using an ATmega32U4-based Kookye Pro Micro.

Specifically, I've rigged up a simple voltage monitoring loop, very similar to this one. I currently have a voltage divider (10KΩ and 90KΩ) feeding into an analogue pin, with 5V powering the microcontroller (a reference voltage). So I'm able to measure up to 50V, and the values I'm getting for known power sources correspond to what I expect.

The reason I'd like to mimic DVM-like high input impedance is because I'd like to be able to monitor the voltage off on an RF dummy load that has a tap for measuring input power via voltage. The designers of the dummy load have confirmed to me that "the dummy load is designed to give accurate power readings with a 10-11 megohm input resistance digital voltmeter."

The voltage monitoring circuit gives erratic readings when attached to the dummy load (with input applied). With a low-power load (~5V), it mostly reads 0(V), but with higher a power load (over 10W), it reports other readings too—all low, never going above 1.5V or so (the expected measurement for that amount of power is over 30V).

So the question is whether something can be rigged up so that the microcontroller's ADC can be made to measure voltage similarly to a DVM with high input impedance. If so, what sorts of options are there? If not, what is the limitation?


1 Answer 1


You can just add a Rail-to-rail CMOS-input op-amp as a unity-gain buffer. If you need gain (for a lower input range than the ADC reference), add a couple of resistors in a typical non-inverting amplifier configuration. Best to put 100nF or so across the op-amp power supply pins.


simulate this circuit – Schematic created using CircuitLab

For more than the ADC reference (like 30V) you need to add an voltage divider at the input where the 10M resistor is. For example if your ADC reference is 5V you could use 9M + 1M for 50V full-scale. The impedance seen by the source is 10M.


simulate this circuit

  • \$\begingroup\$ Do I understand that the resistor values in the voltage divider are what determine the specific impedance? If so, could I skip the op amp and just use a voltage divider where R1+R2 = 10MΩ? If not, could you clarify the role of the op amp (i.e., what is a unity-gain buffer?)? \$\endgroup\$ Commented Aug 6, 2020 at 15:02
  • 1
    \$\begingroup\$ The divider determines the impedance the source sees and the op-amp gives a low impedance output to keep the Arduino input happy. < 10K is recommended for the latter. Unity gain buffer is a circuit that (ideally) produces the same voltage at the output as at the input. \$\endgroup\$ Commented Aug 6, 2020 at 15:08
  • \$\begingroup\$ Thanks for the explanation. I'll give this a try before accepting the answer, but it might be a while because I'll need to order the op amp. \$\endgroup\$ Commented Aug 6, 2020 at 15:41
  • \$\begingroup\$ I wired this up just as you suggested, with an MCP6021. I get readings as expected for known voltages. With no input, it seems to be sensitive to things like how close it is to my hand, etc. However, it's still reading fractions of a volt from the dummy load. The radio is definitely putting power into the dummy load, on the order of 10W. The resistors get a little warm (with a little time) and especially the diode gets pretty hot. Any thoughts on what might be going on? \$\endgroup\$ Commented Aug 12, 2020 at 2:43
  • \$\begingroup\$ Grounding would be the likely issue. You might want to put a cap across R2. \$\endgroup\$ Commented Aug 12, 2020 at 2:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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