Choosing a Crystal
- Andrew Wei
- Sep 3, 2025
- 3 min read

Turns out, choosing a crystal is a lot harder than I thought. Given that the Leonardo prototype worked well, I am thinking we could copy their design. I have no clue what they are using, however, according to chatgpt, they use a 16 MHz quartz crystal with two external 22 pF load capacitors. Chatgpt had the following to say:
//START OF CHATGPT CONTENT
Suitability for USB HID:
The ATmega32U4’s USB module requires a 16 MHz source with sufficient accuracy. USB spec tolerates ±0.25% = ±2500 ppm. Even a cheap ±30 ppm crystal is 100× better than that margin, so it is safe. Resonators (~±0.5%) are technically borderline, but Arduino Pro Micro boards have been shown to work in practice.
If you want something better:
Use a quartz crystal with tighter tolerance (±20 ppm or ±10 ppm).
Lower temperature coefficient improves stability over operating range (look for ±10 ppm stability).
Small SMD packages (HC49SMD, 3225, 5032) are fine as long as load capacitance matches your design.
Load capacitance: The ATmega32U4 reference circuit assumes ~18–22 pF. Pick a crystal with CL ≈ 18 pF and add the correct capacitors to ground.
ESR: Must meet the microcontroller’s oscillator requirements (<100 Ω is safe at 16 MHz).
What to search on Digi-Key:
Frequency: 16 MHz
Tolerance: ≤±20 ppm (at 25 °C)
Stability: ≤±20 ppm (across operating temp)
Load capacitance: 18 pF (common, works with 2×22 pF external caps)
Package: HC49SMD, 3225, or 5032 depending on your board space
Example: Abracon ABM8G-16.000MHZ-18-B-T (16 MHz, ±10 ppm tol, ±10 ppm stability, 18 pF load, 3225 package).
PPM meaning:
Parts per million. It’s the measure of frequency tolerance and stability of a crystal.Example: 16 MHz ±30 ppm means the frequency can deviate ±480 Hz (16 000 000 × 30 / 1 000 000).
Leonardo crystal details:
Arduino’s official Leonardo schematic shows a 16 MHz crystal with two 22 pF capacitors. The BOM lists it generically. Known boards often use ECS-160-20-4X (ECS Inc., 16 MHz, ±30 ppm, 18 pF load). Others use equivalents like Citizen HC-49S 16.000 MHz ±30 ppm. It is not locked to a single brand, but always a quartz crystal.
//END OF AI CONTENT
Based on my own research, I found this schematic labelled "Arduino_Leonardo-REV3b.sch" and we can see that the oscillator seems to be some sort of KX-7? That does indeed correspond to oscillators and it does seem like indeed it is capped with 22p capacitors, however, that's what the 32u4 recommends anyway.


The datasheet of the 32u4 seems to suggest that 22pF is fine, although this is apparently due to stray capacitance, and not because the crystal is rated to 22pF. (as per Chatgpt)
// START OF CHATPGT CONTENT
Key points to consider when designing your own ATmega32U4 board:
1. Crystal load capacitance
The “CL” rating of the crystal (commonly 18 pF) specifies the effective load it expects.
The effective load seen by the crystal = (C1 × C2) / (C1 + C2) + stray capacitance.
Stray capacitance is typically 2–5 pF from PCB traces and MCU pins.
That’s why Arduino Leonardo uses 22 pF caps on each leg with an 18 pF crystal.
If you don’t know the exact stray capacitance of your layout, assume 3–5 pF and adjust capacitor values accordingly.
2. Alternatives to a crystal
The 32U4 has an internal RC oscillator (8 MHz) and a PLL that can multiply it to 48 MHz for USB.
Arduino Pro Micro with a resonator shows that even less-accurate timing sources can still pass USB.
However, relying only on the internal oscillator is risky for USB compliance. Its accuracy is only about ±3–10% without calibration, which is orders of magnitude worse than USB’s ±0.25% spec.
So if you omit an external oscillator, you’d need to run USB in “low speed” mode or rely on factory calibration with no guarantees. Not recommended for HID projects.
3. Practical design rules
Always add a 16 MHz crystal or resonator if you need reliable USB HID.
Use an SMD crystal with ≤30 ppm tolerance, ≤30 ppm stability, and 18 pF load.
Keep the crystal and capacitors close to the MCU pins with short traces to ground.
Connect capacitors directly to the same ground plane as the MCU.
Avoid routing high-speed signals under the crystal.
4. Selecting parts on Digi-Key
Search filters:
Frequency: 16 MHz
Tolerance: ±20 ppm or better
Stability: ±20 ppm or better
Load capacitance: 18 pF
ESR: ≤60 Ω
Package: 3225 or 5032 SMD (compact, standard for embedded boards)
Example:
Abracon ABM8G-16.000MHZ-18-B-T
ECS ECS-160-18-5PX-TR
TXC 7M-16.000MAAJ-T
Comments