Maker Pro
Maker Pro

AOCJY2 10 MHz OCXO time source

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
A revised logic circuit to fix the RCLK which remains high for the duration of the serialization process and to accommodate the fact there are only 10 bit ring counters (decade counter) which was a pain: https://tinyurl.com/y3qyhe45
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
I just found out the voltage reference pin on the OCXO is for the trimpot supply so it has a stable voltage reference for the control voltage, now its so stable I can adjust it to within 1mV, much more stable than the 3.3V LM1084 which is already pretty good!
1mV on the control pin is about 0.42 PPB, now if only the internet were that stable so I could get a precise time reference.
 
Last edited:

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
Work has started on time machine v2, I just cut, stripped, bent and inserted 32 custom length jumper wires for the register buses from the counters to the shift registers
Time v2.jpg
 

Harald Kapp

Moderator
Moderator
Nov 17, 2011
13,719
Joined
Nov 17, 2011
Messages
13,719
Nice and tidy arrangement.
Especially the placement of the decoupling caps :).
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
I had a sudden realization as I woke up today, the shift registers wont load the second byte of each 16bit counter because the load pin doesn't get cycled, luckily I always get a spare of each component and all it takes is an AND gate on each flip-flop to fix it which means 1 more IC which I barely have room for!

Revised circuit: https://tinyurl.com/y4cdoxhx
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
Unfortunately it couldn't stay so neat and tidy, it pretty much works but the counter outputs need some pull-down resistors because they're 3-state and the CMOS inputs of the shift registers don't like the gradual discharge on the inputs.
Time v2 2.jpg
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
Couldn't you just enable the outputs permanently?
Actually you just got me thinking, I could replace the register selection inverters with a flip-flop which would keep at least one active at all times and switch between them but I think it's one of the shift register inputs remaining high that causes its output to end up in the high state for a short period till the input discharges which depends on the state of the bit of course and its this which blocks the succeeding shift register outputs. The counter outputs would have to be low to stop this happening which I can't do.
I don't know why the shift register ends up outputting the state of an input when it should end up on the state of the SER input, maybe it's a timing issue? The more I think about it I'd rather just use the humble pull-down resistor approach.
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
So I decided to dump the 10:1 decade counter frequency divider for the serial clock and try it at 10MHz at which I thought it would be a jumbled mess but actually it works just fine at 10MHz according to my scope but as my serial adapter is 12Mbps its clock doesn't divide well into 10 so... I happen to have a 16MHz oscillator and a spare flip-flop so I used that to halve it to 8MHz and while I haven't got the resistors yet I can get an accurate reading of the data it does spit out over the serial interface...yay! I just had to reverse the bit order using a lookup table in C# which is no big deal.
The only minor niggle at this frequency that bugs me even though it seems to be reading fine is the start bit seems to be varying in length slightly, probably because the serial input doesn't quite align with the clock but I'm not sure so I'll just try putting the serial input through a flip-flop so its in sync with the clock. I got some single flip-flops in SOT-23 packages which I can solder to 6 pin DIP adapters which I have room for on the left as seen in the last picture. I also got a 12MHz oscillator to see if it works at the full speed of my serial interface... speeed!
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
It's working perfectly with the pull-down resistors, it responds with all 64 bits of data in just 10μs at 8MHz! The only thing holding it back is the latency of the USB serial interface, most of the time it responds with the data in about 1.1ms but it often returns in 0.12-0.15 ms, low response time is half the reason why I built it using pure logic.
It just barely fits in with this collection time.
Time data.png
The sharp downward spikes in green is the delay between the end of the byte transmission and the stop bit rising, it doesn't seem to be a problem.
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
I'm trying to measure with my scope exactly how much adjustment the 10MHz VCOCXO has using a 100ms trigger delay and a 200ns collection time...
The adjustment range is about 860ns/s in the range of 1-2 volts on the control voltage pin.
The datasheet states the frequency pull range is +-0.7ppm (1400ppb total?) but assuming 1ppb is 1ns/s I have a total range (0-3.3v) of about 2838ns/s which is double the stated range?
So going with my measurement, If I want to compensate for a drift of about +1ms per day I need to decrease the control voltage by 1 / (0.00000086 * 86400) = 13.45mv.
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
In my quest to find a more precise control voltage source than a trimpot I found the TI DAC8830 16bit single ended DAC which has a reference input so I can use the 2.8V reference from the VCOCXO as full scale which makes it super stable.
It has a high output impedance so I'm still using the OPA197 as a buffer and I'm using a Picaxe 08M2 as an interface so I can set the control voltage level over serial from my PC and save it to the Picaxes EEPROM so it gets restored if it looses power.
The 16bit resolution gives me a control voltage granularity of about 2.8 / 65536 = 42.7μV which is way beyond what I can measure with my scope, its only 8 bit but with averaging and a touch of background noise it can measure DC with a 1mV resolution.
 

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
I designed a PCB for the oscillator, PICAXE, DAC, op-amp and regulators, for this I used an OPA388 "zero-drift" op-amp which has extremely low offset and drift, perfect for this application. I also added a few SMA connectors so I can get a secure connection to my oscilloscope to verify the oscillator output, reference voltage and control voltage.
There's a REG101 5v linear regulator in an SOT-23 package on the bottom side for the PICAXE, DAC8830 and OPA388 as they only draw a few milliamps. For the 3.3v supply to the oscillator I'm using a TPSM84203 DC-DC converter which has a greater than 90% efficiency in a package the size and shape of a TO-220, a linear regulator here would likely need a heatsink whereas the DC-DC converter operates cool even right next to the OCXO.
Its a 4 layer PCB and I'm using both inner layers as ground planes, I found a German PCB manufacturer called Aisler who made 3 of my PCB (minimum order) for €11.17 and the boards are excellent quality!
One minor mistake I made was the order of the pins on the TRS jack for the PICAXE serial connection, you would think the pins are in the same order as the connector that goes into it but the tip and ring pins are not in the same order physically which connected the PICAXE serial in from the cable to ground on the board and vice versa, luckily nothing was harmed and I managed to put together some audio connectors to reverse the connections.
The precision and stability of the control voltage is beyond what I can measure with my scope.
IMG_20220216_082247.jpg IMG_20220216_082519.jpg

