For my project I have to measure a signal of the order of few microvolts. As we know the least an Arduino can measure is ~5mV, due to its 10bit ADC and 5V reference voltage.

A solution to this problem can be to use an external ADC (16bit, I think will do).

Can you please guide me on this problem.Is it possible to use a external ADC,if yes how should I.Any other simple solution ? Thank You


  • 1
    You could get around 1mV resolution by using the internal 1.1V voltage reference inside the Arduino. However the maximum voltage you can measure will also be lowered to 1.1V
    – Gerben
    Commented Jul 4, 2016 at 13:00
  • 1
    You can get resolutions as fine as 7.8125µV / LSB using a MCP3428 (4 true differential channels). I sell them on a shield on eBay: ebay.co.uk/itm/…
    – Majenko
    Commented Jul 4, 2016 at 13:03
  • 1
    What is the range of input voltages you need to measure? If it is for example 0 to 10 mV, and the built in ADC's 10 bit resolution is sufficient, you could put an amplifier with a gain of 500 in front of the ADC and get 10 uV per count. Noise may be a problem however
    – Jim Harman
    Commented Jul 6, 2016 at 1:08
  • Range is 0- 30mV (atleast) Commented Jul 6, 2016 at 2:45

1 Answer 1


Yes, if you have a 0 to 30 mV signal that you need to measure to an accuracy of 2 microvolts, you'll need an ADC with an effective number of bits (ENOB) of at least 13.9 bits and an amplifier to make the signal to match the range accepted by the ADC. Most ADCs pretty much require some sort of op-amp or differential amplifier between such low-level input signals and the ADC input pins. A few ADCs have a differential amplifier already built in -- that makes things a lot easier to get working, but I don't know if any of such ADC available would meet the other requirements of your project.

I don't know any way to make such high-resolution measurements other than using a dedicated external ADC chip.

You'll want to read the ADC datasheet -- some of them, and so far all the microcontrollers I've seen that claim to have a built-in "16 bit ADC", have an effective number of bits (ENOB) worse than the 13.9 ENOB you need at the sampling rates I typically use.

Adafruit has a very nice tutorial describing how to connect the 12-bit ADC ADS1015 or the 16-bit ADC ADS1115 to an Arduino.

The Arduino playground has a brief tutorial describing connecting a 12-bit ADC MCP3208 or a 13-bit ADC MCP3304 to an Arduino.

I see from the Arduino blog and other sites that people have connected some even higher resolution ADCs to an to an Arduino board, including the 24-bit Linear LTC2440 ADC; the 18-bit LTC2400 ADC (24 bit at 5 samples per second); and the 24-bit ADC TI ADS1220.

Sounds like a fun project. Good luck.


Everyone that uses an ADC needs some antialiasing filter between the signal and the ADC.

People that measure very faint signals usually need some sort of amplifier between the signal and the ADC. You may find the list of suggested op amps on p. 7 of the AMP03 datasheet useful.

Because historically ADCs were expensive (and high-resolution ADCs were unavailable), people have developed many clever tricks for processing signals before feeding the processed signal into a relatively low-resolution ADC. (Lock-in amplifiers, chopper amplifiers, manual precision gain adjustment, manual precision offset adjustment, heterodyning, etc.)

Have you tried asking "What sort of amplifier do I need to measure ((something)) with a 16-bit ADC" at https://electronics.stackexchange.com/ to learn some of those tricks that specifically apply to ((something))?

  • Thank You so much David for your answer.Yeah MCP3304 looks like a better ADC as my signal has a frequency of 10Hz.The processing has to be done before 100ms.ADS1115 samples at a very low rate.Is it possible to measure 10microvolt using mcp3304 ? Commented Jul 7, 2016 at 11:51
  • 1
    The ADS1115 can be programmed to several different sampling rates, from 860 samples/s to 8 samples/s. Often that is adequate for a nominal 10 Hz analog data signal. What are you really trying to measure?
    – David Cary
    Commented Jul 8, 2016 at 14:47
  • Yeah I think you are right David. ADS 1115 is good enough.My signal is pulsed ,0.5-1microsecond long at a period of 100 milliseconds.I am using a peak detector for this.To acquire the data(from the peak-detector,i.e capacitor) i need an ADC. Commented Jul 12, 2016 at 16:08

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.