ROVERBOX - Xlock-1g

1GHz DDS reference clock

ON4IY and ON4CDU -- January 2010



 
prototype  Xlock-1g




0. Xlock-1g?

We designed the Xlock based on the LMX23x6 a few years ago with good results for xtal VCO locking. Experiments with the original Xlock board showed limitations for locking a Crystel VCO at 1 GHz. The PLL chips are too noisy. So we decided to move to the largely pin-compatible ADF4106/7. This page describes the differences with the original Xlock design. Xlock-1g uses the same PCB as the original Xlock.

1. Project status

2. Prototype testing and initial units: results


       




      The output is clean: intermod at 990/1010MHz is 70dB down - no other products noticed.


Note -108dBc @ 1kHz offset in production units



3. Differences with the Xlock


The changes are mostly the result of the ADF taking a different supply voltage. It also has a different reference input: digital versus RF on the LMX. Mounting style as depicted in the pictures above.

4. Alignment

A bit of alignment is needed to get best phase noise and minimum intermod between 1GHz and 10Mhz.

Align the variable resistor at the 10MHz ref input as follows:

5. CCS Code

x1gadf.h

#include "/home/xtof/sun/ccs/devices/16f819.h"

#FUSES NOWDT                     //No Watch Dog Timer
#FUSES INTRC_IO                  //Internal RC Osc, no CLKOUT
#FUSES PUT                       //Power Up Timer
#FUSES NOPROTECT                 //Code not protected from reading
#FUSES BROWNOUT                  //Reset when brownout detected
#FUSES MCLR                      //Master Clear pin enabled
#FUSES NOLVP                     //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                     //No EE protection

#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

#define  LMX_LE   PIN_A0
#define  LMX_DA   PIN_A1
#define  LMX_CL   PIN_A2
#define  GREEN    PIN_A3
#define  RED      PIN_A4
#define  LOCK     PIN_B3
#define  JMP2     PIN_A6
#define  JMP3     PIN_A7
#define  LMX_LD   PIN_B0
#define  RX       PIN_B1
#define  TX       PIN_B2
#define  SPARE    PIN_B3
#define  JMP0     PIN_B4
#define  JMP1     PIN_B5

#define GREEN_ON output_low(PIN_A3)
#define GREEN_OFF output_high(PIN_A3)
#define RED_ON output_low(PIN_A4)
#define RED_OFF output_high(PIN_A4)
#define LOCK_ON output_high(PIN_B3)
#define LOCK_OFF output_low(PIN_b3)


x1gadf.c

#include "x1gadf.h"

void
ADF_write_byte (unsigned char data, unsigned char number)
// write the the <number> of <data> to the lmx, msb first
{
    while (number > 0) {
    output_low(LMX_CL);
    delay_us(1);
    output_bit(LMX_DA, (data & 128));
    delay_us(1);
    output_high(LMX_CL);
    delay_us(1);
    output_low(LMX_CL);
    data = data << 1;
    number--;}
}

 void
 ADF_write (unsigned char data1, unsigned char data2, unsigned char data3)
 // write the 21 MSBs
 {
     output_high(LMX_LE);
     delay_us(1);
     output_low(LMX_LE);
     delay_us(1);
    ADF_write_byte(data1, 8);
    ADF_write_byte(data2, 8);
    ADF_write_byte(data3, 8);
    delay_us(1);
    output_high(LMX_LE);
 }

void
sayhi(void)
{
    GREEN_OFF; delay_ms (100);
    GREEN_ON;  delay_ms (100);
}

void
blink (unsigned char number)
{
   if (number == 0) {
   RED_OFF;  delay_ms (250);
    RED_ON; delay_ms (750);
    RED_OFF;  delay_ms (250);
   }
   while (number > 0) {
   RED_OFF;  delay_ms (250);
    RED_ON;  delay_ms (250);
    RED_OFF; delay_ms (250);
    number--;}
}



void
main(void)
{

    unsigned char jump;
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc(ADC_OFF);
    LOCK_OFF;
    sayhi();
    // OK, now everybody nows we are running, let s get going
   
    blink(4);

   

    // write N R F
    // to LMX chip
    ADF_write(0, 0, 150);
    ADF_write(0, 0, 4);
    ADF_write(0, 12,17);
    ADF_write(0, 0, 146);

    // I think we are done here, say goodbye
    sayhi();
 //    for (;;) continue;    // done. loop forever
      while (1>0) {sayhi(); if (input(LMX_LD)) {LOCK_OFF;RED_OFF;} else {LOCK_ON;RED_ON;}} // test always do something
}


x1gadf.HEX

Author:  on4iy@qsl.net. Version: Sat Jan 30 17:06:14 CET 2010