If you are searching for the best ADC converter to translate a 2.50V analog sensor signal into digital counts, the Texas Instruments ADS1115 (16-bit) outputs exactly 19,999 counts (at a 4.096V full-scale range), while a standard Arduino Uno (10-bit) outputs 511 counts (at a 5.0V reference). The universal conversion formula is Counts = (Vin ÷ Vref) × (2^n - 1), where Vin is your measured voltage (2.5V), Vref is your reference voltage, and n is the bit depth. Selecting the right chip depends entirely on matching your voltage range to the converter's resolution without being defeated by circuit noise.
| ADC Model | Bit Depth | Vref / FSR | 2.5V Count Output | LSB Size | Approx. Price | Best Application |
|---|---|---|---|---|---|---|
| ESP32 Internal | 12-bit | 3.3V (Nominal) | 3,102 (Non-linear) | 805 µV | $0 (On-chip) | Basic thresholds, button sensing |
| Arduino Uno (ATmega328P) | 10-bit | 5.0V | 511 | 4.88 mV | $0 (On-chip) | Potentiometers, basic light sensors |
| Microchip MCP3008 | 10-bit | 3.3V | 775 | 3.22 mV | $2.50 | Multi-channel SPI sensor arrays |
| TI ADS1115 | 16-bit (15+sign) | 4.096V | 19,999 | 125 µV | $4.20 | Precision I2C sensor scaling, battery monitoring |
| TI ADS1256 | 24-bit | 5.0V | 8,388,607 | 0.59 µV | $12.50 | Strain gauges, load cells, RTDs |
The Core Conversion Formula and Fixed Assumptions
An Analog-to-Digital Converter is fundamentally a unit translator: it maps a continuous physical voltage into a discrete integer. To get the exact count, you must substitute your hardware values into the standard formula:
Counts = (Vin / Vref) × (2^n - 1)Example (ADS1115 at 4.096V FSR):
(2.5V / 4.096V) × 32,767 = 19,999Example (10-bit at 5.0V):
(2.5V / 5.0V) × 1,023 = 511
What fixes the answer? The output count is rigidly fixed by two assumptions: your Reference Voltage (Vref) and the Bit Depth (n). If your Vref drifts by 1% due to thermal noise or a poor linear regulator, your digital count drifts by 1%, regardless of how stable your sensor is. This is why precision projects abandon the microcontroller's internal Vref (often tied to the noisy USB 5V or 3.3V rail) in favor of external ADCs with internal precision bandgap references, like the ADS1115.
Note on the ESP32: While the ESP32 features a 12-bit internal ADC, its conversion curve is notoriously non-linear above 2.5V and suffers from high noise floors. For any ESP32 project requiring precise voltage-to-count translation, bypassing the internal ADC for an I2C ADS1115 is the standard engineering fix.
How the Conversion Shifts: Low Voltage vs. Mains (120V/230V)
The formula above assumes a clean DC signal between 0V and Vref. But how does the answer shift when you are measuring AC mains (120V or 230V) or 3-phase power? An ADC cannot read negative voltages or voltages above its Vref without destroying the silicon. You must use a step-down transformer and a DC bias offset, which fundamentally shifts your "zero" point.
- 120V AC Mains: Peaks at ~170V. Stepped down 100:1 to 1.7V peak. You add a 1.65V DC bias. The ADC "zero" count shifts to mid-scale (e.g., 16,384 on a 16-bit ADC). The AC waveform swings the counts between roughly 12,000 and 20,000.
- 230V AC Mains: Peaks at ~325V. Stepped down 200:1 to 1.6V peak. With the same 1.65V bias, the counts swing between 11,500 and 21,200.
- 3-Phase Power: You cannot measure 3-phase simultaneously with a single multiplexed ADC channel. Multiplexing introduces a time-delay (phase shift) between Channel A, B, and C readings, which ruins Power Factor (PF) calculations. For 3-phase, you must use three separate ADC channels sampling at the exact same microsecond, or three dedicated ADC chips.
Below is the conversion table for neighboring DC values (±20% of our 2.5V baseline) using the best-in-class 16-bit ADS1115 at a 4.096V FSR:
| Input Voltage (Vin) | Vref (FSR) | Calculated Count | Delta from 2.5V Baseline |
|---|---|---|---|
| 2.00V (-20%) | 4.096V | 15,999 | -4,000 counts |
| 2.25V (-10%) | 4.096V | 17,999 | -2,000 counts |
| 2.50V (Baseline) | 4.096V | 19,999 | 0 counts |
| 2.75V (+10%) | 4.096V | 21,999 | +2,000 counts |
| 3.00V (+20%) | 4.096V | 23,999 | +4,000 counts |
When High-Resolution Conversion Becomes Meaningless
A common mistake among hobbyists is assuming that a higher bit depth automatically yields a better measurement. The conversion becomes mathematically meaningless when your circuit's noise floor exceeds the Least Significant Bit (LSB).
Consider the 24-bit TI ADS1256. At a 5.0V reference, the LSB represents a staggering 0.59 µV. However, a standard solderless breadboard with 22 AWG jumper wires acts as an antenna, easily picking up 2 mV to 5 mV of electromagnetic interference (EMI) and thermal noise from nearby digital I2C/SPI lines.
If your noise floor is 2 mV (2,000 µV), and your LSB is 0.59 µV, your bottom 11 bits of resolution are entirely composed of random noise.
2,000 µV / 0.59 µV ≈ 3,389 counts of jitter. Buying a $15 24-bit ADC for a breadboard prototype yields the exact same usable data as a $2 12-bit ADC. To use 24-bit resolution, you must design a custom PCB with a solid ground plane, guard rings, and heavy bypass capacitance.
For 95% of embedded sensor projects (battery voltage monitoring, temperature via thermistors, current sensing via shunts), the 16-bit ADS1115 remains the undisputed best ADC converter. Its 125 µV LSB perfectly matches the noise floor of well-built point-to-point wiring, and its internal programmable gain amplifier (PGA) allows you to scale down the Vref to 0.256V for measuring tiny shunt voltages without external op-amps.
Quick FAQ: ADC Selection Edge Cases
Q: Can I just use a voltage divider to step down 12V to 3.3V for the ESP32 internal ADC?
A: Yes, but the ESP32's internal ADC input impedance is relatively low and non-linear. A high-impedance voltage divider (e.g., 100kΩ and 33kΩ) will cause reading errors due to the internal sampling capacitor failing to charge fully. Keep divider resistors under 10kΩ total, or add a 100nF ceramic capacitor at the ADC pin to act as a charge reservoir.
Q: Why does my MCP3008 read 1023 when the input is only 3.0V?
A: The MCP3008 uses the supply voltage (VDD) as its default reference. If you are powering it from a slightly over-volted USB rail (e.g., 5.1V) but feeding it a 3.3V signal, your counts will scale against 5.1V. Always tie the MCP3008 VREF pin to a clean, regulated 3.3V source independent of the digital VDD rail.






