Measuring small capacitances

Hi everyone,
I am working on a part of my project that is essentially a capacitance meter. So far it works well for capacitances from 2 nano Farads upwards.
I have a 10 M Ohm resistor in series with the unknown capacitor and the code measures the time taken for the voltage across the capacitor to reach 63% of its final value.
This is the RC time constant, and is equal to RC, from which C can then be determined.

However, I need it to go down to measure values lower that a few nano Farads. Ideally it needs to be able to measure a capacitance of a few pico Farads.
Of course at the moment the RC time constant would be undetectable (a few nano seconds). So I would need to either increase the resistance, or find a new way to measure.

Is increasing the resistance into the Giga-Ohm range viable?

If not, does any one have any suggestions of how to measure small values of capacitance using Arduino microcontrollers?

Thanks guys, would appreciate any help.

Increasing the resistance to giga-ohm will cause so a lot inaccuracy (noise, leak currents), so that you can't tell what value the capacitor is.

The normal way is to pass a frequency through the capacitor, and measure how much of the signal is left.
To select a range for lower values, the frequency is increased.
A simple analog circuit could be accurate to 20pF.

I think the only way to test picoFarads is to use a high frequency.
A timer output should be high enough for picoFarads.
But you need a circuit to detect how much is passed through the capacitor.
This is an example :
The Arduino could automatically select the range, by setting the timer output frequency.

I was not able to find an example schematic of such circuit for an Arduino.
Search for LC-meter.
For example this one : AVR LC Meter With Frequency Measurement – Kerry D. Wong

Elektor - Learn, Design & Share electronics | Elektor Magazine

Is a schematic available ?

I can't post a schematics, due copy-wrong issue, there is an alternative link:

This one claimes

About 1% accuracy, <2% error
Measuring range: 1pF - 500uF

Capacitance Meter DIY Kit - KIT-09485 - SparkFun Electronics?

And comes with a schematic.

One way that I've used to measure lower capacitance values with an Arduino is to use the capacitance under test in a CMOS 555 oscillator circuit, and use the Arduino to measure the osciilation frequency.

Hi everyone,
Thanks for the replies.
How do I go about measuring frequencies of up to 50 kHz as would be required for measuring picofarads in a 555 setup?

How do I go about measuring frequencies of up to 50 kHz as would be required for measuring picofarads in a 555 setup?

Feed the 555 output into the T1 pin (aka digital pin 5 on an Arduino Uno) and use timer/counter 1 to count the number of input pulses in a fixed period of time. That works for input frequencies up to about 3MHz when the input is a square wave.

Alternatively, feed the input to digital pin 2 or 3, generate an interrupt on one edge, and increment a counter in the ISR. Measure the number of transitions in a fixed interval. That should be workable up to at least 50kHz.

Take a look at this, there is schematic in user manual. The idea is to use LC tank with known L, measure it's resonant frequency and calculate C from L and frequency.