TS-2000SDX用基準発振器の製作 15.600000MHz

実装すると問題ありです 検討中^^;

一台で1.9MHzから1200MHzまでカバーするトランシーバーはいいですね。
この無線機のノイズリダクションのNR2が凄い。
CW運用に最高のパフォーマンスを提供してくれています。
しかし、VUHFでのFM運用なら問題ありませんが、144MHzでのGT65やFT8運用、430MHz、1200MHzなどでのCW・SSBでは周波数確度が心配なこの頃です。
そこで、外部のGPSでロックした発振器やルビジューム発振器で精度を高める基準発振器を製作しました。
外部からの入力で自動切り替えをします。


内部発振器TCVCXOはIQXT-220-2を使用しています。

 

ルビジューム発振器で制御(ルビジューム発振器の精度になります)        内部発振器の時(0.5Hz以内に収まるようです)
 





CE3回路図    水魚堂の回路図エディタで作成しています
MB3パターン図  Minimal Board Editor(MBE)で作成しています

プログラム

/*
 * AD9851 DDS 1point oscillator
 * File:   dds1posc.c
 * Author: ja7eif
 *
 * Created on 2023/04/23, 10:31
 * Version 1.00
 * Int OSC 4MHz
 * DDSへの送信フォーマットは下記順序
 *   W0  Freq bit0(LSB)
 *   W1  Freq bit1   
 *   ------------
 *   W31 Freq bit31(MSB)
 *   W32 x6 REFCLK Multiplier Enable
 *   W33 0
 *   W34 Power Down at 1
 *   W35 Phase bit0(LSB)   360度/32で指定
 *   --------------
 *   W39 Phase bit4(MSB)
 * 
 * クロックは10MHz×6=60MHz
 * 設定値=(2の32乗(4,294,967,296)÷クロック周波数(60000000)x出力周波数 → 71.58278827x出力周波数
 * 出力周波数は15.600MHzなので設定値は1116691497
*/

// PIC12F629 Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

#define _XTAL_FREQ  4000000
#define _RESET      GP5
#define W_CLK       GP0
#define FQ_UD       GP1
#define SDATA       GP4
#define TP          GP2

unsigned long Frequency = 1116691497;      //15600000Hz
void serial_out(unsigned long  Freq);

void main(void) {
    __delay_ms(2000);
    TRISIO = 0;
    OPTION_REG = 0;
    W_CLK = 0;
    FQ_UD = 0;
    SDATA = 0;
    __delay_us(1);    
    // RESET
    _RESET = 1;
    __delay_us(1);
    _RESET = 0;
    W_CLK = 1;          //シリアルモードに変換
    W_CLK = 0;
    FQ_UD = 1;          //シリアルモードイネーブル 
    FQ_UD = 0;

    serial_out(Frequency);
    SLEEP();
}

/**************************************************************
  シリアル送信関数
**************************************************************/
void serial_out(unsigned long Freq)
{
    int	i, j;
    unsigned int w0 = 1;    // x6

    // 周波数値32ビット出力する
    for(i=0; i<4; i++)
    {
        for(j=0; j<8; j++){
            SDATA = Freq & 1;
            W_CLK = 1;
            W_CLK = 0;
            Freq = Freq >> 1;
        }
    }
    // 設定制御8ビット出力
    for(j=0; j<8; j++){
        SDATA = w0 & 1;
        W_CLK = 1;
        W_CLK = 0;
        w0 = w0 >> 1;
    }
    FQ_UD = 1;            //周波数設定
    FQ_UD = 0;
}