# How to compute crystal load capacitors using Python

The UliEngineering library provides a convenient way to compute which load capacitors are suitable for a given crystal oscillator circuit.

First, install UliEngineering using

`sudo pip3 install UliEngineering`

Now you need to find out the following parameters:

• The load capacitance from the crystal’s datasheet. Typical values would be `7pF` or `12.5pF` or `20pF`
• The pin capacitance `CPin` from the datasheet of the IC your crystal is connected to (e.g. your Ethernet PHY or your RTC). Typical values would be between `0.5pF` to `5pF`
• Estimate the stray capacitance `CStray` from the board (that is the capacitance of each crystal oscillator pin to the PCB ground). You typically just take an educated guess here, so here are some values to start at:
•  Start at `3pF`
• If you have a 4+ layer board (as opposed to a two layer board), add `2pF` (since the distance to the ground plane below is much smaller on 4 layer boards
• If you have long traces >1cm (long traces to the crystal should be avoided at all costs!), add `4pF` for each cm of trace beyond 1cm for 2-layer boards or add `6pF` for each cm of trace beyond 1cm for 4+ layer boards

Now we’ll plug those values into UliEngineering and compute the load capacitance:

```from UliEngineering.Electronics.Crystal import load_capacitors
from UliEngineering.EngineerIO import auto_print

This will print `7.00 pF`
If you just want to the the value and not an auto-formatted string, use `load_capacitors()` directly:
`capacitor = load_capacitors(cload="9 pF", cpin="1 pF", cstray="5 pF")`
In this example, we’ll get `capacitor == 7e-12`.
Note that `7pF` means that you have to add a `7pF` capacitor at each side of the crystal. I recommend to use only NP0/C0G capacitors here since X5R/X7R capacitors and other high-k-dielectric ceramic capacitors not only have a high temperature coefficient but also they are not as suitable for analog applications since their capacitance will change with the voltage being applied.