The standard EIA 3-digit code for a 10uF capacitor is 106. The first two digits (10) represent the significant figures, and the third digit (6) is the multiplier in picofarads (pF). Therefore, 10 × 106 pF equals 10,000,000 pF, which converts to 10,000 nF, or exactly 10 µF. If you are sourcing components for an embedded design or debugging a power rail, misreading this code or selecting the wrong dielectric can lead to catastrophic inrush failures or ADC noise. This guide breaks down the 10uf capacitor code, provides a decision matrix for selecting the right chemistry, and walks through building an ESP32-based capacitance verifier to test your inventory.
Decoding the 10uF Capacitor Code and Selection Matrix
Beyond the base capacitance value, SMD and through-hole capacitors use additional markings for voltage and tolerance. A typical tantalum or MLCC (Multi-Layer Ceramic Capacitor) might read 106 16V or include a letter code for voltage (e.g., C = 16V, E = 25V in some manufacturer series). However, the physical size and dielectric material matter far more than the ink on the reel when designing embedded power trees.
When you need 10µF for decoupling an ESP32 or smoothing a sensor power rail, you have three primary chemistry choices. Here is the decision path to terminate your selection process:
| Criteria | MLCC (X5R/X7R) | Tantalum (MnO2) | Aluminum Electrolytic |
|---|---|---|---|
| Typical Footprint | 0805 or 1206 | Case A or B (3216/3528) | 5x11mm Radial |
| ESR (Equivalent Series Resistance) | Ultra-low (<5 mΩ) | High (1.0 - 3.0 Ω) | Medium (0.5 - 2.0 Ω) |
| Polarity | Non-polar | Polar (Reverse = Fire) | Polar |
| DC Bias Derating | Severe (loses up to 50% at rated V) | Moderate | Minimal |
| Best Use Case | High-frequency decoupling, tight spaces | Bulk hold-up on low-ripple rails | Through-hole prototyping, audio filtering |
If you place a 10uF 0805 X5R MLCC rated at 6.3V on a 5V rail, the DC bias effect will reduce its actual capacitance to roughly 4µF. Always select an MLCC with a voltage rating at least 2x your operating voltage to maintain the 10uf capacitor code's promised value.
Project Build: ESP32 10uF Capacitance Verifier
Rather than trusting the 106 code printed on a salvaged SMD part, we can measure the actual capacitance using the RC time constant formula ($\tau = R \times C$). By timing how long it takes a capacitor to charge to 63.2% of VCC through a known resistor, we can calculate the true capacitance.
Time to Build: 45 minutes
Target Board Variant: ESP32-WROOM-32 DevKit v1 (30-pin or 38-pin standard layout)
Parts List & Pin Mapping
- MCU: ESP32-WROOM-32 DevKit v1
- Display: 0.96" I2C OLED (SSD1306 driver, 128x64)
- Resistors: 10kΩ (1% tolerance, charge resistor), 1kΩ (discharge protection)
- Test Subject: Any capacitor marked 106 (10µF)
| Component | ESP32 GPIO | Notes |
|---|---|---|
| OLED SDA | GPIO 21 | Standard I2C Data |
| OLED SCL | GPIO 22 | Standard I2C Clock |
| Charge/Measure Pin | GPIO 32 | Must be ADC1 capable and output capable. |
| Discharge Pin | GPIO 33 | Pulls cap to GND via 1kΩ |
Complete Compilable Code
This sketch utilizes the Adafruit_SSD1306 library. It includes critical error handling to prevent the ESP32's Watchdog Timer (WDT) from resetting the board if a capacitor fails to charge.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// --- Pin Definitions ---
#define CHARGE_PIN 32 // ADC1_CH4 (Must support output & ADC)
#define DISCHARGE_PIN 33
// --- OLED Definitions ---
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// --- Measurement Constants ---
const float VCC = 3.3;
const float R_CHARGE = 10000.0; // 10k Ohm
const int THRESHOLD = 2588; // 63.2% of 4095 (12-bit ADC)
const unsigned long TIMEOUT_US = 5000000; // 5 second max wait
void setup() {
Serial.begin(115200);
pinMode(CHARGE_PIN, OUTPUT);
pinMode(DISCHARGE_PIN, OUTPUT);
digitalWrite(CHARGE_PIN, LOW);
digitalWrite(DISCHARGE_PIN, LOW);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Halt if display fails
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.println("Capacitance Meter");
display.println("Target: 10uF (106)");
display.display();
delay(1000);
}
void loop() {
// 1. Discharge the capacitor
pinMode(CHARGE_PIN, OUTPUT);
digitalWrite(CHARGE_PIN, LOW);
digitalWrite(DISCHARGE_PIN, HIGH);
delay(100); // Allow discharge
digitalWrite(DISCHARGE_PIN, LOW);
// 2. Start charging and timing
unsigned long startTime = micros();
unsigned long elapsedTime = 0;
int adcVal = 0;
bool timeout = false;
// Switch charge pin to HIGH
digitalWrite(CHARGE_PIN, HIGH);
// 3. Wait for ADC to cross 63.2% threshold
while(adcVal < THRESHOLD) {
adcVal = analogRead(CHARGE_PIN);
elapsedTime = micros() - startTime;
// CRITICAL: Feed the watchdog and yield to RTOS
yield();
if(elapsedTime > TIMEOUT_US) {
timeout = true;
break;
}
}
// 4. Calculate and Display
display.clearDisplay();
display.setCursor(0,0);
if(timeout) {
display.println("ERROR: Timeout!");
display.println("Check connections");
display.println("or Cap > 500uF");
Serial.println("Measurement Timeout");
} else {
// tau (in seconds) = elapsedTime (us) / 1,000,000
float tau = elapsedTime / 1000000.0;
float capacitance = tau / R_CHARGE; // Farads
float capacitance_uF = capacitance * 1000000.0;
display.println("Measured Value:");
display.setTextSize(2);
display.print(capacitance_uF, 2);
display.println(" uF");
display.setTextSize(1);
if(capacitance_uF > 8.0 && capacitance_uF < 12.0) {
display.println("PASS: Matches 106 code");
} else {
display.println("FAIL: Out of 20% tol.");
}
Serial.printf("Time: %lu us | Cap: %.2f uF\n", elapsedTime, capacitance_uF);
}
display.display();
delay(2000);
}
Debugging: "Core 1 panic'ed (Interrupt wdt timeout)"
When writing RC timing loops on the ESP32, beginners frequently encounter a fatal crash. If your serial monitor spits out the following exact error string, your code has violated the FreeRTOS watchdog constraints:
Guru Meditation Error: Core 1 panic'ed (Interrupt wdt timeout on CPU1)
This happens when a high-priority task hogs the CPU without yielding, starving the IDLE task and triggering the hardware watchdog. Here are the ranked causes and fixes:
- Missing
yield()in thewhileloop: The ESP32 Arduino core runs on FreeRTOS. A tightwhile(analogRead() < threshold)loop blocks the Wi-Fi stack and RTOS housekeeping. Fix: Always includeyield();oresp_task_wdt_reset();inside measurement loops, as shown in the code above. - Using an Input-Only GPIO for Charging: If you mistakenly assign
CHARGE_PINto GPIO 34, 35, 36, or 39, the pin cannot drive HIGH. The capacitor will never charge, the threshold will never be met, and the loop will run infinitely until the WDT trips. Fix: Use ADC1 pins that support output (e.g., GPIO 32 or 33). - Massive Capacitor or Short Circuit: If the capacitor is actually 1000µF instead of 10µF, or if your test jig has a solder bridge, the charge time will exceed the WDT limit. Fix: Implement the
TIMEOUT_USbreak condition included in the provided sketch.
First Three Things to Check When the Tester Fails
If the code compiles but the OLED remains blank or the readings are wildly inaccurate, run through this rapid diagnostic sequence:
- Verify the I2C Address: The code assumes
0x3C. Many generic 0.96" OLEDs ship with0x3D. Run the standard ArduinoI2CScannersketch to confirm your display's address and updateSCREEN_ADDRESSaccordingly. - Check Resistor Tolerance: The math relies entirely on
R_CHARGEbeing exactly 10,000 ohms. If you use a standard 5% carbon film resistor, your baseline error is already ±5%. Swap to a 1% metal film or SMD resistor for accurate 10uF verification. - Account for ESP32 ADC Non-Linearity: The ESP32 ADC is notoriously inaccurate near the 0V and 3.3V rails. Fortunately, our 63.2% threshold (~2.08V) lands in the linear sweet spot of the ADC curve. Do not attempt to measure the 99% charge time; stick to the 1-time-constant (63.2%) method to avoid the non-linear upper rail.
Extending and Simplifying the Build
Depending on your bench needs, you can easily scale this project up or down.
To Simplify (Breadboard Prototyping):
Strip out the Wire.h and Adafruit_SSD1306 libraries entirely. Rely solely on Serial.printf() and use the Arduino IDE's Serial Plotter to watch the charge curve in real-time. This reduces flash usage and eliminates I2C bus lockups.
To Extend (Production Test Jig):
Add an ESP32 DAC (GPIO 25) to inject a known AC ripple and measure the voltage drop across the capacitor to calculate Equivalent Series Resistance (ESR). Tantalum capacitors marked 106 often suffer from high ESR as they age; measuring capacitance alone won't catch a degraded tantalum that will cause power rail ringing.
Final Verdict: Which 10uF Capacitor Should You Stock?
Stop buying assorted kits filled with high-ESR electrolytic caps that dry out, or dangerous polarized tantalums that catch fire when soldered backward. For 95% of embedded 3.3V and 5V microcontroller projects, the concrete pick is the Samsung Electro-Mechanics CL21A106KOQNNNE.
This is an 0805 package, 10µF, 16V, X5R MLCC. At roughly $0.05 per unit in tape-and-reel quantities, it offers ultra-low ESR, requires no polarity orientation during hand-soldering, and its 16V rating ensures that DC bias derating on a 5V rail is negligible, giving you the true 10µF the 106 code promises. Stock your bench with these and relegate the radial electrolytics to audio filtering and linear regulator bulk storage.






