What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Yes—the RP2040’s 12-bit ADC has a documented silicon erratum. It can show unusually large differential-nonlinearity (DNL) errors around four code regions and may become non-monotonic, meaning the reported value can occasionally fail to rise as the input voltage rises. The problem was investigated and publicly discussed in 2021, then documented as erratum RP2040-E11.

That does not make every Pico ADC reading unusable. The internal ADC remains suitable for many low-cost, slow-changing measurements, but it should not be treated as an ideal 12-bit precision instrument. Applications requiring guaranteed monotonicity or tightly specified linearity should use calibration, signal conditioning, or an external ADC.

What Raspberry Pi investigated

In January and February 2021, developers reported unexpectedly large DNL excursions in the RP2040 ADC, including possible non-monotonic behavior. A technical report filed in Raspberry Pi’s pico-feedback repository on February 13, 2021 described measurements that were inconsistent with ordinary small ADC noise.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Raspberry Pi representatives said the behavior was understood and that additional characterization would be added to the datasheet. Raspberry Pi subsequently attributed the apparent root cause to a mismatch between the capacitors used in the ADC’s capacitive digital-to-analog converter (DAC) in production hardware and the values used during simulation. The issue was later formalized as RP2040-E11 in the RP2040 datasheet.

#1 Best Overall
Sale
2Pcs Raspberry Pi Pico Development Board, Raspberry Pi RP2040 Dual-core ARM Cortex M0+ Processor, Running Up to 133 MHz, Support C/C++/Python, 2MB Quad SPI Flash Integrated with SPI/I2C/UART Interface
  • The Raspberry Pi Pico is a beginner-friendly microcontroller board that uses MicroPython to give you a taste of the Internet of Things and microcontrollers. The RP2040 is a well-designed microprocessor that can be utilized in almost any Internet of Things project. It has enough power to complete the task quickly.
  • 【Raspberry Pi RP2040 Microcontroller】Raspberry Pi Pico features Dual-core ARM Cortex M0+ processor, flexible clock running up to 133 MHz. With 264KB of SRAM, and 2MB of on-board Flash memory.Supports up to 16 MB of off chip flash memory via a dedicated QSPI bus
  • 【Multiple Software Support】Pico has rich and complete software support, it comes with a complete Rasberry Pi official C/C++ SDK, Micropython SDK.The programming and burning of Pico need to be carried out on the computer. Supported operating systems and computers include:Raspberry Pie with Raspberry Pi OS,Other platforms equipped with Debian based Linux system Computer with MacOS, Computers with Windows, etc.
  • 【Rich Hardware Interface】Raspberry Pi Pico has 30 GPIO pins, 4 pins for analog signal input and 26 × multi-function GPIO pins, 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels.USB 1.1 supported by host and device, The installation mode can be flexibly selected by users to facilitate welding with other development boards.
  • 【Build Project in Tiny Size】Only 2.1cm*5.1cm ( as small as your thumb). Pico has been designed to use either soldered 0.1" pin-headers or can be used as a surface-mountable 'module'.

The important current distinction is that this is not an ongoing 2021-style investigation. It is a documented characteristic of RP2040 silicon.

The short technical explanation

An ADC divides an input-voltage range into digital code bins. For an ideal 12-bit converter there are 4,096 possible codes, from 0 through 4,095. At a 3.3-volt reference, one ideal code represents approximately:

3.3 V / 4096 = 0.8057 mV

That is nominal resolution, not guaranteed accuracy. Real ADC performance also depends on effective number of bits (ENOB), integral and differential non-linearity, reference accuracy, noise, temperature, source impedance, grounding, and the quality of the signal being measured.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What DNL means

Differential non-linearity describes how much the width of an individual code bin differs from the ideal one-LSB width. A large positive DNL error means a code represents an unusually wide input interval. A sufficiently negative DNL error can produce a missing code. In severe cases, the transfer curve can become non-monotonic: increasing the analog input can produce the same code, an unexpectedly large step, or occasionally a lower code.