Oh and it has 3 pins for power in and 10MHz out so I can stick it into the breadboard.
 
Last edited:

CommanderLake

Oct 2, 2012
227
Joined
Oct 2, 2012
Messages
227
So after all this time and a few calibrations later it's currently at about 0.8ms slow 36 days after its last calibration which (correct me if I'm wrong) comes to 0.000000000257 seconds per second or 0.257 PPB from an OCXO rated at 5PPB!? Maybe they never tried calibrating it using a DAC eh? I use the drift over an arbitrary period of time to calculate an offset to add to the DAC but it always starts to drift some after a week or so and the adjustments are now down to the limit of the DAC's 16 bit resolution. I use a C# program I wrote to average up to 1000 offset measurements from my nearest most stable time server which seems to be my ISP (Virgin Media) to get a reading well within 1ms.
 

danadak

Feb 19, 2021
767
Joined
Feb 19, 2021
Messages
767
Strictly for future reference, this is a single chip solution for 64 bits, could have been
at least 128 bit counter if so desired. You drag and drop components (a "component"
is an onchip resource) onto design canvas, wire up (with a wizard) to other components
and out to pins, and provide some code. I show a USBUART (also onchip) interface
which is a simple interface to PC via serial connection. Could have been parallel an/or other
serial / parallel interfaces. I estimate code at ~ 20 lines.

1670069690507.png


If you look at right hand window it shows resources used / left, so plenty of resources
left for other tasks.

IDE (PSOC Creator) and compiler free, board to use $ 15.

1670069230368.png

You can do codeless designs with this as well, eg. where you basically replicate your
approach using counters and shift registers. Again 1 chip. Its a SOC, system on chip.

Here is whats onchip, multiple copies in many cases :

1670069572062.png



Regards, Dana.
 
Last edited:
Top