SSブログ

uSDX+2.00cファームウエア [uSDX]

uSDX+2.00cファームウエアスケッチを少し変更してみました。

uSDX_2.00c.jpg

まず、5文字しか入力できなかったコールサインを6文字入力できるようにします。
下図の117行、CALLSING_LENGTHを5から6に変えます。
104行、107行、111行を自分のコールサインに書き換えます。コールサインの後に空白の入力も必要です。
113行をコメントアウトして114行をコメントにします。

001.jpg

次はSi5351のクリスタルです。
私は27MHzを使っているので、167行をコメントアウトし169行をコメントにします。
クリスタルの数値は補正値を入れています。

002.jpg

このスケッチの変更はWB2CBAの1.02基板で使用しました。
受信音は従来のバージョンより聴きやすい音になっているのではないかと思います。また、市販のリグと比べても遜色ないと思います。あくまで主観であって、聴き比べたリグも最新のものは持っていないのでTS-680との比較です。
機能も増えていて使いやすいものないなっているようですが、まだ詳しく使い込んでいるわけではありません。
今開発途中のpico版バンドスコープ付uSDXの参考になればと思ってスケッチを眺めています。

ここからファームウエアはダウンロードできますが、Groupsにログインする必要があります。
https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fg%2Fucx%2Ffiles%2FFirmware%2520update%2520branch%2520de%2520G8RDI%2FFirmware_200c_forAll&data=05%7C01%7C%7Cf2f6d9180d0d4fd22fde08dac4a2e9bc%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C638038501231318098%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=qt%2B9LoASBYfp8GA431KMEBd16ccQvZQY%2F3y%2BTFisTA4%3D&reserved=0


nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

位相制御のVFOの実験 [VFO]

Si5351のライブラリーを使った7MHzのVFOを作ってみて、VHFではどうなのか実験しました。
単純に周波数を50MHzにしてみると…

50_00.jpg

50_02.jpg

ライブラリの初期設定で、出力を電圧をUPしていますが出力に差があります。

144MHzの場合は…

144_000.jpg

144_00.jpg

144MHzでは全く位相制御ができていません。
ただ、私のオシロでは144MHzの測定はあてになりません。

次は、ライブラリを使わずにSi5351のレジスタを書き換えるスケッチにしました。

144_01.jpg

144_02.jpg

90°の位相差はできているようです。
Si5351のライブラリーは使いやすいのですが、位相制御をしようとした場合はHFに限定したほうがいいのでしょう。
とりあえず実験はここまで。これをどうするのかは今のところ考えていません。
しかし、もう少しいいオシロが欲しいです!

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

位相制御のVFO [VFO]

pico版のuSDXwp目指している途中で、位相制御のVFO部分だけをnanoで作ってみました。Si5351のライブラリーを使ったのでスケッチはとてもシンプルになりました。
しかし問題が二つあります。一つは予想できたことですがコンパイル後の実行ファイルが大きくなって、ATmega168のnanoではフラッシュメモリ少なくてインストールできません。ATmega328が必要です。
もう一つは、PLLの周波数が600〜900MHzの範囲である必要があって、位相差を指定するためにはSi5351の基準発信周波数の整数倍でないといけない制約があります。
27MHzなら27x23=621MHz 位相差の制御は7ビットなので 621/128=4.851MHzが最小の周波数になります。
25MHzなら25x24=600MHz 600/128=4.69MHzMHzです。したがって3.5MHzでは使えません。
周波数表示は0.91のOLEDです。
ロータリーエンコーダーのプッシュスイッチで周波数のステップ数を変更しています。(1kHz、100Hz、10Hzです)



回路図とスケッチを載せておきます。

Si5351_VFO.jpg
---------------------------------------------------------------------------------------


/*
位相制御VFO 2023年2月13日 JR3XNW
Etherkit Si5351 - Arduino Library <a href="https://github.com/etherkit/Si5351Arduino" target="_blank">https://github.com/etherkit/Si5351Arduino</a>
*/

#include <Rotary.h>
#include <si5351.h>
#include <Wire.h>
#include <SSD1306AsciiAvrI2c.h>

SSD1306AsciiAvrI2c oled;
Rotary r = Rotary(2, 3);
Si5351 si5351;

//////////////////////////
// ステップスイッチ
//////////////////////////
#define   SW_STEP 4                 // 周波数ステップ

//////////////////////////
// レジスターのセット
//////////////////////////
unsigned long FREQ = 7000000; //
unsigned long long FREQ_ULL = 700000000ULL; //0.01Hzまでの設定・64ビットのデータ型
unsigned long long pll_freq = 75600000000ULL; //0.01Hzまでの設定・64ビットのデータ型

const long LOW_FREQ = 7000000;    // 下限周波数
const long HI_FREQ = 7200000;     // 上限周波数
unsigned long FREQ_OLD = FREQ;    // old frequency
int STEP = 1000;                  // STEP(default)

int phase; //90°位相差設定

//////////////////////////
// Rotary Encoder 外部割込み処理ルーチン
//////////////////////////
void rotary_encoder(){
  unsigned char result = r.process();
  if(result){
    if(result == DIR_CW){
      FREQ = FREQ + STEP;
    }else{
    FREQ = FREQ - STEP;
    }
  }
  FREQ = constrain(FREQ,LOW_FREQ,HI_FREQ); //VFOの下限と上限を超えないように
  FREQ_ULL = FREQ * 100ULL;
}