This is different from random noise. Noise makes repeated readings vary around a value. DNL is a defect in the converter’s transfer function. Averaging can reduce random noise, but it cannot reliably reconstruct a code transition that is intrinsically irregular.

Which RP2040 ADC codes are affected?

The published characterization identifies prominent DNL regions around:

Rank #2
Freenove Raspberry Pi Pico Board Pre-Soldered Header, Dual-core Arm Cortex-M0+ Microcontroller, Development Board, Python C Java Code, Tutorial Example Projects
  • Raspberry Pi Pico: A tiny, fast, and versatile board built using dual-core Arm Cortex-M0+ processor (Comes with pinout card and stickers)
  • Detailed Tutorial: Provides step-by-step guide with MicroPython, C and Processing (Java) Code (The download link can be found on the product box) (No paper tutorial)
  • Example Projects: Each project has schematics, wiring diagrams, complete code and detailed explanations (Need extra items)
  • Easy to Use: Just connect the board to your computer (installed IDE) with the USB cable to program it
  • Get Support: Our technical support team is always ready to answer your questions
Approximate code Hexadecimal Ideal voltage with a 3.3 V reference
512 0x200 0.4125 V
1,536 0x600 1.2375 V
2,560 0xA00 2.0625 V
3,584 0xE00 2.8875 V

These voltage figures are only ideal conversions. The RP2040 ADC uses its analog supply as its reference, so the corresponding voltages move when that supply changes. The Pico datasheet provides the relevant hardware details.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Do not interpret the list as four isolated “bad output values” that can simply be discarded. The irregularity concerns the neighborhoods around the transitions and the widths of the surrounding code bins. A reading of exactly 512, for example, is not automatically invalid; the input may legitimately be near that transition, and the error may affect adjacent behavior as well.

Does the flaw affect every Pico?

The issue is in the RP2040 ADC design, not in one particular Pico PCB revision. It can therefore affect Raspberry Pi Pico, Pico W, and other boards built around RP2040 silicon.

That does not mean every board will produce equally visible errors. Analog-supply filtering, grounding, layout, input-source impedance, temperature, and measurement equipment can make the observed result better or worse. Those factors can reduce additional noise, but they do not remove the underlying RP2040-E11 erratum.

The Raspberry Pi Pico 2 uses the RP2350 rather than the RP2040. Its silicon and errata are different, so reports about one device should not automatically be applied to the other.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Is this merely ADC noise?

No. Three error sources should be separated:

  1. RP2040-E11: a transfer-function problem associated with the capacitive DAC and its DNL behavior.
  2. Reference variation: the ADC reference is tied to the analog supply, so supply tolerance and ripple directly affect voltage conversion.
  3. Board-level noise and settling: switching regulators, digital activity, grounding, wiring, GPIO configuration, and high source impedance can add further errors.

A 2025 Raspberry Pi forum discussion shows why diagnosis matters: unexpected readings can also result from GPIO pulls, supply behavior, or source impedance. Those are separate failure modes from the silicon erratum. Before blaming RP2040-E11, configure the pin correctly and verify the signal source.

Rank #3
Freenove Raspberry Pi Pico 2 W Board Pre-Soldered Header, Dual Arm Cortex-M33 and Dual Hazard3 RISC-V Microcontroller, Development Board, Tutorial Example Projects
  • Latest Version: Higher core clock speed, double memory, more powerful Arm cores, optional RISC-V cores (compared to the 1 series) (This W version has onboard wireless LAN and Bluetooth)
  • Switchable Cores: Allows users to choose between dual industry-standard Arm Cortex-M33 cores and dual open-hardware Hazard3 cores
  • Compatibility: Delivers a significant performance boost, while retaining software- and hardware-compatible with the 1 series
  • Detailed Tutorial: Provides step-by-step guide with MicroPython, C and Processing (Java) Code (The download link can be found on the product box) (No paper tutorial)
  • Example Projects: Each project has schematics, wiring diagrams, complete code and detailed explanations (Need extra items)

