回路図
回路図は、AFPSN VFO回路の不要な所を除いたのみである。スケッチ
ライブラリは、バージョンが異なると正しく動作しない場合がある為、スケッチと同じフォルダにsrcフォルダを作って、si5351.hとLiquidCrystal_I2C.hが入れてある。必要なファイルはsi5351 VFOフォルダのcb_vfo.zip。//////////////////////////////////////////////////////////////////////
// si5351a CB VFO program ver.1.0
// Copyright(C)2019.JA2GQP.All rights reserved.
//
// 2019/2/26
// JA2GQP
//////////////////////////////////////////////////////////////////////
#include "src/si5351.h" // Ver2,1,0
#include "src/LiquidCrystal_I2C.h" // 1.1.2
#include <EEPROM.h>
//---------- Set I/O Device ---------------------
LiquidCrystal_I2C lcd(0x27,16,2); // address 0x27, display 16x2
Si5351 si5351;
//---------- Define Constant Value ----------
#define SW_CH 5 // CH SW
#define SW_TX 9 // TX SW
////////////////////////////////
// Channel Frequency
////////////////////////////////
#define CH1_FRQ 26968000L // Channel 1 Frequency
#define CH2_FRQ 26976000L // 2
#define CH3_FRQ 27040000L // 3
#define CH4_FRQ 27080000L // 4
#define CH5_FRQ 27088000L // 5
#define CH6_FRQ 27112000L // 6
#define CH7_FRQ 27120000L // 7
#define CH8_FRQ 27144000L // 8
#define CH9_FRQ 27005000L // 9
#define CH10_FRQ 27524000L // 10
////////////////////////////////
// etc
////////////////////////////////
#define CH1 1 // Channel 1
#define CH2 2 // Channel 2
#define CH3 3 // Channel 3
#define CH4 4 // Channel 4
#define CH5 5 // Channel 5
#define CH6 6 // Channel 6
#define CH7 7 // Channel 7
#define CH8 8 // Channel 8
#define CH9 9 // Channel 9
#define CH10 10 // Channel 10
#define Max_Chn 10 // Max Channel(10ch)
#define Int_End 73 // Initial end code
#define CALL "JA2GQP" // Display Call sign
#define IF_FRQ 455000L // IF Frequency 455kHz
//---------- EEPROM Memory Address -----------------------
#define Eep_Int 0x00 // Eep Init(1byte*1)
#define Eep_Chn 0x01 // Channel(1byte*1)
//---------- Memory Assign -------------------
unsigned long Vfo_Dat = 0; // VFO Data
unsigned long Vfo_Datb = 0; // old
unsigned long If_Dat;
unsigned long Frq_Dat; // Frequency Data
byte Byt_Chn = CH1; // Channel SW
byte Flg_Tx = 0; // TX Flag
//---------- Initialization Program ---------------
void setup(){
si5351.init(SI5351_CRYSTAL_LOAD_8PF,0,0);//crystal 25.000 MHz, correction 0
si5351.drive_strength(SI5351_CLK0,SI5351_DRIVE_4MA);//Drive lebel 4mA set
lcd.begin();
lcd.backlight();
lcd.clear();
pinMode(SW_TX,INPUT_PULLUP);
pinMode(SW_CH,INPUT_PULLUP);
if(EEPROM.read(Eep_Int) != Int_End){ // Eep initialaz
delay(10);
Fnc_Eep_Int();
}
Byt_Chn = EEPROM.read(Eep_Chn); // Channel
Channel_Set();
LCD_Line1();
}
//---------- Main program ---------------
void loop() {
if(digitalRead(SW_TX) == HIGH){ // TX off?
if((digitalRead(SW_CH) == LOW)){ // CH SW On?
Fnc_Chsw();
Channel_Set();
}
Flg_Tx = 0;
If_Dat = IF_FRQ;
si5351.output_enable(SI5351_CLK0,1); // PLL Out enable
}
else{ // TX on
if(Byt_Chn <= CH8){ // CH1-CH8?
Flg_Tx = 1; // Yes,TX Flag set
If_Dat = 0; // If_Dat 0 set
si5351.output_enable(SI5351_CLK0,1);// PLL Out enable
}
else{ // CH9-CH10
Flg_Tx = 0; // TX Flag reset
If_Dat = IF_FRQ; // If_Dat set
si5351.output_enable(SI5351_CLK0,0);// PLL Out disable
}
}
Vfo_Dat = Frq_Dat + If_Dat;
if(Vfo_Dat != Vfo_Datb){ // Frequency update?
si5351.set_freq(Vfo_Dat * SI5351_FREQ_MULT,SI5351_CLK0);
Vfo_Datb = Vfo_Dat;
}
LCD_Line1();
}
//---------- Channel Data Set & LCD Line0 Display ---------
void Channel_Set(){
lcd.setCursor(0,0);
lcd.print("CH");
switch(Byt_Chn){
case CH1:
Frq_Dat = CH1_FRQ;
lcd.print("01 26.968");
break;
case CH2:
Frq_Dat = CH2_FRQ;
lcd.print("02 26.976");
break;
case CH3:
Frq_Dat = CH3_FRQ;
lcd.print("03 27.040");
break;
case CH4:
Frq_Dat = CH4_FRQ;
lcd.print("04 27.080");
break;
case CH5:
Frq_Dat = CH5_FRQ;
lcd.print("05 27.088");
break;
case CH6:
Frq_Dat = CH6_FRQ;
lcd.print("06 27.112");
break;
case CH7:
Frq_Dat = CH7_FRQ;
lcd.print("07 27.120");
break;
case CH8:
Frq_Dat = CH8_FRQ;
lcd.print("08 27.144");
break;
case CH9:
Frq_Dat = CH9_FRQ;
lcd.print("09 27.005");
break;
case CH10:
Frq_Dat = CH10_FRQ;
lcd.print("10 27.524");
break;
default:
break;
}
EEPROM.write(Eep_Chn,Byt_Chn);
lcd.setCursor(13,0);
lcd.print("MHz");
}
//---------- LCD Line1 Display ---------
void LCD_Line1(){
lcd.setCursor(0,1);
if(Flg_Tx == 1)
lcd.print("TX");
else
lcd.print("RX");
lcd.setCursor(10,1);
lcd.print(CALL);
}
//---------- Function CH SW Check ---------
void Fnc_Chsw(){
Byt_Chn++;
while(digitalRead(SW_CH) == LOW)
;
if(Byt_Chn > Max_Chn)
Byt_Chn = CH1;
}
//---------- Function Eeprom Initialization -----------------
void Fnc_Eep_Int(){
EEPROM.write(Eep_Int,Int_End); // Init end set(73)
EEPROM.write(Eep_Chn,CH1); // Init end set(73)
}
8 件のコメント:
お世話に成っております。
松永です
si5351a CB VFOでチャンネル切り替えをロータリーエンコーダーで
アップダウンさせたいと思っています、
#define SW_CH_R 6 // CH SW リバース
この場合プログラムとしてチャンネルリバース用の一式のプログラムを
書いて行うのか、何かヒントいただけないでしょうか。
お忙しいとこすみません。
松永さん
先日、7segを使った物を作りました。
Blogにはupしてないのですが、Twitterで公開しました。
JA2GQP' Download siteのsi5351 VFOフォルダにcb_7seg_vfo.zipが有ります。
これをダウンロードしてください。
https://sites.google.com/site/ja2gqp/
JA2GQP局
おおさかJR3です。
情報有難う御座います、
プログラムの勉強と実利用させて頂きます。
プログラム公開感謝しております。
親愛なるJA2GQPさん、
良い一日
私があなたの経験を共有することに非常に感謝する前に、私に尋ねさせてください。
私はプログラムを正常に実行しました、そしてそれは私にとって異常です。
私はプロジェクトを作成しようとしていますが、少し異なりますが、TXのときに周波数がCLK1またはCLK2で出力されているときにCLK0のプログラムをオフにし、CLK0のRXのときは周波数が存在しているのにCLK1またはCLK2でオフになっています。
結果がエラーにならないように変更する必要があるプログラムリストの部分をガイドしてください
あなたが私の質問に喜んで答えてくれるなら、私はとても感謝しています
ありがとうございました :-)
匿名さん
貴方の仕様の通り動作させるのは簡単です。
私のBlogに訪れる人は、少なくともプログラムが独自で出来るスキルが有ると判断してます。助言を求めなくて作れる程度の内容です。
Hi, I am daniel, nice work with these projects, I have old CB radio, which need 40ch 7seg. And 3 band will make it totally 40x3 band . Can you help me please ?... Email me danieldwi69@gmail.com
Thank you
I wrote it on my blog, but it doesn't support customization. very sorry.
コメントを投稿