Electronic – arduino – the lowest voltage that a microcontroller can successfully read on the analog pin

adcarduinomicrocontroller

I'm testing the Seeeduino v4.2 board with the ADCInOutSerial code in the Arduino IDE and the lowest voltage the board can read is 18 mV, showing an equivalent ADC of 4 on the serial monitor.
The chip that the board uses is the ATmega328P. It works on a 5 V power supply and has a 10-bit ADC (1024 levels), so the voltage that I calculated for an ADC level of 1 is, 5/1024 = x/1, where x is the equivalent voltage for the ADC level of 1, which comes to 5 mV.

But the board fails to read anything below 18 mV. Is this normal for the chip to be unable to read an ADV value below 18 mV or am I going wrong somewhere?

I tested the voltage using a multimeter.

Best Answer

See data sheet section 28.8 ADC Characteristics: typical offset error 2 LSB and typical gain error 2 LSB. Absolute accuracy (INL, DNL, gain error, offset error, etc) could be typically 4.5 LSB under some operating conditions. These are Typical, not Min/Max guaranteed specs. So yes it’s pretty much normal behavior. You can buy an external ADC that has guaranteed min/max performance specs. But the internal ADC trades convenience for performance. Oh and by the way, your multimeter probably has its own measurement error specs, check the booklet it came with.