What “12-bit ADC” means in practice

The RP2040 still returns a 12-bit raw code. It has not literally been reduced to an 8-bit converter. However, Raspberry Pi’s current Pico SDK documentation describes approximately 8.7 effective bits.

ENOB is a summary of practical noise-and-linearity performance; it is not the same measurement as DNL and does not mean the lowest four bits are always worthless. The safer interpretation is that the converter’s useful performance is closer to an ideal 8.7-bit converter than to an ideal 12-bit instrument.

The simple conversion below is therefore only an estimate:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
voltage = raw * 3.3 / 4096

It assumes the ADC reference is exactly 3.3 V. In a real design, the analog supply may differ from 3.3 V or contain ripple. Divider tolerance, ground offsets, sensor error, temperature drift, and ADC gain and offset errors may exceed one ideal LSB by a wide margin.

Basic Pico ADC setup

The official SDK sequence initializes the ADC, configures the GPIO as an ADC input, selects a channel, and reads the result:

#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/adc.h"

int main() {
    stdio_init_all();
    adc_init();

    // GPIO26 is ADC input 0.
    adc_gpio_init(26);
    adc_select_input(0);

    while (true) {
        uint16_t raw = adc_read();
        float voltage = raw * 3.3f / 4096.0f;
        printf("raw=%u voltage=%.4f Vn", raw, voltage);
        sleep_ms(100);
    }
}

RP2040 user ADC inputs are GPIO26 through GPIO29, corresponding to ADC inputs 0 through 3. ADC input 4 is connected to the internal temperature sensor. The SDK documentation specifies a maximum sample rate of up to 500 kS/s, but maximum speed does not imply precision or monotonicity.

Rank #4
Treedix Breakout Board for PI PICO Flexible PCB Shield Board
  • This breakout board is specially made for Raspberry Pi Pico, with additional pin headers, which are fully compatible with the board
  • The product needs to be soldered by itself, and the pico can be inserted after successful welding
  • The breakout board is gold-plated on both sides and holes are plated, and the material of the PCB board is excellent
  • The breakout board is equipped with Raspberry Pi pico, which is convenient for users to develop and integrate flexibly
  • Note: The package does not include Raspberry Pi pico. This product needs to be soldered and assembled by yourself
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Practical ways to reduce problems

Configure the ADC pin correctly

Use adc_gpio_init() for the selected input. Check that digital pulls are not left enabled and that the pin is not being configured elsewhere in the program. A GPIO pull or an incorrect alternate function can make a correct ADC appear defective.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use the analog ground and a clean supply

Follow Raspberry Pi’s recommended analog-ground and power arrangement. Keep noisy digital currents away from sensitive analog paths and provide appropriate local supply decoupling. A cleaner analog supply improves reference stability and repeatability, but it does not cure RP2040-E11.

Keep source impedance low enough

The ADC samples through an internal switching network. A high-value resistor divider or high-impedance sensor may not charge the sampling capacitance quickly enough. Use a lower-impedance divider, an appropriately selected capacitor, or a buffer amplifier when the application requires it.

For a battery divider, resistor tolerance can also dominate the result. A 1% divider may introduce far more error than one ideal ADC count. Use precision resistors and calibrate the assembled product if absolute voltage matters.

Average slow signals carefully

For battery voltage, temperature, light level, and similar slow signals, multiple samples followed by averaging or low-pass filtering can improve repeatability:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
uint32_t sum = 0;

for (int i = 0; i < 32; ++i) {
    sum += adc_read();
    sleep_us(100);
}

uint16_t average = sum / 32;

A trimmed mean can reject an occasional outlier:

uint16_t samples[16];
uint32_t sum = 0;
uint16_t minimum = 4095;
uint16_t maximum = 0;