//////////////////////////
//STEP SWが押された時の処理
//////////////////////////
void Fnc_Stp()
{
  if(STEP == 10){
  STEP = 1000;
  }
  else{
  STEP /= 10;
  }
  delay(10);
  Step_Disp(STEP);
  while(digitalRead(SW_STEP) == LOW){
    delay(10);
  }
}

//////////////////////////
// setup
//////////////////////////
void setup()
{
  r.begin();//ロータリーエンコーダ初期化
  attachInterrupt(0,rotary_encoder,CHANGE); //外部割込み設定
  attachInterrupt(1,rotary_encoder,CHANGE);

  pinMode(SW_STEP,INPUT_PULLUP); //STEP SW 入力に設定しプルアップ

  oled.begin(&Adafruit128x32, 0x3C); //OLED初期化

  Wire.begin();

  // Si5351初期化
  si5351.init(SI5351_CRYSTAL_LOAD_8PF, 27003411, 0);  //二つ目の引数はSi5351の基準発信周波数(補正値を加えている)25MHzの場合は0(デフォルト)
  si5351.drive_strength(SI5351_CLK0, SI5351_DRIVE_4MA); //出力2mAはおよそ3dBm/8mAはおよそ10dBmの出力・3段階の設定

  oled.setFont(font8x8);
  oled.setCursor(6,3);
  oled.print("step:");

  Freq_Set();
  Freq_Disp(FREQ); //周波数表示
  Step_Disp(STEP); //STEP表示
}

//////////////////////////
// loop
//////////////////////////
void loop()
{

  if(digitalRead(SW_STEP) == LOW){Fnc_Stp();} //STEP SWが押されたら、周波数STEPを変更
  
  if(FREQ != FREQ_OLD){ 
    Freq_Set();
    Freq_Disp(FREQ); 
    FREQ_OLD = FREQ;            
  }
  delay(10); 
  
}

//////////////////////////
// 周波数設定
//////////////////////////
void Freq_Set(){
  // Set CLK0 and CLK1
  si5351.set_freq_manual(FREQ_ULL, pll_freq, SI5351_CLK0);
  si5351.set_freq_manual(FREQ_ULL, pll_freq, SI5351_CLK1);

  phase = pll_freq / FREQ_ULL + 0.5; //PLL周波数/発信周波数 90°の位相差設定数値 四捨五入
  si5351.set_phase(SI5351_CLK0, 0);
  si5351.set_phase(SI5351_CLK1, phase); //90°の位相差

  // 位相が揃う前にPLLをリセットする
  si5351.pll_reset(SI5351_PLLA);

  delay(10);
}

//////////////////////////
/// 周波数表示
//////////////////////////
void Freq_Disp(unsigned long Fre){
  String freqt = String(Fre);
  oled.setFont(lcdnums14x24);
  oled.setCursor(0,0);
  oled.print(freqt.substring(0,1) + "." + freqt.substring(1,4) + "." + freqt.substring(4));
}

//////////////////////////
// ステップ数表示
//////////////////////////
void Step_Disp(int Stp){
  oled.setFont(font8x8);
  oled.setCursor(46,3);
  if(Stp == 1000){
  oled.print(" 1K");
  }else if(Stp == 100){
    oled.print("100");
  }else{
    oled.print(" 10");
  }
}



-----------------------------------------------------------------------
私は27MHzで作りましたが、25MHzの場合はSi5351初期化で、
si5351.init(SI5351_CRYSTAL_LOAD_8PF, 27003411, 0); 二つ目の引数を0(デフォルトで25MHzが指定されます)にしてください。(赤文字の部分、このスケッチでは周波数の補正をしています)


nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

pico uSDX VFO [pico uSDX]

やっと位相制御のVFOまでプログラムできました。インターネットで情報を検索してSi5351のライブラリーを使って、JA2GQP OMの記事も参考にさせてもらってなんとか動作するようになりました。
次は復調です。これで受信機としての動作はできるようになります。
picoのコア0にバンドスコープをコア1にVFOのプログラムで進めていたのですが、問題が多々発生して結局コア0にまとめてしまいました。今後の課題です。
もう少しわかりやすいプログラムにして公開したいと思います。現状はつぎはぎだらけで本人でも??になります。

pico_VFO_FFT.jpg

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

uSDXのファームウェアをバージョンアップ [uSDX]

ファームウェアをuSDX+2.00Cにしてみました。
送受信についてのテストは詳しくしていませんが、メニューの操作性がちょっとだけ良くなっています。1〜8までの項目がループするようになっています。
それと、右ボタンでの電波形式の選択が、これまではCW、LSB、USBの3形式だけでした。それ以外の場合はメニューから選ぶ必要があったのですが、右ボタンだけでCW、LSB、USB、AM、FMの5つが切り替えられるようになりました。
残念なのは、CWの自動送信機能があるのですが、コールサインが5文字しか入りません。これについてはスケッチを見てみようと思います。6文字まで対応できるように変更できるかな。

ちなみに、ファームウェアはGroups.ioからダウンロードできます。

タグ:USDX
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

pico バンドスコープとVFOとSメーター [pico]

picoバンドスコープに位相制御のVFOとSメーターを追加しました。しかし、VFOがうまくいきません。ここ数日悩んでいます。
バンドスコープを持ったpico版uSDXを目指しているのですが先はまだまだ見えません。

VFO_S.jpg

uSDXも少しLPFを作り変えたり、オペアンプのLPFのCRを変更したり細かい実験を続けています。
もう少し形になれば公開したいと思っています。
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。