[time-nuts] 10 MHz -> 16 MHz
time-nuts at kasperkp.dk
Sun Sep 30 04:53:43 EDT 2018
On 09/30/2018 05:57 AM, Tom Van Baak wrote:
> What's a clever, simple, reliable (pick 2 of 3) way to get 16 MHz out of 10 MHz? Low phase noise isn't a big requirement and jitter doesn't need to be sub-nanosecond. The main requirement is perfect cycle count accuracy. This is for driving a 16 MHz microcontroller from a 10 MHz Rb/Cs/GPSDO. 10 MHz input is likely sine; 16 MHz output is 3v3 or 5v CMOS.
When I have needed this, it has been for microcontrollers. I have let
the microcontroller do the locking, with 10MHz applied directly to an
I run a reasonably fast* interrupt. Once inside the interrupt, I read
the current timer value, and read the port 8 times into registers.
This gives me 8 samples spaced 45 degrees apart on the 10MHz input,
which are then converted to a 8-bit field.
That 8-bit value is then used in a lookup table, which outputs a phase
value. This is compensated by what was read from the timer (how late we
got into the interrupt).
The phase error is then accumulated, and drives a PWM DAC, connected to
a varactor on the crystal.
It adds 3 external components in total, and for an annoying case like
8/5, it may well wobble 90 degrees.
It started with this Christmas-vacation experiment I never really finished:
*) oscillator_frequency * max_xtal_deviation * 4, typically 16kHz or so.
More information about the time-nuts