Components and supplies
Toggle Switch, Toggle
Arduino Nano R3
Breadboard (generic)
Capacitor 10 nF
SSD1306 128X64 OLED DISPLAY
SI5351 CLOCK GEN MODULE
Capacitor 100 nF
Capacitor 10 µF
RCA JACK FOR RF OUTPUT CONECTION
Rotary Encoder with Push-Button
Apps and platforms
Arduino IDE
Project description
Code
Sketch SI5351_VFO_RF_GEN_OLED_JCR
c_cpp
VFO work. Load it to the Arduino using the IDE.
Sketch SI5351_VFO_RF_GEN_OLED_JCR
c_cpp
VFO work. Load it to the Arduino using the IDE.
Downloadable files
Wiring diagram (schematics)
To interconnect the parts.
Wiring diagram (schematics)
Comments
Only logged in users can leave comments
Anonymous user
2 years ago
Hola me gustaría armarlo. Tengo todo pero tengo una pantalla 1602a me ayudarían a conectarla? Gracias!!!
CesarSound
2 years ago
Hello lu1dte I am working in a 16x02 LCD project, I will probably post it when be possible. Thank you!
Anonymous user
2 years ago
Hi, nice project. Maybe you can recommand simple radio transmitter for 27Mhz want try OOK modulation. Thanks.
CesarSound
2 years ago
Maybe this is what you want? https://www.axtudo.com/circuito-transmissor-de-27-mhz-alcance-de-10-km/
Anonymous user
2 years ago
Hi , Great project. I'm trying to modify it because some of the functions I don't need, but when I add things like "Serial.begin(9600);" or Serial.println("var1");Serial.println(var1); to aid debugging, the oled displays stays blank, even though I don't get any compiler errors. Any Ideas please ?
Anonymous user
2 years ago
Hi , Can anyone shed any light on the compiler message I'm getting " 'Rotary does not name a type ". I've loaded the Rotary.h library ,si5351.h,Adafruit_GFX.h, Adafruit_SSD1306.h. I noticed an earlier post where some one had this error and tried the suggestions , but can't get past this error.
Anonymous user
2 years ago
Many Thanks for this project, the code salved me a lots of time, to start one of my "end less" project. But, I faced a issue when I try to add a CAT (Computer Aided Transceiver) to control si5351 from the computer. Using this library (https://github.com/pavelmc/FT857d) to emulate a Yaesu FT-857D radio. After a crude copy and past from ft857d example code, some adjustments, checking, and compiling without error. Upload to Arduino nano, reset, and nothings happens, no start screen, no clock, no cat response. This si5351 code and ft857d code works separated. I rechecked the code, move code block up and down, and eventually I get the start up screen but the rest of program not running. I take hours revising, testing without and progress. Finally I get a clue, it is a ram issue, not coding it self. But, how many ram I have? From compiler message: The original code: Global variables use 655 bytes (31%) of dynamic memory, leaving 1393 bytes for local variables. With ft857d: Global variables use 856 bytes (41%) of dynamic memory, leaving 1192 bytes for local variables. 10% increase on ram usage. But still have 59% remain of ram, isn't it enough to run? Let's free some RAM... Global variables use 754 bytes (36%) of dynamic memory, leaving 1294 bytes for local variables. Optimized code compiled and upload, and works. :) I moved all string to Flash (the F() macro), and used only ft857d commands that I need. Now, I need to learn how si5351 phase shift works... Tnx.
k7ilo
2 years ago
Hi pksato. I saw your video on using this VFO with the CAT functions. Is there anyway you could share your code so that I can see if I can intergrate the CAT with the VFO build I have currently and if not use this one? Thanks Harold K7ILO
Anonymous user
2 years ago
I upload the Sketch to github https://github.com/pksato/Arduino-Misc/blob/bc3c9395084c22429ba132320863dd022ed153e2/dds_si5351_vfo_jcs_hamlib.ino
CesarSound
2 years ago
Hi pksato, thanks for reporting your experience, good to know it worked!
Anonymous user
2 years ago
When I compile, it has error, can anyone tell me how to solve it? I have installed all the library. the message as below: Arduino: 1.8.19 (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)" D:\\Downloads\\si5351 VFO\\VFO\\VFO.ino: In function 'void __vector_5()': VFO:36:19: error: 'class Rotary' has no member named 'process' char result = r.process(); ^~~~~~~ VFO:37:17: error: 'DIR_CW' was not declared in this scope if (result == DIR_CW) set_frequency(1); ^~~~~~ D:\\Downloads\\si5351 VFO\\VFO\\VFO.ino:37:17: note: suggested alternative: 'DDRC' if (result == DIR_CW) set_frequency(1); ^~~~~~ DDRC VFO:38:22: error: 'DIR_CCW' was not declared in this scope else if (result == DIR_CCW) set_frequency(-1); ^~~~~~~ exit status 1 'class Rotary' has no member named 'process' This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.
Anonymous user
2 years ago
Hola Cesar, el circuito funciona muy bien. Podrías compartir la parte de RF del circuito para poder hacerlo ? El del AN7223, filtro LTM455, etc. Muchas gracias Alberto LU1EG
CesarSound
2 years ago
Hola lu1eg, o esquema elétrico del AN7223, filtro LTM455, eu usei o mesmo que está no datasheet do IC AN7223, com exceção que usei o filtro LTM455 no lugar dos filtros cerâmicos amarelos, para uma melhor filtragem da IF. Além disto não montei o circuito oscilador local do AN7223 e injeto no pino do oscilador o sinal gerado pelo DDS. Não consegui localizar os esquema dessa placa, fiz ela em 2006 e perdi muita coisa. Link do datasheet: https://pdf1.alldatasheet.com/datasheet-pdf/view/13457/PANASONIC/AN7223.html
Anonymous user
2 years ago
My trusty old HP signal generator (probably cost many £1000s when new) broke the other day and I've been looking for a simple construction project to replace it. This is just what I need, FANTASTIC Cesar, thank you so much for your work. Paul, G0odp
CesarSound
2 years ago
Hello G0odp, glad to know that it was useful for you!
Anonymous user
2 years ago
Hi, I have a few questions and maybe some issues: I have a radio with a 7.8 if and a 19.165 vco so I need the first line 26.965. I need the display to read the vfo+if cant seem to get that working. Anyone how to fix that or what im doing wrong?
CesarSound
2 years ago
Hello radiotech11 if your IF is 7.8MHz you should put this value on sketch: 7800
Anonymous user
2 years ago
ISR(PCINT2_vect) { char result = r.process(); if (result == DIR_CW) set_frequency(1); else if (result == DIR_CCW) set_frequency(-1); } error: class rotary no member named process. why?
Anonymous user
2 years ago
Hello, your project is very good, I tested it on a receiver and it works excellent. I had to modify the display as it had a 128X128 TFT and it worked fantastic.
Anonymous user
2 years ago
Hi. This is my first Arduino project and must admit it works really well. I am ashamed to say though that I am and old stick in the mud where digital tech is involved having been brought up on mostly analogue stuff. I have a question about this project regarding the oled display which will only work when using a display with SCL and SDA lines. I would like to use a slightly larger display that has SCK and SDA lines which displays garbage when connected. Is there a library I need to add or lines to change in the sketch?
CesarSound
2 years ago
Hello Mike, thanks for the comments. As far as I know the OLED display I used here (Oled 128x64 Ssd1306 0.96") is the only one avaiable. It is possible to use larger displays, such as the 2.8" ILI9341, but the arduino code needs to be re-writen and a proper libriary should be used to drive it.
Anonymous user
2 years ago
Ha funzionato subito, ottimo.
CesarSound
2 years ago
Thanks for the comments!
Anonymous user
2 years ago
Hi, I am interested in whether it is possible in some way to generate a signal at the output which is 4x from the one shown on the display. I need it to be able to use it as an oscillator for I / Q SDR Receiver. Another button would be used instead.
CesarSound
2 years ago
Hi Mirko, thanks for the comments. In the function on line 100 - void tunegen(), multiply by 4, as below: si5351.set_freq_manual(4 * (freq + (interfreq * 1000ULL)) * 100ULL, pll_freq, SI5351_CLK0); in this case also the tuning steps will be 4x, so when you tune 1kHz on display actually you will change 4kHz on generated frequency. Also, this sketch will works with max freq of 120MHz, so in the display the max will be 30MHz. Beside this, to generate I/Q (quadrature) signals it would be necessary to use two clock outputs (CLK0 & CLK1) with a 90 degree lag between them, this would be out of the scope of this project at the moment.
Anonymous user
2 years ago
Thanks a lot for detailed information
Anonymous user
2 years ago
Greetings Cesar, can I write to you in Spanish?
CesarSound
2 years ago
Hi thank you. Yes.
Anonymous user
2 years ago
Hello Mr Cesar, I wish you the bests for your kind efforts. I have some questions; 1- How we can generate less than 10kHz in this device? 2- Why you add that capacitor and Inductor iv Ver.2?(If that is for reducing input shock, an individual inductor wasn't enough?) 3-In this ver., is the screen updated only when a change occurred? ( how we can order to screen to update in certain intervals without caring about changes? 4- What is "pll_freq = 90000000000ULL;" for? 5-at last, how we tune the clock's output current to don't have a negative charge? (except using a diode filter) Best regards
CesarSound
2 years ago
Hi alibagherii, thanks for the comments. 1-The minimum frequency generated by the SI5351 is 8kHz. 2-It was added to filter RF in case this VFO is used with radio transmitters. It can be ommited in some circunstances. 3-Yes, the screen is updated only when there is activity (press bt or rotary the encoder), this is necessary to reduce the RF noise generated by the Ardunio and display, as this noise will interfere in radio receptions. 4-It is the freq of PLL, for more details you should read the informarions on Github Etherkit SI5351 Library. 5-I am not sure about your doubt. But the current output can be set here: si5351.drive_strength(SI5351_CLK0, SI5351_DRIVE_2MA); //Output current 2MA, 4MA, 6MA or 8MA
CesarSound
2 years ago
Hello, here we are: 1-Replace the function on line 42 to 50 by this one: void set_frequency(short dir) { if (encoder == 1) { //Up/Down frequency if (dir == 1) freq = freq + fstep; if (freq >= 10000) freq = 10000; if (dir == -1) freq = freq - fstep; if (fstep == 1000000 && freq <= 1000000) freq = 1000000; else if (freq < 4000) freq = 4000; } } 2-That is correct. 3-Sorry, this will change too much the code. 4-ok 5-Just bypass the capacitor C1. 6-To understand it you should learn about how the PLL works. The Etherkit Library Github has some theory there, but Youtube has a lot of classes about this issue. 7-Following some instructions that I got from Etherkit Library Github. 8-C2 C19 is to decouple noise genrated by the display. C3 C4 is to avoid erratic steps from the rotary encoder, that could skip numbers when turning the encoder. 9-R1 is the load for the Si5351 work properly and C1 is the coupling capacitor, in order to get a simetric voltage swing (+ / -) in regard to the zero axis. C1 blocks the DC voltage.
Anonymous user
2 years ago
THANK YOU VERY MUCH; 1-What change is needed to generate between 8-10kHz. Sorry, What is your suggestion for a module that generates less than 8 kHz (TL494, 555 Timer or ...?) 2-You filter input power from noise, so they don't affect the output. Is it true? 3-Great, but in other cases, how can we put the screen into a specific refresh rate without any attention to changes? 4-thanks 5-Sorry, *Declaration; My oscilloscope showing positive and negative charge in output; what can I do to have just a positive charge? 6-When on the crystal wrote 25Mhz, exactly what happens to we can have 120Mhz?!! (can you introduce me to some source?) 7-How you increase the output capability from 120MHz to 225MHz in version 2? 8-What is the c2-c19 & c3-c4 parts responsible for on the circuit? 9- c1-r1 is a low-pass filter? (if yes, why you do this?) I'm really grateful for your guides
Anonymous user
2 years ago
I have old Tube CB radio that all of the Crystals are dead. I am thinking of this and Arduino to bring it back to life. I want to tx and rx and maybe even do SSB any ideas
CesarSound
2 years ago
Hello Carl, thanks for your interest. The first step would be to obtain the electrical schematic of this CB, to study where in the circuit the DDS signal could be injected, to find out the value of the intermediate frequency (IF) and to place this IF value in the sketch. Good luck.
Anonymous user
2 years ago
I did mine works great, let me know if you need help
Anonymous user
2 years ago
I made it, changing scope to 8kz-160Mhz because of my Si5351 module: https://ae01.alicdn.com/kf/H719e5f5b26ba4e709fc717588cd09d8bX.jpg is there a posibility to add an extra push button to select and change the 3 output channels to difference frecuencies (and to on/off any of them)?
CesarSound
2 years ago
Hello karson, thanks for the tests and comments. It is possible to do your ideas, but it could be applied to a new future project.
Anonymous user
2 years ago
Another issue was that the code fails if you use an arduino micro instead an arduino nano.
CesarSound
2 years ago
I choose the Nano because it is the most popular (easy to find and cheaper over here). But the scketch can be modified to work with any MCU. Thanks!
Anonymous user
2 years ago
Hello CesarSound! Great project. Its running! Only a answer: I have an IF of 11059200Mhz When receiving 7.0mhz the vfo generate 4.0592Mhz and the display must show 7.0Mhz. When receiving 7.3mhz the vfo generate 3.7592Mhz and the display must show 7.3mhz. How I can do this? I try to set IF +/- 11059200Mhz but the output was 225Mhz..... Help me please. Thanks.
CesarSound
2 years ago
Hi iw3sgg, could you please double check the IF value? The value of 11059200Mhz is too high for this project. Thank you!
Anonymous user
2 years ago
Hello! Ops! Sorry but the IF was 11 Mhz and 059200Khz...... 11,059200. I modify the the program and now run! The oled display is too little! I try to replace with SSD1309 2.7 inch but is too difficult, i'm not a programmer. Thanks!
Anonymous user
2 years ago
I just wounder why this scetch is limited to 120MHz, though I better should say its limited to 114MHz as above this frequency my SDR gives me insteed a clean narrow line, a wide disorted band. The same with my DSO and frequency-counter. Both freaking out when going above that frequency. Not the case when i connect the same SI5351 Module to this one: https://www.youtube.com/watch?v=1QGbhDVEVmA With this I have not this problem. Te actual SI5351 Modules can handle even more than the 225MHz in this video. Some got them up to 292MHz.
CesarSound
2 years ago
Hi, thanks for testing. This VFO project is originally aimed for use in the HF range, where the frequency not passes 60MHz.
CesarSound
2 years ago
Just out of curiosity I tested your project that you posted in your above message (the link of a video of a generator with 16x2 LCD + Si5351). Excuse me, but this project is very bad. It is true that it goes up to 225MHz, but it is practically impossible to be used as a generator, the interface was very poorly designed, I was unable to adjust a value of a certain frequency by the rotary encoder because when it is turned it messes up the entire frequency reading. I wonder how anyone can use it to tune into an SDR : /
Anonymous user
2 years ago
Just to clear things up. Never said it´s my project. Only said i rebuild yours and this one, where yours is limited not even to 120MHz but in real to 114Mhz whereas the other one is not limited. So was aking why this is so and why yours gives a noisy band in a SDR above 114MHz whereas the other project from an other guy gives a clear line up to 225MHz. This means not tuning a SDR with it, but using a SDR to display the signal quality. You didn´t answer this but only said it was anyway designed to work just up to 60MHz. So ok, if you buy a Ferrari an just want to drive it with a stroked handbrake around the block rather than giving an proper answer to the question, I accept this. However the not so good working rotary funktion of the other project was not the point of my question. Oh forgot to mention. Already fixed this by changing some variables and removing some unnecessary lines.
Anonymous user
2 years ago
Hi. I'm trying to generate the second clock output (clk2 pinout RF Si5351a) and generate 4(four) preset frequencies, like this: on an analog input (A7) of the Arduino nano board I put a voltage divider... when it is approximately 1Volts in A7 frequency is clk2=14MHz, and when it is approximately 2 Volts in A7 frequency is clk2=28MHz, when voltage is at 3V then clk2=32MHz and at 4V is clk2=48MHZ. In other words, it is the frequency preset in clk2 selected through voltages from 1 to 4 Volts applied to A7 input. If you can help me with this code and post I will be immensely grateful. Thank you very much in advance.
Anonymous user
2 years ago
Olá!! Como faço para integrar esse circuito com o circuito de rádio do SI4735?
CesarSound
2 years ago
Olá, seria bem mais complexo, um novo hardware com mixer, filtros BPF, além de um código de arduino especifico para o caso.
G8INL
2 years ago
I have built this project and it works great, I have extended the range up to 220Mhz, is it possible to increase the number of available steps from 6 to 8? I have not been able to work out where the limit of 6 is being set, I just need 2 more options to use this as a VHF local oscillator for a 2 Metres receiver. I am a newcomer to arduino software but enjoy modifying existing code. Many thanks.
G8INL
2 years ago
Hi, Many thanks for this update, I have now added 3 extra frequency steps to the code, I now understand how these work. Great piece of software, just what I needed. Sent from my iPad Pro
CesarSound
2 years ago
Hello, thank you. It is possible to add 2 more steps, please see below the part o code you need to add in order to get it. I put 2 additional steps of 1.5MHz and 2MHz, but you can change it to your needs: //Line 126 void setstep() { switch (stp) { case 1: stp = 2; fstep = 1; break; case 2: stp = 3; fstep = 10; break; case 3: stp = 4; fstep = 1000; break; case 4: stp = 5; fstep = 5000; break; case 5: stp = 6; fstep = 10000; break; case 6: stp = 7; fstep = 1000000; break; case 7: stp = 8; fstep = 1500000; //<=== NEW STEP break; case 8: stp = 1; fstep = 2000000; //<=== NEW STEP break; } } //Line 163 if (stp == 2) display.print("1Hz"); if (stp == 3) display.print("10Hz"); if (stp == 4) display.print("1k"); if (stp == 5) display.print("5k"); if (stp == 6) display.print("10k"); if (stp == 7) display.print("1M"); if (stp == 8) display.print("1.5M"); if (stp == 1) display.print("2M"); //<=== NEW STEP
Anonymous user
2 years ago
Buenos días César. He borrado mí comentario anterior para plantear la pregunta de manera diferente. Necesaria que una vez ingresado el valor de "IF", este suba de valor cuando en el display baje la frecuencia y viceversa. Esto se puede hacer? Saludos!
CesarSound
2 years ago
Hello, lu8diw_roberto, replied via Youtube. Thank you!
Anonymous user
2 years ago
I put the hardware together, loaded the sketch and when I try to complile it stops on the Rotary r + RotaryEncoder(2, 3); statement and says Rotary r does not name a type. What gives?
Anonymous user
2 years ago
I do have the rotary.h and rotary.cpp files installed how I did it I couldn't tell you. I have no Idea how to install one with Caps. I can't find the rotary library on the web. Bithub has it but good luck finding out how to download it. One site that says it's free wants $20 for 10 points the file takes 1 point. I have practically given up. Thanks anyway, Chuck WA8WWL.
CesarSound
2 years ago
Please try to edit the sketch: where is writen Rotay (starting w/ upper case) change to rotary (starting w/lower case). And try to compile again.
CesarSound
2 years ago
Do you have the Rotary.h library installed? Also vertify if in the library the file name is Rotary.h / Rotary.cpp and not rotary.h (starting with letter lowercase).
Anonymous user
2 years ago
Hi, I'm having the same problem. I've looked at the suggested fixes, but won't solve the problem. Could it be a library version problem?
Anonymous user
2 years ago
Hola julio cesar con que nivel de señal se entra en el Ne 602 ?? lleva atenuación la salida del SI5351 ? o lo conecto directo ??
13rodrigotl
2 years ago
Hi Cesar, this project is so good!, congratulations. Please could you make a version using a LCD 16x02 instead of an oled. Thanks!
Anonymous user
2 years ago
When I compile, it has error, can anyone tell me how to solve it? I have installed all the library. the message as below: Arduino: 1.8.19 (Windows 10), Board: "Arduino Nano, ATmega328P (Old Bootloader)" D:\\Downloads\\si5351 VFO\\VFO\\VFO.ino: In function 'void __vector_5()': VFO:36:19: error: 'class Rotary' has no member named 'process' char result = r.process(); ^~~~~~~ VFO:37:17: error: 'DIR_CW' was not declared in this scope if (result == DIR_CW) set_frequency(1); ^~~~~~ D:\\Downloads\\si5351 VFO\\VFO\\VFO.ino:37:17: note: suggested alternative: 'DDRC' if (result == DIR_CW) set_frequency(1); ^~~~~~ DDRC VFO:38:22: error: 'DIR_CCW' was not declared in this scope else if (result == DIR_CCW) set_frequency(-1); ^~~~~~~ exit status 1 'class Rotary' has no member named 'process' This report would have more information with "Show verbose output during compilation" option enabled in File -> Preferences.
Anonymous user
3 years ago
ISR(PCINT2_vect) { char result = r.process(); if (result == DIR_CW) set_frequency(1); else if (result == DIR_CCW) set_frequency(-1); } error: class rotary no member named process. why?
13rodrigotl
3 years ago
Hi Cesar, this project is so good!, congratulations. Please could you make a version using a LCD 16x02 instead of an oled. Thanks!
Anonymous user
3 years ago
Hola julio cesar con que nivel de señal se entra en el Ne 602 ?? lleva atenuación la salida del SI5351 ? o lo conecto directo ??
Anonymous user
3 years ago
Hi , Great project. I'm trying to modify it because some of the functions I don't need, but when I add things like "Serial.begin(9600);" or Serial.println("var1");Serial.println(var1); to aid debugging, the oled displays stays blank, even though I don't get any compiler errors. Any Ideas please ?
mauriciounb
3 years ago
Hi. I'm trying to generate the second clock output (clk2 pinout RF Si5351a) and generate 4(four) preset frequencies, like this: on an analog input (A7) of the Arduino nano board I put a voltage divider... when it is approximately 1Volts in A7 frequency is clk2=14MHz, and when it is approximately 2 Volts in A7 frequency is clk2=28MHz, when voltage is at 3V then clk2=32MHz and at 4V is clk2=48MHZ. In other words, it is the frequency preset in clk2 selected through voltages from 1 to 4 Volts applied to A7 input. If you can help me with this code and post I will be immensely grateful. Thank you very much in advance.
Anonymous user
3 years ago
Hello CesarSound! Great project. Its running! Only a answer: I have an IF of 11059200Mhz When receiving 7.0mhz the vfo generate 4.0592Mhz and the display must show 7.0Mhz. When receiving 7.3mhz the vfo generate 3.7592Mhz and the display must show 7.3mhz. How I can do this? I try to set IF +/- 11059200Mhz but the output was 225Mhz..... Help me please. Thanks.
Anonymous user
2 years ago
Hello! Ops! Sorry but the IF was 11 Mhz and 059200Khz...... 11,059200. I modify the the program and now run! The oled display is too little! I try to replace with SSD1309 2.7 inch but is too difficult, i'm not a programmer. Thanks!
CesarSound
2 years ago
Hi iw3sgg, could you please double check the IF value? The value of 11059200Mhz is too high for this project. Thank you!
lu8diw_roberto
3 years ago
Buenos días César. He borrado mí comentario anterior para plantear la pregunta de manera diferente. Necesaria que una vez ingresado el valor de "IF", este suba de valor cuando en el display baje la frecuencia y viceversa. Esto se puede hacer? Saludos!
CesarSound
2 years ago
Hello, lu8diw_roberto, replied via Youtube. Thank you!
Anonymous user
3 years ago
Hola me gustaría armarlo. Tengo todo pero tengo una pantalla 1602a me ayudarían a conectarla? Gracias!!!
CesarSound
2 years ago
Hello lu1dte I am working in a 16x02 LCD project, I will probably post it when be possible. Thank you!
Anonymous user
3 years ago
Hi , Can anyone shed any light on the compiler message I'm getting " 'Rotary does not name a type ". I've loaded the Rotary.h library ,si5351.h,Adafruit_GFX.h, Adafruit_SSD1306.h. I noticed an earlier post where some one had this error and tried the suggestions , but can't get past this error.
Anonymous user
3 years ago
Hola Cesar, el circuito funciona muy bien. Podrías compartir la parte de RF del circuito para poder hacerlo ? El del AN7223, filtro LTM455, etc. Muchas gracias Alberto LU1EG
CesarSound
2 years ago
Hola lu1eg, o esquema elétrico del AN7223, filtro LTM455, eu usei o mesmo que está no datasheet do IC AN7223, com exceção que usei o filtro LTM455 no lugar dos filtros cerâmicos amarelos, para uma melhor filtragem da IF. Além disto não montei o circuito oscilador local do AN7223 e injeto no pino do oscilador o sinal gerado pelo DDS. Não consegui localizar os esquema dessa placa, fiz ela em 2006 e perdi muita coisa. Link do datasheet: https://pdf1.alldatasheet.com/datasheet-pdf/view/13457/PANASONIC/AN7223.html
Anonymous user
3 years ago
Hi, I have a few questions and maybe some issues: I have a radio with a 7.8 if and a 19.165 vco so I need the first line 26.965. I need the display to read the vfo+if cant seem to get that working. Anyone how to fix that or what im doing wrong?
CesarSound
2 years ago
Hello radiotech11 if your IF is 7.8MHz you should put this value on sketch: 7800
mikehad
4 years ago
Hi. This is my first Arduino project and must admit it works really well. I am ashamed to say though that I am and old stick in the mud where digital tech is involved having been brought up on mostly analogue stuff. I have a question about this project regarding the oled display which will only work when using a display with SCL and SDA lines. I would like to use a slightly larger display that has SCK and SDA lines which displays garbage when connected. Is there a library I need to add or lines to change in the sketch?
CesarSound
2 years ago
Hello Mike, thanks for the comments. As far as I know the OLED display I used here (Oled 128x64 Ssd1306 0.96") is the only one avaiable. It is possible to use larger displays, such as the 2.8" ILI9341, but the arduino code needs to be re-writen and a proper libriary should be used to drive it.
Anonymous user
4 years ago
Hi, nice project. Maybe you can recommand simple radio transmitter for 27Mhz want try OOK modulation. Thanks.
CesarSound
2 years ago
Maybe this is what you want? https://www.axtudo.com/circuito-transmissor-de-27-mhz-alcance-de-10-km/
alibagherii
4 years ago
Hello Mr Cesar, I wish you the bests for your kind efforts. I have some questions; 1- How we can generate less than 10kHz in this device? 2- Why you add that capacitor and Inductor iv Ver.2?(If that is for reducing input shock, an individual inductor wasn't enough?) 3-In this ver., is the screen updated only when a change occurred? ( how we can order to screen to update in certain intervals without caring about changes? 4- What is "pll_freq = 90000000000ULL;" for? 5-at last, how we tune the clock's output current to don't have a negative charge? (except using a diode filter) Best regards
alibagherii
2 years ago
THANK YOU VERY MUCH; 1-What change is needed to generate between 8-10kHz. Sorry, What is your suggestion for a module that generates less than 8 kHz (TL494, 555 Timer or ...?) 2-You filter input power from noise, so they don't affect the output. Is it true? 3-Great, but in other cases, how can we put the screen into a specific refresh rate without any attention to changes? 4-thanks 5-Sorry, *Declaration; My oscilloscope showing positive and negative charge in output; what can I do to have just a positive charge? 6-When on the crystal wrote 25Mhz, exactly what happens to we can have 120Mhz?!! (can you introduce me to some source?) 7-How you increase the output capability from 120MHz to 225MHz in version 2? 8-What is the c2-c19 & c3-c4 parts responsible for on the circuit? 9- c1-r1 is a low-pass filter? (if yes, why you do this?) I'm really grateful for your guides
CesarSound
2 years ago
Hi alibagherii, thanks for the comments. 1-The minimum frequency generated by the SI5351 is 8kHz. 2-It was added to filter RF in case this VFO is used with radio transmitters. It can be ommited in some circunstances. 3-Yes, the screen is updated only when there is activity (press bt or rotary the encoder), this is necessary to reduce the RF noise generated by the Ardunio and display, as this noise will interfere in radio receptions. 4-It is the freq of PLL, for more details you should read the informarions on Github Etherkit SI5351 Library. 5-I am not sure about your doubt. But the current output can be set here: si5351.drive_strength(SI5351_CLK0, SI5351_DRIVE_2MA); //Output current 2MA, 4MA, 6MA or 8MA
CesarSound
2 years ago
Hello, here we are: 1-Replace the function on line 42 to 50 by this one: void set_frequency(short dir) { if (encoder == 1) { //Up/Down frequency if (dir == 1) freq = freq + fstep; if (freq >= 10000) freq = 10000; if (dir == -1) freq = freq - fstep; if (fstep == 1000000 && freq <= 1000000) freq = 1000000; else if (freq < 4000) freq = 4000; } } 2-That is correct. 3-Sorry, this will change too much the code. 4-ok 5-Just bypass the capacitor C1. 6-To understand it you should learn about how the PLL works. The Etherkit Library Github has some theory there, but Youtube has a lot of classes about this issue. 7-Following some instructions that I got from Etherkit Library Github. 8-C2 C19 is to decouple noise genrated by the display. C3 C4 is to avoid erratic steps from the rotary encoder, that could skip numbers when turning the encoder. 9-R1 is the load for the Si5351 work properly and C1 is the coupling capacitor, in order to get a simetric voltage swing (+ / -) in regard to the zero axis. C1 blocks the DC voltage.
nunestech
4 years ago
Olá!! Como faço para integrar esse circuito com o circuito de rádio do SI4735?
CesarSound
2 years ago
Olá, seria bem mais complexo, um novo hardware com mixer, filtros BPF, além de um código de arduino especifico para o caso.
Anonymous user
4 years ago
I have old Tube CB radio that all of the Crystals are dead. I am thinking of this and Arduino to bring it back to life. I want to tx and rx and maybe even do SSB any ideas
CesarSound
2 years ago
Hello Carl, thanks for your interest. The first step would be to obtain the electrical schematic of this CB, to study where in the circuit the DDS signal could be injected, to find out the value of the intermediate frequency (IF) and to place this IF value in the sketch. Good luck.
Anonymous user
2 years ago
I did mine works great, let me know if you need help
Anonymous user
4 years ago
My trusty old HP signal generator (probably cost many £1000s when new) broke the other day and I've been looking for a simple construction project to replace it. This is just what I need, FANTASTIC Cesar, thank you so much for your work. Paul, G0odp
CesarSound
2 years ago
Hello G0odp, glad to know that it was useful for you!
iw2knj
4 years ago
Ha funzionato subito, ottimo.
CesarSound
2 years ago
Thanks for the comments!
Anonymous user
4 years ago
Hello, your project is very good, I tested it on a receiver and it works excellent. I had to modify the display as it had a 128X128 TFT and it worked fantastic.
CesarSound
2 years ago
Hello UnBit, glad to know that it worked well for you, thank you!
Anonymous user
4 years ago
I just wounder why this scetch is limited to 120MHz, though I better should say its limited to 114MHz as above this frequency my SDR gives me insteed a clean narrow line, a wide disorted band. The same with my DSO and frequency-counter. Both freaking out when going above that frequency. Not the case when i connect the same SI5351 Module to this one: https://www.youtube.com/watch?v=1QGbhDVEVmA With this I have not this problem. Te actual SI5351 Modules can handle even more than the 225MHz in this video. Some got them up to 292MHz.
CesarSound
2 years ago
Just out of curiosity I tested your project that you posted in your above message (the link of a video of a generator with 16x2 LCD + Si5351). Excuse me, but this project is very bad. It is true that it goes up to 225MHz, but it is practically impossible to be used as a generator, the interface was very poorly designed, I was unable to adjust a value of a certain frequency by the rotary encoder because when it is turned it messes up the entire frequency reading. I wonder how anyone can use it to tune into an SDR : /
CesarSound
2 years ago
Hi, thanks for testing. This VFO project is originally aimed for use in the HF range, where the frequency not passes 60MHz.
Anonymous user
2 years ago
Just to clear things up. Never said it´s my project. Only said i rebuild yours and this one, where yours is limited not even to 120MHz but in real to 114Mhz whereas the other one is not limited. So was aking why this is so and why yours gives a noisy band in a SDR above 114MHz whereas the other project from an other guy gives a clear line up to 225MHz. This means not tuning a SDR with it, but using a SDR to display the signal quality. You didn´t answer this but only said it was anyway designed to work just up to 60MHz. So ok, if you buy a Ferrari an just want to drive it with a stroked handbrake around the block rather than giving an proper answer to the question, I accept this. However the not so good working rotary funktion of the other project was not the point of my question. Oh forgot to mention. Already fixed this by changing some variables and removing some unnecessary lines.
Anonymous user
4 years ago
Many Thanks for this project, the code salved me a lots of time, to start one of my "end less" project. But, I faced a issue when I try to add a CAT (Computer Aided Transceiver) to control si5351 from the computer. Using this library (https://github.com/pavelmc/FT857d) to emulate a Yaesu FT-857D radio. After a crude copy and past from ft857d example code, some adjustments, checking, and compiling without error. Upload to Arduino nano, reset, and nothings happens, no start screen, no clock, no cat response. This si5351 code and ft857d code works separated. I rechecked the code, move code block up and down, and eventually I get the start up screen but the rest of program not running. I take hours revising, testing without and progress. Finally I get a clue, it is a ram issue, not coding it self. But, how many ram I have? From compiler message: The original code: Global variables use 655 bytes (31%) of dynamic memory, leaving 1393 bytes for local variables. With ft857d: Global variables use 856 bytes (41%) of dynamic memory, leaving 1192 bytes for local variables. 10% increase on ram usage. But still have 59% remain of ram, isn't it enough to run? Let's free some RAM... Global variables use 754 bytes (36%) of dynamic memory, leaving 1294 bytes for local variables. Optimized code compiled and upload, and works. :) I moved all string to Flash (the F() macro), and used only ft857d commands that I need. Now, I need to learn how si5351 phase shift works... Tnx.
CesarSound
2 years ago
Hi pksato, thanks for reporting your experience, good to know it worked!
Anonymous user
2 years ago
I upload the Sketch to github https://github.com/pksato/Arduino-Misc/blob/bc3c9395084c22429ba132320863dd022ed153e2/dds_si5351_vfo_jcs_hamlib.ino
Anonymous user
2 years ago
Hi pksato. I saw your video on using this VFO with the CAT functions. Is there anyway you could share your code so that I can see if I can intergrate the CAT with the VFO build I have currently and if not use this one? Thanks Harold K7ILO
Anonymous user
4 years ago
I put the hardware together, loaded the sketch and when I try to complile it stops on the Rotary r + RotaryEncoder(2, 3); statement and says Rotary r does not name a type. What gives?
Anonymous user
2 years ago
I do have the rotary.h and rotary.cpp files installed how I did it I couldn't tell you. I have no Idea how to install one with Caps. I can't find the rotary library on the web. Bithub has it but good luck finding out how to download it. One site that says it's free wants $20 for 10 points the file takes 1 point. I have practically given up. Thanks anyway, Chuck WA8WWL.
Anonymous user
2 years ago
Hi, I'm having the same problem. I've looked at the suggested fixes, but won't solve the problem. Could it be a library version problem?
CesarSound
2 years ago
Please try to edit the sketch: where is writen Rotay (starting w/ upper case) change to rotary (starting w/lower case). And try to compile again.
CesarSound
2 years ago
Do you have the Rotary.h library installed? Also vertify if in the library the file name is Rotary.h / Rotary.cpp and not rotary.h (starting with letter lowercase).
G8INL
4 years ago
I have built this project and it works great, I have extended the range up to 220Mhz, is it possible to increase the number of available steps from 6 to 8? I have not been able to work out where the limit of 6 is being set, I just need 2 more options to use this as a VHF local oscillator for a 2 Metres receiver. I am a newcomer to arduino software but enjoy modifying existing code. Many thanks.
CesarSound
2 years ago
Hello, thank you. It is possible to add 2 more steps, please see below the part o code you need to add in order to get it. I put 2 additional steps of 1.5MHz and 2MHz, but you can change it to your needs: //Line 126 void setstep() { switch (stp) { case 1: stp = 2; fstep = 1; break; case 2: stp = 3; fstep = 10; break; case 3: stp = 4; fstep = 1000; break; case 4: stp = 5; fstep = 5000; break; case 5: stp = 6; fstep = 10000; break; case 6: stp = 7; fstep = 1000000; break; case 7: stp = 8; fstep = 1500000; //<=== NEW STEP break; case 8: stp = 1; fstep = 2000000; //<=== NEW STEP break; } } //Line 163 if (stp == 2) display.print("1Hz"); if (stp == 3) display.print("10Hz"); if (stp == 4) display.print("1k"); if (stp == 5) display.print("5k"); if (stp == 6) display.print("10k"); if (stp == 7) display.print("1M"); if (stp == 8) display.print("1.5M"); if (stp == 1) display.print("2M"); //<=== NEW STEP
G8INL
2 years ago
Hi, Many thanks for this update, I have now added 3 extra frequency steps to the code, I now understand how these work. Great piece of software, just what I needed. Sent from my iPad Pro
karlson
4 years ago
Another issue was that the code fails if you use an arduino micro instead an arduino nano.
CesarSound
2 years ago
I choose the Nano because it is the most popular (easy to find and cheaper over here). But the scketch can be modified to work with any MCU. Thanks!
karlson
4 years ago
I made it, changing scope to 8kz-160Mhz because of my Si5351 module: https://ae01.alicdn.com/kf/H719e5f5b26ba4e709fc717588cd09d8bX.jpg is there a posibility to add an extra push button to select and change the 3 output channels to difference frecuencies (and to on/off any of them)?
CesarSound
2 years ago
Hello karson, thanks for the tests and comments. It is possible to do your ideas, but it could be applied to a new future project.
ac4vk
4 years ago
Greetings Cesar, can I write to you in Spanish?
CesarSound
2 years ago
Hi thank you. Yes.
Anonymous user
4 years ago
Hi, I am interested in whether it is possible in some way to generate a signal at the output which is 4x from the one shown on the display. I need it to be able to use it as an oscillator for I / Q SDR Receiver. Another button would be used instead.
Anonymous user
2 years ago
Thanks a lot for detailed information
CesarSound
2 years ago
Hi Mirko, thanks for the comments. In the function on line 100 - void tunegen(), multiply by 4, as below: si5351.set_freq_manual(4 * (freq + (interfreq * 1000ULL)) * 100ULL, pll_freq, SI5351_CLK0); in this case also the tuning steps will be 4x, so when you tune 1kHz on display actually you will change 4kHz on generated frequency. Also, this sketch will works with max freq of 120MHz, so in the display the max will be 30MHz. Beside this, to generate I/Q (quadrature) signals it would be necessary to use two clock outputs (CLK0 & CLK1) with a 90 degree lag between them, this would be out of the scope of this project at the moment.
10kHz to 120MHz VFO / RF Generator with Si5351 and Arduino | Arduino Project Hub
vk4abz
a year ago
Hi, thanks for a fantastic sketch. I’m using it to modify a 27mHz SSB CB to a low power 10m radio by removing the PLL and associated circuit and injecting the output of this VFO. I have had excellent results so far. But have a question (I’m new to Arduino so please bear with me) Would it be possible to a a “Mode” type switch? IE to add 2.5kHz for USB and subtract 2.5kHz for LSB? The system works great if I set the VFO frequencies manually but it would be great to add a switch. 73s, Paddy VK4ABZ