There are two common cases: 1. A 2-pin quartz [crystal](https://www.onzuu.com/category/crystals)/[resonator](https://www.onzuu.com/category/resonators) (the MCU provides the amplifier → “Pierce oscillator”) 2. A 4-pin [oscillator](https://www.onzuu.com/category/oscillators) module (it outputs a ready-to-use clock) I’ll cover both, plus how to choose the capacitors and the layout rules that make or break startup. ![CrystalLocked4MHzCD4001_bb_build](https://hackmd.io/_uploads/rJnNHI04-e.jpg) **1) Using a 2-pin crystal (most common)** **Typical wiring (Pierce oscillator)** ``` C1 C2 OSC_IN o--||----+---------Xtal----||--o OSC_OUT | | (R) GND | GND ``` * OSC_IN / OSC_OUT are often labeled XTAL1/XTAL2, OSC1/OSC2, HSE_IN/HSE_OUT, etc. * C1 and C2 are the load capacitors (usually NP0/C0G ceramic). * R is optional (depends on MCU and crystal); common options: * No [resistor](https://www.onzuu.com/category/resistors) (many MCUs already include the bias resistor internally) * 1 MΩ in parallel across the crystal (bias / startup help on some designs) * 0–100 Ω in series with OSC_OUT (or crystal) to reduce drive/EMI if needed **How to pick the load capacitors (C1, C2)** Crystals are specified with a load capacitance 𝐶𝐿(e.g., 8 pF, 12 pF, 18 pF). If you use two equal caps C1 = C2 = C, the crystal “sees” approximately: 𝐶𝐿≈𝐶/2+𝐶𝑠𝑡𝑟𝑎𝑦 So a good starting estimate is: 𝐶≈2⋅(𝐶𝐿−𝐶𝑠𝑡𝑟𝑎𝑦) Where 𝐶𝑠𝑡𝑟𝑎𝑦 (pin + trace + pad) is often 2–5 pF per side. **Example (very common):** Crystal CL = 18 pF, assume stray ≈ 3 pF → C ≈ 2 × (18 − 3) = 30 pF → choose 27 pF or 33 pF (most people land on 22–33 pF depending on layout and MCU). **Common “works most of the time” values:** * For 8–16 MHz crystals: 18–33 pF (often 22 pF) * For 32.768 kHz watch crystals: 6–12 pF (often 8–10 pF) (LSE circuits are more sensitive to ESR and stray capacitance.) **Crystal selection checklist** * Frequency within MCU oscillator range (and allowed drive level) * Correct CL value and acceptable ESR (especially important for 32 kHz crystals) * Temperature tolerance and stability as needed **2) Using a 4-pin oscillator module (XO/CMOS oscillator)** An oscillator module already generates a clock. Wiring is simpler: * VCC → supply (often 3.3 V or 5 V per part) * GND → ground * OUT → MCU clock input pin (often OSC_IN / EXTCLK / CLKIN) * EN/OE (if present) → tie high (or to an MCU pin) Important: with an oscillator module you usually connect only the input pin (OSC_IN). The MCU’s OSC_OUT pin is typically left unconnected. Also ensure: * The oscillator output level is compatible (CMOS 3.3 V into a 3.3 V MCU, etc.) * Add local decoupling: 0.1 µF at the oscillator VCC pin (very close) **3) Layout rules (this is where most failures come from)** Do these and crystals “just work”: * Place the crystal as close as possible to the MCU pins (a few mm if you can) * Keep the two traces short, symmetric, and isolated * Put C1/C2 right next to the MCU pins, and connect their ground to a clean ground with short return (often a dedicated via each) * Avoid running other signals under/near the crystal traces (especially fast clocks, SPI, USB, DC/DC switch node) * Avoid soldermask openings / long pads that add stray capacitance * If you have EMI/noise issues: consider a guard ring ground around the oscillator area (board-dependent) **4) Firmware/config steps (don’t forget this)** Hardware can be perfect but it still won’t run if you don’t enable it: * Select external crystal/oscillator mode in the MCU configuration: * AVR: fuse bits (external crystal/clock) * [STM32](https://www.ampheo.com/search/STM32): RCC clock config (HSE/LSE on, correct drive) * [PIC](https://www.ampheo.com/search/PIC): oscillator configuration bits * Set the correct frequency in toolchains if needed (for baud rate, delays, etc.) **5) Quick troubleshooting** If it doesn’t start oscillating: * Wrong [capacitor](https://www.onzuu.com/category/capacitors) values (too big or too small) → try stepping C1/C2 up/down * Crystal ESR too high (common with 32 kHz watch crystals) * [MCU](https://www.ampheoelec.de/c/microcontrollers) drive strength too weak/strong → adjust drive settings (if available) or add small series resistor * Layout too long/noisy → shorten/clean routing, move parts * You selected “external clock” in firmware but wired a crystal (or vice versa) Measuring tip: probing the crystal pins with a normal scope probe can stop oscillation. Use a 10× probe, short ground spring, or use the MCU’s clock-out feature if available.