for (int i = 0; i < 16; ++i) {
    samples[i] = adc_read();
    sum += samples[i];
    if (samples[i] < minimum) minimum = samples[i];
    if (samples[i] > maximum) maximum = samples[i];
    sleep_us(100);
}

uint16_t trimmed_average = (sum - minimum - maximum) / 14;

Filtering reduces uncorrelated noise and improves repeatability. It is not a complete mathematical repair for deterministic DNL or non-monotonicity.

Best Value
Pico 2 W with Color Soldered Header Compatible with Raspberry Pi Pico 2 W
  • RPi Pico 2 W Microcontroller Board (pre-soldered header (color-coded)), Based on Official RP2350 Chip, Dual-core & Dual-architecture Design. Upgraded hardware from Pico 2 with wireless communication, onboard antenna, features 2.4GHz 802.11n WIFI and Bluetooth 5.2.
  • Adopts unique dual-core and dual-architecture design: dual-core Arm Cortex-M33 processor and dual-core Hazard3 RISC-V processor, flexible clock running up to 150 MHz.
  • Onboard Infineon CYW43439 wireless chip, supports WIFI 4 wireless and Bluetooth 5.2.
  • 520KB of SRAM, and 4MB of on-board Flash memory.
  • Castellated module allows soldering direct to carrier boards. USB 1.1 with device and host support. Low-power sleep and dormant modes. Drag-and-drop programming using mass storage over USB.

Calibrate the complete signal chain

Calibration can compensate for gain and offset errors, divider ratios, and some repeatable system behavior. It cannot guarantee recovery of information lost at a non-monotonic transition. Calibrate at the temperatures, supply conditions, and operating range that matter to the product.

Reduce effective resolution when appropriate

If the application values monotonic behavior more than fine resolution, discarding the lowest four bits can be a practical workaround:

uint16_t raw = adc_read();
uint8_t result8 = raw >> 4;

This deliberately reduces the result to roughly 8-bit granularity and may avoid visible small-scale discontinuities. It should be validated on the actual device and application; it is not a guarantee that every reduced result is perfectly accurate.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep critical operating ranges away from transitions

If a design measures only a narrow voltage range, calculate where that range maps in ADC codes. Changing the divider ratio or signal scaling may keep a critical threshold away from one of the four prominent discontinuity regions. This is not a solution for applications that must accurately cover the full ADC range.

When is the internal ADC good enough?

Application Likely decision Reason
Rough threshold detection Internal ADC may be adequate Exact linearity may not matter.
Light, temperature, or battery indication Use with filtering and calibration Signals are often slow and modest accuracy is acceptable.
Closed-loop motor, heater, or power control Evaluate carefully; external ADC may be preferable Non-monotonic readings can destabilize a control decision.
Precision instrumentation Use an external ADC Documented INL/DNL, reference, and monotonicity may be required.
Safety-critical threshold Do not rely on uncharacterized internal ADC behavior The consequence of an irregular code transition may be unacceptable.

When an external ADC is the better answer

Choose an external converter when monotonicity is mandatory, absolute accuracy is tighter than the Pico signal chain can support, or the sensor needs a precision reference, differential inputs, programmable gain, or documented INL/DNL performance.

Typical options include:

An external reference, buffer amplifier, or better resistor network can improve the surrounding signal chain. None of those components removes the RP2040 ADC’s silicon DNL defect by itself.

Bottom line

The Raspberry Pi Pico remains a capable, inexpensive microcontroller board, but its RP2040 ADC should be treated as an approximately 8–9-effective-bit peripheral with a known nonlinearity erratum—not as a precision 12-bit instrument. For slow sensors and threshold decisions, correct setup, a clean analog supply, suitable source impedance, filtering, and calibration may be enough. For precision measurement or control that requires guaranteed monotonicity, use an external ADC designed and specified for that job.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.