部品実装基板である。0Ωは、ジャンパーとして使用している。部品の大半がジャンパーなので、PCBとして出来が悪いかも知れない。
回路図である。nokia5110のバックライトは、現時点で電源印可の違いで、2種ある事が判っているいる。
タイプ1 BL端子 VCC接続
タイプ2 BL端子 GND接続
バックライトのタイプの違いに対応する為、ジャンパチップで設定する事にした。
基板寸法 93 x 47
Program
使っているライブラリは、ソースに書いて有るので参照願いたい。BANDプランでモード変更(CW、LSB、USB)を行っているので、必要に応じ修正しなければならない。
//////////////////////////////////////////////////////////////////////
// si5351 VFO program ver.1.0
// Copyright(C)2016.JA2GQP.All rights reserved.
//
// Arduino IDE 1.6.9 Compiled
//
// 2016/5/30
// JA2GQP
//--------------------------------------------------------------------
// Function
// 1.STEP(1M,100k,10k,1k,100,10)
// 2.Memory Channel ch0 - ch9(10ch)
// 3.Protection Operation At The Time Of Transmission
//--------------------------------------------------------------------
// Library
// Rotary encoeder http://www.buxtronix.net/2011/10/rotary-encoders-done-properly.html
// si5351Arduino https://github.com/etherkit/Si5351Arduino
// LCD5110_Basic http://www.rinkydinkelectronics.com/library.php?id=44
//////////////////////////////////////////////////////////////////////
#include <rotary.h>
#include <si5351.h>
#include <Wire.h>
#include <LCD5110_Basic.h>
#include <EEPROM.h>
//---------- Define Constant Value -----------------------
////////////////////////////////
// I/O assign
////////////////////////////////
const byte ENC_A = 2; // Encorder A
const byte ENC_B = 3; // Encoeder B
const byte SW_STEP = 4; // STEP SW
const byte SW_RIT = 5; // RIT SW
const byte SW_CH = 6; // CH SW
const byte SW_TX = 15; // TX SW
const byte AD_IN = A0; // analog input for left channel
////////////////////////////////
// default value
////////////////////////////////
const long DEF_FRQ = 7050000L; // Default Vfo(7.05MHz)
const long DEF_STP = 1000L; // Init STEP(1kHz)
////////////////////////////////
// Limited range
////////////////////////////////
const long LW_FRQ = 0L; // Frequency Lower Limit
const long HI_FRQ = 60000000L; // Upper Limit
const long LW_RIT = -10000L; // RIT Lower Limit
const long HI_RIT = 10000L; // RIT Upper Limit
const long LW_VFO80 = 3500000L; // 3.5MHz Lower
const long MI_VFO80 = 3535000L; // Middle
const long HI_VFO80 = 3575000L; // Upper
const long LW_VFO40 = 7000000L; // 7MHz Lower
const long MI_VFO40 = 7045000L; // Middle
const long HI_VFO40 = 7200000L; // Upper
const long LW_VFO20 = 14000000L; // 14MHz Lower
const long MI_VFO20 = 14100000L; // Middle
const long HI_VFO20 = 14350000L; // Upper
const long LW_VFO15 = 21000000L; // 21MHz Lower
const long MI_VFO15 = 21150000L; // Middle
const long HI_VFO15 = 21450000L; // Upper
const long LW_VFO10 = 28000000L; // 28MHz Lower
const long MI_VFO10 = 28200000L; // Middle
const long HI_VFO10 = 29000000L; // Upper
////////////////////////////////
// etc
////////////////////////////////
const byte Max_Chn = 10; // Max Channel(1-10ch)
const byte Int_End = 73; // Initial end code
//---------- EEPROM Memory Address -----------------------
const byte Frq_Eep = 0x00; // Frequency(4byte*10)
const byte Stp_Eep = 0x30; // STEP(4byte*10)
const byte Chn_Eep = 0x60; // Channel(1byte*1)
const byte Eep_Int = 0x6e; // Eep Init(1byte*1)
//---------- LCD NOKIA 5110 definition --------------------
LCD5110 myGLCD(8,9,10,11,12); // SCK,MOSI,DC,RST,CS
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
//---------- si5351 definition -----------------------------
Si5351 si5351;
//---------- Encorder Pin definition ----------------------
Rotary r = Rotary(ENC_A, ENC_B);
//---------- Memory Assign --------------------------------
volatile long LSB = 10701500L; // 10.7015MHz
volatile long USB = 10698500L; // 10.6985MHz
volatile long CW = 10700600L; // 10.7006MHz
volatile long bfo = 10701500L; // start in LSB
volatile long IF = 10700000L; // 10.7000MHz
volatile long Vfo_Dat = DEF_FRQ; // Default Frequency
volatile long Vfo_Datb; // Vfo data(old)
volatile long Lng_Wk1; // Long Work1
volatile long Lng_Wk2; // Long Work2
volatile long Dds_Dat;
String tbfo = "";
volatile long Rit_Dat = 0; // RIT Data
volatile long Rit_Datb = 0;
volatile long Enc_Stp = 1000; // STEP
byte Flg_Tx = 0; // TX Flag
byte Flg_Rit = 0; // RIT Flag
byte Flg_Spl; // SPLIT Flag
byte Flg_Over; // Over Flag
byte Byt_Chn = 0; // Channel SW
byte Byt_Chnb = 0; // Channel SW Old
//---------- Initialization Program ----------------------
void setup(){
myGLCD.InitLCD(); // nokia5110 Init
Wire.begin();
si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0); //initialize the Si5351
si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA); // Set PLL
// Set CLK0 Frequency(VFO)
pinMode(SW_STEP,INPUT_PULLUP);
pinMode(SW_RIT,INPUT_PULLUP);
pinMode(SW_CH,INPUT_PULLUP);
pinMode(SW_TX,INPUT_PULLUP);
PCICR |= (1 << PCIE2); // Enable pin change interrupt for the encoder
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei(); // INT Enable
Rit_Dat = 0;
Flg_Rit = 0;
if(EEPROM.read(Eep_Int) != Int_End){ // Eep initialaz
delay(10);
Fnc_Eep_Int();
}
Byt_Chn = EEPROM.read(Chn_Eep); // Eep Channel Read
Byt_Chnb = Byt_Chn;
Fnc_Eep_Rd();
Fnc_Lcd(); // Display LCD
Fnc_Step_Disp();
}
//---------- Main program ---------------------------------
void loop(){
if(Flg_Tx == 0){
Fnc_Smeter();
if(digitalRead(SW_STEP) == LOW) // STEP Sw On?
Fnc_Stp();
if((digitalRead(SW_RIT) == LOW)) // RIT SW On?
Fnc_Rit();
if((digitalRead(SW_CH) == LOW)) // CH SW On?
Fnc_Chsw();
if(Byt_Chnb != Byt_Chn){ // CH SW OLD != NEW?
Fnc_Eep_Wt(Byt_Chnb);
Byt_Chnb = Byt_Chn;
Fnc_Eep_Rd();
}
}
if(digitalRead(SW_TX) == LOW) // Tx On?
Flg_Tx = 1;
else
Flg_Tx = 0;
Fnc_Step_Disp();
Fnc_Lcd();
if((Flg_Tx == 0) && (Flg_Rit == 1))
si5351.set_freq(((Vfo_Dat+IF+Rit_Dat) * SI5351_FREQ_MULT), SI5351_PLL_FIXED, SI5351_CLK0);
if((Flg_Tx == 1) || (Flg_Rit == 0))
si5351.set_freq(((Vfo_Dat+IF) * SI5351_FREQ_MULT), SI5351_PLL_FIXED, SI5351_CLK0);
Fnc_Band(Vfo_Dat);
if(Flg_Over == 1) // Over?
myGLCD.print("over",CENTER,16); // Display(over)
else
myGLCD.clrRow(2); // Clear(over)
if((Flg_Over == 1) && (Flg_Tx == 1))
si5351.output_enable(SI5351_CLK0, 0); // VFO disable
else
si5351.output_enable(SI5351_CLK0, 1); // VFO enable
si5351.set_freq(( bfo* SI5351_FREQ_MULT), 0, SI5351_CLK2);
}
//---------- Function S-Meter Display -----------------------
void Fnc_Smeter(){
int ad1 = 0;
int ad2 = 0;
for(int i=0;i<6;i++){
ad1 = map(sqrt( analogRead( AD_IN )*20 ),0,143,0,140);
ad2 = ad1 + ad2;
}
ad2 = ad2 / 5;
int s_dat = map(ad2,0,140,0,14);
for (int i=0; i<s_dat; i++)
myGLCD.print("\\",(i*6), 40);
myGLCD.clrRow(5,(s_dat*6));
if(s_dat < 1)
myGLCD.print("S0 ",RIGHT,32);
else if((s_dat <=1) &&(s_dat < 2))
myGLCD.print("S1 ",RIGHT,32);
else if((s_dat <= 2) && (s_dat < 4))
myGLCD.print("S3 ",RIGHT,32);
else if((s_dat <= 4) && (s_dat < 5))
myGLCD.print("S5 ",RIGHT,32);
else if((s_dat <= 5) && (s_dat < 7))
myGLCD.print("S7 ",RIGHT,32);
else if((s_dat <= 7) && (s_dat < 9))
myGLCD.print("S9 ",RIGHT,32);
else if((s_dat <= 9) && (s_dat < 12))
myGLCD.print("S9+10",RIGHT,32);
else if((s_dat <= 12) && (s_dat < 13))
myGLCD.print("S9+20",RIGHT,32);
else if(s_dat >= 13)
myGLCD.print("S9+40",RIGHT,32);
}
//---------- Encorder procedure(INT) ---------------
ISR(PCINT2_vect) {
unsigned char result = r.process();
if(Flg_Tx == 0){
if(result) {
if(result == DIR_CW){
Lng_Wk1 = Vfo_Dat + Enc_Stp;
Lng_Wk2 = Rit_Dat + Enc_Stp;
}
else{
Lng_Wk1 = Vfo_Dat - Enc_Stp;
Lng_Wk2 = Rit_Dat - Enc_Stp;
}
if(Flg_Rit == 1)
Rit_Dat = Lng_Wk2;
else{
Vfo_Dat = Lng_Wk1;
Rit_Dat = 0;
}
Vfo_Dat = constrain(Vfo_Dat,LW_FRQ,HI_FRQ); // VFO range check
Rit_Dat = constrain(Rit_Dat,LW_RIT,HI_RIT); // RIT range check
}
}
}
//---------- Function Encorder STEP -----------------------
void Fnc_Stp(){
if(Enc_Stp == 10) // Step = 10Hz ?
Enc_Stp = 1000000; // Yes,1Mhz set
else
Enc_Stp = Enc_Stp / 10; // Step down 1 digit
Fnc_Step_Disp();
while(digitalRead(SW_STEP) == LOW)
;
}
//---------- Function STEP Display ------------------------
void Fnc_Step_Disp(){
switch(Enc_Stp){
case 10:
myGLCD.print(" 10", RIGHT,24);
break;
case 100:
myGLCD.print(" 100", RIGHT,24);
break;
case 1000:
myGLCD.print(" 1k", RIGHT,24);
break;
case 10000:
myGLCD.print(" 10k", RIGHT,24);
break;
case 100000:
myGLCD.print("100k", RIGHT,24);
break;
case 1000000:
myGLCD.print(" 1M", RIGHT,24);
break;
default:
myGLCD.print(" 1k", RIGHT,24);
Enc_Stp = 1000;
break;
}
}
//---------- Function Save EEPROM 4byte ---------
void Fnc_Eep_Sav4(long value,int address){
address += 3;
for(int i = 0;i < 4;i++){
byte toSave = value & 0xFF;
if(EEPROM.read(address) != toSave){
EEPROM.write(address,toSave);
}
value = value >> 8;
address--;
}
}
//---------- Function Load EEPROM 4byte ---------
long Fnc_Eep_Lod4(int address){
long value = 0;
for(int i = 0;i < 4;i++){
value = value | EEPROM.read(address);
if( i < 3){
value = value << 8;
address++;
}
}
return value;
}
//---------- LCD Display --------------------------
void Fnc_Lcd(){
char s[6] ={'\0'};
Fnc_Fdsp(Vfo_Dat);
myGLCD.setFont(SmallFont);
if(Flg_Tx == 0)
myGLCD.printNumI(Byt_Chn,RIGHT, 0);
else
myGLCD.print("T",RIGHT,0);
myGLCD.print(tbfo,LEFT,24); // Mode
if(Flg_Rit == 1){
myGLCD.print("R",0,32);
if(Rit_Dat != Rit_Datb){
myGLCD.print(" ",6, 32);
Rit_Datb = Rit_Dat;
}
sprintf(s,"%+d",Rit_Dat);
myGLCD.print(s,6, 32);
}
}
//---------- Function Frequency Display ---------
void Fnc_Fdsp(long f_disp){
long f1 = f_disp / 1000L;
long f2 = f_disp % 1000L;
char s1[6] ={'\0'};
char s2[4] ={'\0'};
if(f_disp != Vfo_Datb){
myGLCD.clrRow(0);
myGLCD.clrRow(1);
Vfo_Datb = Vfo_Dat;
}
myGLCD.setFont(MediumNumbers);
myGLCD.printNumI(f1,LEFT, 0);
myGLCD.setFont(SmallFont);
sprintf(s2,"%03d",f2);
myGLCD.print(s2,RIGHT,8);
}
//---------- Function Rit ---------
void Fnc_Rit(){
char s[6] ={'\0'};
if(Flg_Rit == 0){
Rit_Dat = 0;
Fnc_Eep_Wt(Byt_Chn);
myGLCD.print("R",0,32);
sprintf(s,"%+d",Rit_Dat);
myGLCD.print(s,6, 32);
Flg_Rit = 1;
}
else{
Flg_Rit = 0;
myGLCD.print(" ",0, 32);
}
while(digitalRead(SW_RIT) == LOW)
;
}
//---------- Function CH SW Check ---------
void Fnc_Chsw(){
byte cnt = 0;
Byt_Chn++;
while(digitalRead(SW_CH) == LOW){
delay(500);
cnt++;
if(6 <= cnt){ // Eep Initial start(3sec)?
Fnc_Eep_Int(); // Initialization
Byt_Chn = EEPROM.read(Chn_Eep); // Channel Read
Byt_Chnb = Byt_Chn;
Fnc_Eep_Rd(); // EEPROM Read
Fnc_Fdsp(Vfo_Dat);
myGLCD.print("default",CENTER,16);
}
}
}
//---------- Function Band -------------------------------
void Fnc_Band(long vfo){
if((vfo >= LW_VFO80) && (vfo < MI_VFO80)){ // 3.5MHz
Flg_Over = 0;
tbfo = "CW ";
bfo = CW;
}
else if((vfo >= MI_VFO80) && (vfo <= HI_VFO80)){
Flg_Over = 0;
tbfo = "LSB";
bfo = LSB;
}
else if((vfo >= LW_VFO40) && (vfo < MI_VFO40)){ // 7MHz
Flg_Over = 0;
tbfo = "CW ";
bfo = CW;
}
else if((vfo >= MI_VFO40) && (vfo <= HI_VFO40)){
Flg_Over = 0;
tbfo = "LSB";
bfo = LSB;
}
else if((vfo >= LW_VFO20) && (vfo < MI_VFO20)){ // 14MHz
Flg_Over = 0;
tbfo = "CW ";
bfo = CW;
}
else if((vfo >= MI_VFO20) && (vfo <= HI_VFO20)){
Flg_Over = 0;
tbfo = "USB";
bfo = USB;
}
else if((vfo >= LW_VFO15) && (vfo < MI_VFO15)){ // 21MHz
Flg_Over = 0;
tbfo = "CW ";
bfo = CW;
}
else if((vfo >= MI_VFO15) && (vfo <= HI_VFO15)){
Flg_Over = 0;
tbfo = "USB";
bfo = USB;
}
else if((vfo >= LW_VFO10) && (vfo < MI_VFO10)){ // 28MHz
Flg_Over = 0;
tbfo = "CW ";
bfo = CW;
}
else if((vfo >= MI_VFO10) && (vfo <= HI_VFO10)){
Flg_Over = 0;
tbfo = "USB";
bfo = USB;
}
else if (Vfo_Dat < 10000000L){
bfo = LSB;
tbfo = "LSB";
Flg_Over = 1;
}
else{
bfo = USB;
tbfo = "USB";
Flg_Over = 1;
}
}
//---------- Function Eeprom Initialization -----------------
void Fnc_Eep_Int(){
int i;
for (i=0;i<112;i++) // 0 clear(112byte)
EEPROM.write(i, 0);
for(i=0;i<Max_Chn;i++){
Fnc_Eep_Sav4(DEF_FRQ,Frq_Eep+i*4); // Frequency(7.05MHz)
Fnc_Eep_Sav4(DEF_STP,Stp_Eep+i*4); // Step(1kHz)
}
EEPROM.write(Eep_Int,Int_End); // Init end set(73)
}
//---------- Function EEPROM Read ---------
void Fnc_Eep_Rd(){
if((0 <= Byt_Chn) && (Byt_Chn < Max_Chn))
Vfo_Dat = Fnc_Eep_Lod4(Frq_Eep+Byt_Chn*4);
else{
Vfo_Dat = Fnc_Eep_Lod4(Frq_Eep+0*4);
Byt_Chn = 0;
}
if((0 <= Byt_Chn) && (Byt_Chn < Max_Chn))
Enc_Stp = Fnc_Eep_Lod4(Stp_Eep+Byt_Chn*4);
else
Enc_Stp = Fnc_Eep_Lod4(Stp_Eep+0*4);
}
//---------- Function EEPROM Write ---------
void Fnc_Eep_Wt(byte chn){
if((0 <= chn) && (chn < Max_Chn)){
Fnc_Eep_Sav4(Vfo_Dat,Frq_Eep+chn*4);
Fnc_Eep_Sav4(Enc_Stp,Stp_Eep+chn*4);
}
EEPROM.write(Chn_Eep,chn);
}
始めまして、すばらしいVFOですね。
返信削除是非作ってみたいと始めたのですがコンパイラでエラーが出て進みません。
aruduinoIDEは1.6.5です。エラーは、
Si5351 si5351;
の部分で、内容は以下のようです。
GQPVFO:100: error: 'Si5351' does not name a type
GQPVFO.ino: In function 'void setup()':
GQPVFO:139: error: expected unqualified-id before '.' token
GQPVFO:140: error: expected unqualified-id before '.' token
GQPVFO.ino: In function 'void loop()':
GQPVFO:194: error: expected unqualified-id before '.' token
GQPVFO:196: error: expected unqualified-id before '.' token
GQPVFO:206: error: expected unqualified-id before '.' token
GQPVFO:208: error: expected unqualified-id before '.' token
GQPVFO:210: error: expected unqualified-id before '.' token
'Si5351' does not name a type
IDEのバージョン等問題があるのでしょうか?
何かお気づきの点があればサジェッション願えないでしょうか。
IDE1.6.9を使ってますが、1.6.5でも問題なくコンパイル出来ました。
返信削除ただ、気になる所は、Si5351 si5351の行98なので、それ以前の行を変更修正してませんか?単純なミスだと思います。
早々有難うございます。
返信削除特に変更はしていません。
どうもライブラリーがうまく合致していないようで、再度貴記載のものを入れなおしてみます。
Rotaryライブラリーは、Rotaly.LIB.zipですね。これはrenameの必要がありますでしょうか?
Rotaly.LIBの中のRotalyでOKでした。
返信削除必要なライブラリーを提示されているものに入れ替えたらコンパイルできました。
お騒がせしました。どうも似て非なるライブラリーが存在するようです。
有難うございました。
ライブラリは、曲者です。同じ名前で大文字/小文字と異なる物が存在してますから・・・
削除Very interesting design!
返信削除Your article helped me a lot in the creation of their WEF with si5153.
correction VFO with si5351
返信削除Good day, dear Akio Mizuno. I need to modify the sketch on si5351, enter your adjusting of intermediate frequency and 27 MHz reference frequency. Send me an email at my rw9hsf@yandex.ru, I'll post a sketch for refinement. Thank you.
返信削除What is the IF frequency?
削除Уважаемый rw9hsf частота кварца 27 мгц меняется в сроке.
返信削除si5351.init(SI5351_CRYSTAL_LOAD_10PF, 27038010); //Если у вас 27Mhz кристал, если 25 то должен стоять 0 вместо 27038010// 0 is the default crystal frequency of 25Mhz.
27MHzオシレータを使の時、一般的に次の様に書きます。
削除si5351.init(SI5351_CRYSTAL_LOAD_8PF, 27000000);
発振周波数のキャリブレーション方法は、スケッチの例のEtherkitSi5351にあるsi5351calibrationを使えば、補正周波数を得られます。補正値をスケッチに組込む方法も書いて有るので、よく読んでください。
周波数安定性は、水晶発振子の負荷容量との関連も有ります。
Hi Akio!
返信削除It's sketh for Arduino Mega ?
Volume sketh 38 212 bite ?
Hi.
削除This sketch works with the nano.
Using the Arduino IDE 61.6.12 is 19,784 byte.
Mega sketch is needed?
このコメントは投稿者によって削除されました。
返信削除Hi Akio!
返信削除In this time I have Ardouno IDE 1.6.12
All sketh from examples Si5351Arduino compilate in my computer. No problem.
I have problem ih your sketh. Mistake
C:\Users\Алексей\Documents\Arduino\si5351_VFO\si5351_VFO.ino: In function 'void Fnc_Rit()':
si5351_VFO:398: error: 'Fnc_Eep_Wt' was not declared in this scope
C:\Users\Алексей\Documents\Arduino\si5351_VFO\si5351_VFO.ino: In function 'void Fnc_Chsw()':
si5351_VFO:424: error: 'Fnc_Eep_Int' was not declared in this scope
si5351_VFO:427: error: 'Fnc_Eep_Rd' was not declared in this scope
Используем библиотеку Rotary в папке: C:\Program Files\Arduino\libraries\Rotary (legacy)
Используем библиотеку Si5351Arduino-master версии 2.0.1 из папки: C:\Program Files\Arduino\libraries\Si5351Arduino-master
Используем библиотеку Wire версии 1.0 из папки: C:\Program Files\Arduino\hardware\arduino\avr\libraries\Wire
Используем библиотеку LCD5110_Basic в папке: C:\Users\Алексей\Documents\Arduino\libraries\LCD5110_Basic (legacy)
Используем библиотеку EEPROM версии 2.0 из папки: C:\Program Files\Arduino\hardware\arduino\avr\libraries\EEPROM
exit status 1
no matching function for call to 'Si5351::init(int, int)'
Rotary encoder library is rotary.h.
削除http://www.buxtronix.NET/2011/10/rotary-encoders-done-properly.html
Not in the Rotary.h. Do not use the Rotary.h?
Your
返信削除void setup(){
si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0); //initialize the Si5351
No worked si5351_VFO:136: error: no matching function for call to 'Si5351::init(int, int)'
This works
si5351.init(SI5351_CRYSTAL_LOAD_8PF,0,0); //initialize the Si5351
and second problem
// si5351.set_freq(((Vfo_Dat+IF+Rit_Dat) * SI5351_FREQ_MULT), SI5351_PLL_FIXED, SI5351_CLK0);
// si5351.set_freq(((Vfo_Dat+IF) * SI5351_FREQ_MULT), SI5351_PLL_FIXED, SI5351_CLK0);
// si5351.set_freq(( bfo* SI5351_FREQ_MULT), 0, SI5351_CLK2);
no matching function for call to 'Si5351::set_freq(long long unsigned int, int, si5351_clock)'
if you use it google translate, change the capital letters with little one
削除Unsigned = unsigned
Hi.
削除Using, Web site sketch.
https://sites.google.com/site/ja2gqp/
Hi Akio,
返信削除Very useful project !
can I use your ino file, but I need to see on display the frequency divide by 4, from the clock output; where or how can I adjust that?
Thank you in advance !
Hi.
削除It is a method to make the frequency display 1/4.
Fix have the Fnc_Lcd() and Fnc_Chsw().
Fnc_Dsp(Vfo_Dat) from Fnc_Dsp(Vfo_Dat/4).
Thank you !
返信削除Hi, Akio. Can remake your sketch for ad9835 instead of si5351? And please put here. Memory ranges do better consistently entry through 5 seconds. Yours faithfully Alexander.
返信削除Hi, Akio. Can remake your sketch for ad9834 instead of si5351? And please put here. Memory ranges do better consistently entry through 5 seconds. Yours faithfully Alexander.
返信削除Crystal oscillator 75 megahertz for ad9834, ad9835-typo! And make adjustments to the intermediate frequency into memory.
返信削除このコメントは投稿者によって削除されました。
返信削除OM様
返信削除はじめまして。
OM様
いつも楽しくブログを拝見させていただいております。
早速、VFOを組み立てようとしたところ、rotary.hのライブラリの不都合により、コンパイルできません。
スケッチ内に指示してあるURLをクリックして、HPにいきましたが、ダウンロードできず、困っています。
お手数おかけいたしますが、ライブラリをダウンロードできる、URLを教えていただけないでしょうか。
どうぞ宜しくお願いします。
rotary.hは、https://sites.google.com/site/ja2gqp/からダウンロードすることが出来ます。
削除Arduino AD9850 DDSフォルダのRotaryLib.zipをダウンロードしてください。
OM様
返信削除早々のご返信ありがとうございました。
ご指定のライブラリの使用及び、スケッチの修正にて無事に動作いたしました。ありがとうございました。これからもすばらしい作品を製作されてください。楽しみにしています。
Dear Akio,
返信削除I use this sketch for my 3-band CW QRP RIG.
It works fine. Thank you, Akio.
Only problem is with RIT.
When RIT is ON and I'm keying Tx low, the frequency is not set fast enough to Tx frequency.
There is about 100 milisecond delay and this sound like a chirp.
Did you test this with morse keyer?
Have you any idea to solve this problem?
GL es 73 from Alex - S53OM
Hi Alex.
削除Because it is made of 2 channels with si5351a, the problem pointed out occurs when the transmission frequency and reception frequency are different. However, it should not be a problem if sending / receiving switching cycle like ssb is long. To solve the problem, I think that it is necessary to output 3 channels and output the transmission and reception to other terminals. Just I do not plan to fix sketches.
Hi Akio Mizuno. I am looking for a vfo like on this vídeo:
返信削除https://www.youtube.com/watch?v=XlEouO-2E3s&t=57s
This guy is here in Brazil and his fvo in not his Project. He has gotten this vfo program from someone which he refuses to tell-me. Anyway could you help me where can I find this vfo with these features as seen on this vídeo? thanks
Hi emercito.
削除I think VFO of video is done well. My VFO emphasizes basic functions. I am hoping that many people will make their own VFOs because they are exposing sketches.
how to receive a reverse strip of USB on 14 MHz? It is necessary at the exit the frequency of 5132 kHz instead of 22868 with an intermediate frequency of 8868 kHz?
返信削除how to receive a reverse strip of USB on 14 MHz? It is necessary at the exit the frequency of 5132 kHz instead of 22868 kHz with an intermediate frequency of 8868 kHz?
返信削除as an example, insert into the sketch and edit. Thanks
返信削除#ifdef IF_Offset
si5351.set_freq((vfo * SI5351_FREQ_MULT) + bfo, SI5351_CLK0);
// Вы также можете вычесть BFO, чтобы удовлетворить ваши потребности
//si5351.set_freq((vfo * SI5351_FREQ_MULT) - bfo , SI5351_PLL_FIXED, SI5351_CLK0);
if (vfo >= 10000000ULL & tbfo != "USB")
{
bfo = USB;
tbfo = "USB";
si5351.set_freq( bfo, SI5351_CLK2);
Serial.println("We'v e switched from LSB to USB");
}
else if (vfo < 10000000ULL & tbfo != "LSB")
{
bfo = LSB;
tbfo = "LSB";
si5351.set_freq( bfo, SI5351_CLK2);
Serial.println("We'v e switched from USB to LSB");
}
#endif
In the case of SSB, you just set the carrier point for USB or LSB. I do not know how you want to remodel, but the frequency relationship just sets the appropriate value for my circuit. Although it is thing with lower heterodyne, since it is generally disadvantageous to spurious, it is better to use upper heterodyne. My VFO is designed with upper heterodyne.
削除Thank you for your work. Do you think that it is possible to adapt your sketch, with an Oled SPI, that would be interesting.
返信削除Thank you
Sorry for the mistake.
Hi Guy.
削除Sketch remodeling is easy. I do not customize. I'm sorry.
no problems thank's
削除All the best
OK. I commented because there are many people who want to customize.
返信削除yes! Amazing.
返信削除73,s
Hello Buddy Akio Mizuno!
返信削除I've been trying to compile this sketch for a week now. I am using Arduino IDE 1.8.19. I downloaded the required libraries line - 20, 21, 22. In your sketch. Unfortunately, despite repeated attempts and hours, it failed to compile.
The bugs list is too long for me to post here. Many of your projects have a "src" folder with all the required libraries in it… it's a pity they aren't in this project. Dear friend, could I ask you for a working sketch + required libraries. The bugs that the IDE showed ... there is probably a problem with the sketch as well. I made a PCB according to the attached drawing, I am waiting for the Nokia5110 display I ordered, but I cannot cope with the compilation.
Kind regards
Maciek sp9wfh
sp9wfh OM
返信削除The LCD5110_Basic library is designed to support various CPUs. Therefore, it is not suitable for saving to the src folder. Please register in the library and use it.
Moved rotaly.h and si5351.h to the src folder. si5351VFO.zip has been updated. Please use this.
sp9wfh OM
返信削除I modified it to work in the src folder.
Hello again Akio Mizuno!
返信削除You are Great!
Thank you very much for helping me get this project started.
Now it compiles on my Arduino IDE. We were also able to upload to Nano V3.
To check everything thoroughly, I need to connect the Nokia5110 display.
So I am waiting for a shipment from the store for this ordered display.
Kind regards
Maciek sp9wfh
Please be so kind as to advise where to change the VFO-IF for 20 metres in your 10 band VFO, with Nokia5110 display.
返信削除In spite of wolohow4's explanation of his sketch, which I cannot get to work.
For the radio I am using, I need VFO-IF frequency.
I understand your explanation as well.
I look forward to your modified sketch, please.
ZS6RZ
Rewrite lines 107 through 111.
返信削除//---------- Memory Assign --------------------------------
volatile long LSB = 10701500L; // 10.7015MHz
volatile long USB = 10698500L; // 10.6985MHz
volatile long CW = 10700600L; // 10.7006MHz
volatile long bfo = 10701500L; // start in LSB
volatile long IF = 10700000L; // 10.7000MHz
The sample has an IF frequency of 10.7MHz.
The LSB frequency is IF+1500, so it is 10701500L.
The USB frequency is IF-1500, so it is 10698500L.
The CW frequency is IF+600, so it is 10700600L. Just adjust it according to your tone frequency preference, but generally IF +700 is preferred.
Therefore, the CW frequency is IF+700, which is 10700700L.
The bfo frequency sets the LSB frequency as the initial value. bfo 10701500L.
IF frequency specifies the center frequency of the filter. The sample is 10.7MHz, so the IF is 10700000L.
Many thanks for your kind help!
返信削除Maybe I did not explain correctly.
返信削除VFO output for 14.00mHz LSB = 3.3015mHz
VFO output for 7.00mHz LSB = 17.7015mHz
VFO output for 3.50mHz LSB = 14.2015mHz
Thamk you I look forward to your response.
Your question is completely different from the original.
返信削除You're trying to get me to sketch and modify your custom specs.
I answered in an easy-to-understand manner, but I will not answer any further questions.
Sorry to have bothered you, with another question, my apologies.
返信削除Good day to U, Have made your VFO LCD5110 - only 3 bands, works very well, have set the DEF_FRQ = 7100000L, but it always defaults to 3556000 ............Cannot find problem, HELP PLEASE! ZS6RZ
返信削除si5351VFO.zip The sketch dated 7/26/2023 reflects DEF when EEPROM is initialized. EEPROM initialization modifies the following lines:
返信削除const byte Int_End = 73; // Initial end code
Any other value for 73 initializes the EEPROM.
Also, EEPROM writing is manual writing by RIT SW operation.