The exact resolution of an ADC converter depends entirely on its bit-depth and reference voltage. For a standard 10-bit ADC (like the ATmega328P on an Arduino Uno) running at a 5.0V reference, the resolution is 4.88 mV per step. For a 12-bit ADC (like the ESP32's internal SAR ADC) at a 3.3V reference, the resolution is 0.805 mV per step. The formula used to calculate this is LSB = Vref / (2^n). Substituting the Arduino values: 5.0V / (2^10) = 5.0 / 1024 = 0.00488V (4.88 mV). Substituting the ESP32 values: 3.3V / (2^12) = 3.3 / 4096 = 0.000805V (0.805 mV).
| Bit-Depth (n) | Steps (2^n) | Vref = 1.1V (Internal) | Vref = 3.3V (ESP32 / RPi) | Vref = 5.0V (Arduino Uno) |
|---|---|---|---|---|
| 8-bit | 256 | 4.29 mV | 12.89 mV | 19.53 mV |
| 10-bit | 1,024 | 1.07 mV | 3.22 mV | 4.88 mV |
| 12-bit | 4,096 | 0.268 mV | 0.805 mV | 1.22 mV |
| 16-bit (e.g., ADS1115) | 65,536 | 0.016 mV | 0.050 mV | 0.076 mV |
The Core Formula and Reference Voltage Assumptions
The theoretical resolution of an Analog-to-Digital Converter (ADC) is defined by the weight of its Least Significant Bit (LSB). The math is rigid: Resolution = Vref / 2^n. However, the assumption that fixes this answer is the Reference Voltage (Vref). Many beginners assume an Arduino Uno reads exactly 5.000V because it is powered by a 5V USB pin. In reality, USB power from a PC often sags to 4.75V or spikes to 5.25V. If your Vref drops to 4.8V, your 10-bit resolution shifts from 4.88 mV to 4.68 mV, and every analog reading you map to a voltage will be proportionally skewed.
To lock your assumption and guarantee your math matches reality, you must either measure your Vref pin with a calibrated multimeter or switch to a dedicated internal/external voltage reference. The ATmega328P features an internal 1.1V reference. While this limits your maximum measurable voltage to 1.1V (requiring a voltage divider for higher signals), it completely isolates your ADC resolution from USB power rail noise, fixing your 10-bit resolution at a highly stable 1.07 mV per step.
How Resolution Shifts Across Microcontroller Platforms
Just as AC power calculations shift drastically between 120V single-phase and 480V three-phase systems, ADC resolution shifts drastically based on the microcontroller's native logic level and internal architecture. A 3.3V system (ESP32, STM32, Raspberry Pi Pico) will always yield finer resolution than a 5V system (Arduino Uno/Mega) for the exact same bit-depth. A 12-bit ESP32 resolves 0.805 mV, while a hypothetical 12-bit 5V system resolves 1.22 mV.
But what happens when your reference voltage isn't a clean nominal number? Battery-powered projects often see Vref sag as the cell discharges. Below is a table showing how the resolution of a 12-bit ADC shifts across a ±20% range centered on a nominal 3.3V Li-ion/LiPo battery curve.
| Actual Vref (V) | Voltage State | Resolution (mV/step) | Max Readable Voltage |
|---|---|---|---|
| 2.64V | Severe Brownout (-20%) | 0.644 mV | 2.64V |
| 2.97V | Low Battery (-10%) | 0.725 mV | 2.97V |
| 3.30V | Nominal USB/Regulated | 0.805 mV | 3.30V |
| 3.63V | Overvoltage (+10%) | 0.886 mV | 3.63V |
| 3.96V | Fault Condition (+20%) | 0.966 mV | 3.96V |
If you are designing a battery-operated sensor node, relying on Vcc as your Vref means your resolution is a moving target. Using a precision external reference like the TI ADS1115 (which includes an internal precision reference and PGA) locks your 16-bit resolution at exactly 0.050 mV per step when configured for a 3.3V full-scale range, regardless of battery sag.
When Theoretical Resolution Becomes Meaningless
The mathematical conversion becomes entirely meaningless when the system noise floor exceeds the LSB size. This is the most common trap for embedded engineers upgrading from 10-bit to 12-bit or 16-bit converters without changing their hardware layout.
Take the ESP32's internal 12-bit SAR ADC. Mathematically, it resolves 0.805 mV at 3.3V. However, the Espressif ESP32 technical reference manual documents a known non-linearity and noise floor issue. The ADC exhibits roughly 100 mV of noise and severe non-linearity near the 0V and 3.3V rails. Because 100 mV is equivalent to roughly 124 steps (100 / 0.805), the bottom 7 bits of your 12-bit reading are essentially random noise. Your theoretical resolution is 0.805 mV, but your effective resolution (ENOB - Effective Number of Bits) is closer to 9 or 10 bits. Attempting to read a thermistor or precision load cell directly on an ESP32 pin without heavy software oversampling or an external ADC like the ADS1115 will yield jittery, unusable data.
Similarly, on an Arduino Uno, the ATmega328P datasheet specifies an absolute accuracy of ±2 LSB. If you are measuring a 5V signal, ±2 LSB equals ±9.76 mV of inherent error. If your sensor outputs a 5 mV change per degree Celsius, the ADC's inherent quantization and conversion error will completely mask the physical change you are trying to measure. The conversion math works, but the physical measurement is meaningless.
FAQ: ADC Resolution Edge Cases
Q: Does a higher bit-depth always mean a better measurement?
A: No. Bit-depth only defines the size of the digital "buckets" (LSB). If your analog signal has 20 mV of electromagnetic interference (EMI) from a nearby switching power supply, a 16-bit ADC (0.050 mV resolution) will simply digitize that 20 mV of noise in high definition. A 10-bit ADC (4.88 mV resolution) will average some of that noise out naturally. Match your ADC resolution to your signal's signal-to-noise ratio (SNR).
Q: Why does my 16-bit ADS1115 only return 15-bit positive values?
A: The ADS1115 is a differential ADC. When configured for single-ended measurements (measuring a pin against GND), the most significant bit (MSB) is used as the sign bit to indicate polarity. Therefore, the maximum positive reading is 32,767 (15 bits), not 65,535. Your resolution calculation remains Vref / 32768 for single-ended positive voltages.
Q: Can I improve resolution by oversampling?
A: Yes. By taking multiple samples and averaging them, you can artificially increase resolution. The rule is that every time you quadruple the number of samples (4x, 16x, 64x), you gain 1 additional bit of effective resolution. This requires the presence of at least 1 LSB of natural Gaussian noise in the system to dither the signal across adjacent digital buckets.






