[time-nuts] FE-5680A DDS Board/PIC Code

Herbert Poetzl herbert at 13thfloor.at
Mon Feb 18 16:32:33 EST 2013

I'm new to the time-nuts community, so I simply start 
with a short info on how I got into this situation :)
(skip forward to <ONTOPIC> if not interested)

Not long ago, I decided to build a reasonably good
frequency counter for my personal use and maybe if
the result is simple and elegant, I'll publish the
details so that everybody can build one ...

It was clear to me, that it had to be able to count
up to at least 1GHz and thus show at least nine, 
better ten significant digits, so a precise time base
is required.

After some online searches and investigations, my
best options seemed to get a very stable oscillator
and a high quality time reference to sync with, which 
in turn brought me to the idea to use a cheap rubidium 
normal and somehow tune/measure/sync it via GPS or 

Reading a lot of documentation and blogs from all over 
the world (sometimes in translation :) shed some light 
on the rubidium normal requirements, which I defined as:

 - has to have a 10MHz output not just the 1PPS
 - has to be programmable (i.e. can be tuned)
 - must be cheap

I quickly found two different RB standard models, 
readily available on ebay for a reasonable price, 
namely the Efratom FRS-C and the FEI FE-5680A.
I finally decided to go with the FE-5680A, mainly
because I liked the package. A seller was quickly
found offering something titled:

 'FE-5680A Rubidium Atomic Frequency Standard 
  Oscillator Transceivers 10Mhz Out'
 'Programmable from 1Hz to 20MHz'

Little did I know what that actually meant ...

When the units (I ordered two of them) arrived, I
couldn't wait to test if they actually work and get
a lock, so I quickly wired them up (according to the
pinout) and provided them with the advised 15V at
up to 2A each. To my astonishment, they heated up
rather quickly and got a lock in a little under two
minutes, so I happily got my scope out to check the
10MHz signal, just to find that there is no such
signal available on the 9pin D-sub connector.

Measuring pins against ground (pin 2) and 15Vx (pin 1)
I figured that neither pin 7 (10MHz) nor pin 8/9
(the rs232 interface for programming) was connected.
and to my great disappointment, pin 6 (1PPS) didn't 
output much either (I later discovered that this was
due to a defective unit, which is now being replaced)
After contacting the seller, I opened up the units
to investigate my options (and of course, because
I wanted to take a look inside :), which in turn led
to a number of high resolution scans and photos of
all the bits and pieces.

A (this time) more thorough search on the internet
resulted in a deeper understanding of the various 
options the FE-5680A can have (or usually doesn't 
have) and the inner workings of the different 
FE-5680A models (of course, all labeled FE-5680A :)

The DDS board, which actually can be programmed to
output certain frequencies derived from the 'locked'
1:136 frequency of the rubidium 6.8GHz transition,
caught my attention, as it has both, the '10Mhz'
output and the programming interface, so I decided
to analyze it further ...


The central part on this specific DDS board [1] is 
the AD9830A a Direct Digital Synthesizer (DDS) which
basically produces a sine wave at a well defined
multiple and phase of a given reference frequency.

Besides some other components, this board also 
includes an RS-232C line driver (Sipex SP233A) a
PIC16F84 microcontroller and two 74HC595 8bit shift
registers, with buffered outputs.

I read somewhere, that the blue buttons on that DDS
board can be used to adjust the output frequency,
this should be avoided, mainly because every button
press is an update and will cause a write to the
EEPROM data wearing it out.

Now as I've played with PIC microcontrollers for
a long time, I wanted to know what this specific
controller is doing and how I could use that for my
purposes ...

The chip was quickly removed and the program as well
as configuration memory retrieved (luckily FEI didn't
utilize the code/data protection) and together with 
high resolution scans and photos, a documented and 
verified assembler listing [2] reverse engineered.

Here are the (IMHO) quite interesting findings:

 - both FREQx registers can be adjusted
 - the PHASE0 register can be adjusted
 - none of the changes is permanent,
   unless you explicitely save the settings
 - there are only a few commands, without
   any plausibility checks and/or protection
 - and yes, the buttons increment/decrement
   the FREQx settings and trigger a write to
   the EEPROM after every update.
 - the serial interface is done in software
 - the DDS control words are shifted into
   the 74HC595, buffered and written 

; S<CR>                         STATUS 
;       R=50255057.012932Hz F=2ABB504000000000
;       OK
; F=XXXXXXXXYYYYYYYY<CR>        FREQxREG (set divider)
;       OK
; G=XXXX<CR>                    PHASE (set phase register)
;       OK
; R=XXXXXXXXYYYYYY<CR>          RUBIDIUM (set calibrated freq)
;       OK
; E<CR>                         EEPROM (save settings)
;       OK

Note that you can use the R= command to update all
the settings at once or the F= command to update 
the FREQx and PHASE0 settings in one step, by simply
adding more hex digits to the line.

The next step I'm considering is to replace the
PIC16F84A with a more powerful version (and a custom
code) to support a smarter interface and some kind
of dynamic adjustments (more details on that in
another post, if there is interest)

So, that's it for now, enjoy, and feel free to
comment, provide additional information, or just
contact me (about details).


[1] http://www.13thfloor.at/~herbert/FE-5680A-DDS.jpg
[2] http://www.13thfloor.at/~herbert/PIC16F84A.asm

More information about the time-nuts mailing list