お盆休み終わりの間近な頃、ようやくSi5351Aのプログラムを開始。
少し前からちょっとづつテストはしていたが、思うように動かすことができず放置気味。
CONVOY本体も不動のPLLユニットを調べてみるが、回路図がないのでお手上げ。
少し前からSi5351Aの3ch同時出力を試していたが、1ch分だけ指定した周波数で出力しない現象があり解決できないままだった。
JH7UBC氏のサイトを見ながらあれこれやるが、私が理解できていない部分が多く行き詰まった。
BASCOMで書き直すとかも考えたが大変そうなので、Arduino用のライブラリを公開しているところを探したところ、丁度いいライブラリを見つけた。
ここのサンプルスケッチが分かりやすく、3chそれぞれの出力ON/OFFと周波数設定ができるのでこれを流用。
ここのサンプルを使って
-----
#include "si5351mcu.h"
// lib instantiation as "Si"
Si5351mcu Si;
// some variables
// long F1 = 38700000; // 60.0 MHz to CLK0 rx 28.305MHz RX PLL出力
// long F2 = 10240000; // 60.5 MHz to CLK1 lo RX 2nd IF用
long F3 = 28005000; // 60.5 MHz to CLK2 tx 28.305MHz TX PLL 出力
void setup() {
// init the Si5351 lib
// Si.init();
// For a different xtal (from the default of 27.00000 Mhz)
// just pass it on the init procedure, just like this
// Si.init(26570000);
Si.init(25000000L); //秋月基板は基準が25MHZなので、この一行追加
// set & apply my calculated correction factor
Si.correction(-550); //Fズレ補正用 Hz単位で指定
// set max power to both outputs
// Si.setPower(0, SIOUT_2mA); //rx _8mAも指定可能
// Si.setPower(1, SIOUT_2mA); //lo
Si.setPower(2, SIOUT_2mA); //tx
// Set frequencies ここではF3のみ出力する用にコメントアウト化している
// Si.setFreq(0, F1); // rx
// Si.setFreq(1, F2); // lo
Si.setFreq(2, F3); // tx
// reset the PLLs
Si.reset();
}
void loop() {
// do nothing
}
-----
このスケッチも同時に3ch出力ができないので、RX時にRx用のPLL周波数と2nd IF用の10.24MHzの2つ、TX時にTx用のPLL周波数を出力するようにすればイケそう。
3クリスタル式でも応用が利きそうで、上のスケッチでのF1の周波数を親石の周波数、F2/F3をTX/RXの小石の周波数とし、TX/RXでそれぞれ切り替えて出力する設定にすれば良さそう。
このスケッチはArduino ProMiniやUnoだと、A4/A5ピンがI2C用になる(厳密にはWire.hが指定している)、F1はSi5351AのPLL-A、F2/F3はPLL-Bを使う仕様になっている。