Looking good Charlie, Thank you for the extra math explanation. I can always use that. I have received my first HF signals with my DC receiver over the last few weeks on 80, 40, and 20 meters. it feels good, I'm coming up to speed :) of course not without a couple of bugs but I'll get those ironed out. I can't thank you enough for all your help, it would have taken ages to get this far on my own.
@@CharlieMorrisZL2CTM Built the VFO and all seems going well, except that when pin 5 is grounded i get a Continuous flicker between USB/LSB and TX/RX, Do you think adding some resistance with the toggle switch might help ? I will be building this as a receiver only hence I'm only using Arduino regular power without the 13.8v source and Voltage divider Cheers n 73's
To protect the Arduino from over voltage on 13.8V line, suggest to have resistive TX divider to output 3-4V not 5V... 3-4V is well above the HIGH threshold of the digital inputs
On your sig gen you set it up for 1.4 volts, was that measured to 50 ohms? Does the SI5351 put out at least 1.4v into 50 ohms? Or does anyone really send 7dbm to thier mixers??
Thanks Charlie. That fixed that. Now I have an issue that the display is only showing the leading digit of each part of the display. So I have the “3” of the frequency, the “1” of the 1000 and the “H” of the Hz. Same is true on the bottom line. Only have U, R and Z showing. They are all where they should be and they change with appropriate inputs on mode, PTT, Radix etc. This is happening on two different displays. I loaded a test sketch for the display and it works fine with that sketch. I am seeing the appropriate frequencies coming out of the Si5351. Thoughts? Thanks Ron
Hi Ron. I have never seen that before. All I can suggest is copy the syntax from the example sketch into the VFO sketch. Other than that, I haven't a clue sorry. Charlie
Just found your channel and I'm really loving your methodology and practical approach! I'm starting on my first transceiver now. Question: I read that the Siglent has a "high precision frequency counter" built in. Could you have used that?
New years greetings Charlie ,well explained great job helps alot and like wise maths wasn't my strong point at school ,brought up with old math's arithmetic then second year at high school new math's was introduced ,confused me hi hi. Many thanks for sharing.
@@CharlieMorrisZL2CTM I don't even know where to begin, but I should start by reading I guess. I tried my hand at simple programming a few times but I was baffled each time.
For calibration of the si5351 I have an old I think Neo6 gps module I can set the output to 1Mhz, on the new ones you can set them to 10Mhz. I changed the Si code to 1Mhz and lock the top trace of my scope to that. And when the 2nd trace connected to the Si module stops moving using the calibration code I know I'm good to go.
That's good to know thanks Brian, I'll remember that. I have found this sig gen to be very good and certainly accurate enough for my needs here. If I didn't have that then the GPS method would be an excellent option.
I really appreciate this video. I am going to be rebuilding the crystal filter on my bitx40 and putting on a different frequency and so I'm very curious as to how you decide which frequencies to use for your bfo. I was going to use a sketch that would allow me to tune the bfo separately from the vfo so that I could decide which frequencies to use for the upper and lower sideband and then hardcode those in. But I am really curious how you're going to do it!
2nd comment. Have to adjust band limits depending on LSB or USB. Ty cannot TX USB at 3.9MHz or you are out of band... (assuming 3.9 is your local upper limit)
Hi again. In the past I have had the L/USB auto select in software depending on the band in use. In this particular case I have given the operator a choice.
VERY GOOD video Charlie ! Congratulations. I am not familiary with those you tube video: I would like to ask HOW TO download the code for the Arduino please ? Have you already available any schematics diagram and part list for the receiver ? I am very interested. Thanks for all.
Why not calibrate using your oscilloscope? I'm thinking either use two channels or feed the external timebase of your scope with your sig-gen (presuming you trust the sig-gen timebase over the 'scopes).
I would also continue that some don’t have oscilloscopes or signal generators. An alternative is using a receiver near a time signal (WWV 10 MHz for example). This gives the possibility of doing a zero beat without having pricey equipment, and the only error would come from trusting the stability of the time signal near your country.
@@CharlieMorrisZL2CTM I see, thanks for the clarification. I was wondering if there was some special advantage to this beat frequency method I wasn't considering, but if it's just your preferred method because you like it that's certainly valid too! Really enjoying the project-log nature of your channel by the way, keep it up!
Hi Charlie, I really appreciate all your good work here and your willingness to share it. I'm trying to duplicate the VFO in the Simple SSB rig. The firmware won't compile and returns "no matching function for call to 'LiquidCrystal_I2::begin()'. According to the literature I might have the wrong library chosen. Can you tell me what library you used for the LCD and/or if there is some other issue here? Thanks.. Ron
Hi Ron. Libraries are always a problems. I've taken a look at mine as there is no way to tell where it came from. What I suggest you do is open the example sketch that comes with your library and simply copy across the syntax into the VFO sketch. I do that all the time when I have problems here.
Thanks Charlie. That fixed that. Now I have an issue that the display is only showing the leading digit of each part of the display. So I have the “3” of the frequency, the “1” of the 1000 and the “H” of the Hz. Same is true on the bottom line. Only have U, R and Z showing. They are all where they should be and they change with appropriate inputs on mode, PTT, Radix etc. This is happening on two different displays. Also seeing the appropriate frequencies coming out of the Si5351. Thoughts? Thanks Ron
Hi Chris. The original was a stock standard Uno with a Mega 328P and the second a Arduino Mega board. The display was a simple 16x2 with an I2C interface. Nothing special.
Hi Charlie, I noticed something a bit different on this build compared to other projects you have built. What is the reasoning for having the (2) 470 ohm and (2) .01 uf caps on the encoder? I have managed to get the "sketch" to compile, it might seem a little thing to you, but believe its a major achievement for me getting it to compile. Still in a steep learning curve when comes to Arduino sketches. About to power up the VFO for the first time. 73 vk2jcc
Hi Colin. I was very kindly given some rotary encoders, which require the 470 ohm resistors. Great news about the VFO. I know compiling can be difficult, especially if any of the libraries are different. Keep it up!
Hi Charlie The Si5351 looks a really interesting device. I am in the middle of modifying an old 1980s multimode CB to 1.5MHz to 500Mhz coverage using the Analog Devices AD831 active mixer and the AD9910 as a DDS VFO controlled by Arduino. I am thinking of using the Si5351 to replace the SSB carrier oscillator I would be interested in your thoughts and how it performs at around 10MHz? BTW I really enjoy your videos Best Regards M0XFX
Hi John. I have had not problems using the Si5351 at around 20MHz for high side injection. That was using a simple DBM. I would have thought you'd be fine. They are certainly cheap enough to just give it a go.
Hi Charlie. Excellent videos as always, thank you. Could add any comments about the effectiveness of the rotary encoder in this and other rigs that you have built? I see that your code for "decoding" the encoder is very simple and doesn't include other more complex things seen in other rigs like interrupts, quadrature state machines, debouncing, etc. But yet it appears to be very smooth. Do you attribute that to the high-quality encoder that you are using? Or are there other tricks? I have built several rigs using commodity encoders (very similar to the cheap one you showed in part I) and I never get a really smooth response. My tuning sometimes goes the wrong direction (backlash?) for a click or two during tuning, or steps unevenly. It's still usable, but not great. I'm sure it's a software thing. I'd be interested in any hints you can share. 73s and thanks!!
Hi. You are experiencing exactly the same as I had when I first started using rotary encoders. In the end I settled on the code that features in all of the radio up until this one (check out zl2ctm.blogspot.com/). That code has been rock solid for me - nice and smooth, no jumps etc. I suggest you give that a go as I think that will solve your problems. The advantage too is that it is not a library. In this radio I am using a rotary encoder and associated code that was very generously given to me. That code sits in the main loop and not in an interrupt called function. Given that the demands on the microprocessor (Arduino) are minimal, I have elected to leave it there for now. I might look to move that to an interrupt called function as a separate effort. I hope this helps. Charlie
@@CharlieMorrisZL2CTM Charlie, a comment from my school of fun & games with optical encoders ... when I went from the pooling method to the interrupt method the speed/responsiveness increased massively. On my setup the step size is 100Hz and I can tune all of 80 in a matter of moments. Have a go and you may find the same. I use the STM32 series which are a bit faster than the Nano. Cheers.
Dear Charlie I tried to use your code but gave me lots of errors due to the fact I guess its not an updated coding do you have an updated code I can use to do this project ? I cant code at all... Thanks for your attention Big Hugs Jose CT2KFQ
Thanks for your excellent project. I can't compile the code, it gives me an error. // Initialize the display lcd.begin(); In function 'void setup()': error: no matching function for call to 'LiquidCrystal_I2C::begin()' lcd.begin(); \Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note: candidate: void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t) void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); \Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note: candidate expects 3 arguments, 0 provided exit status 1 no matching function for call to 'LiquidCrystal_I2C::begin()' Forgive my inexperience in programming, Thanks for your project
@@CharlieMorrisZL2CTM thank you very much friend. I have already managed to activate it. Thanks for your time and for sharing your projects. My congratulations, we continue to communicate. 73
Wow, quick progress! Thanks for the detailed explanation and with the algebra which was never my strong point at school...and that was 50years ago!
Glad it was helpful!
Wow, this is amazing. As someone previously said, this is something i have been looking for. Awesome job Sir.
Excellent. I'm really pleased it was useful.
This is basically what i have been looking for months. Thank god i subscribed to the channel a while ago so this could pop up in my subs section! 😂
Excellent. I'm pleased it was useful Ivan.
Looking good Charlie, Thank you for the extra math explanation. I can always use that. I have received my first HF signals with my DC receiver over the last few weeks on 80, 40, and 20 meters. it feels good, I'm coming up to speed :) of course not without a couple of bugs but I'll get those ironed out. I can't thank you enough for all your help, it would have taken ages to get this far on my own.
That's great news Curt. Well done indeed!
Can't thank you enough for all the detail and info
cheers
My pleasure Khalid.
@@CharlieMorrisZL2CTM Built the VFO and all seems going well, except that when pin 5 is grounded i get a Continuous flicker between USB/LSB and TX/RX, Do you think adding some resistance with the toggle switch might help ?
I will be building this as a receiver only hence I'm only using Arduino regular power without the 13.8v source and Voltage divider
Cheers n 73's
To protect the Arduino from over voltage on 13.8V line, suggest to have resistive TX divider to output 3-4V not 5V... 3-4V is well above the HIGH threshold of the digital inputs
Hi Antony. I had thought of that, but dismissed it as the VCC line will have a voltage regulator. I might look to redesign it for-say-4 VDC
On your sig gen you set it up for 1.4 volts, was that measured to 50 ohms? Does the SI5351 put out at least 1.4v into 50 ohms? Or does anyone really send 7dbm to thier mixers??
Thanks Charlie. That fixed that. Now I have an issue that the display is only showing the leading digit of each part of the display. So I have the “3” of the frequency, the “1” of the 1000 and the “H” of the Hz. Same is true on the bottom line. Only have U, R and Z showing. They are all where they should be and they change with appropriate inputs on mode, PTT, Radix etc. This is happening on two different displays. I loaded a test sketch for the display and it works fine with that sketch. I am seeing the appropriate frequencies coming out of the Si5351. Thoughts? Thanks
Ron
Hi Ron. I have never seen that before. All I can suggest is copy the syntax from the example sketch into the VFO sketch. Other than that, I haven't a clue sorry.
Charlie
if you are having difficulty with line lcd.begin(); change to lcd,init(); g0psz
Just found your channel and I'm really loving your methodology and practical approach! I'm starting on my first transceiver now. Question: I read that the Siglent has a "high precision frequency counter" built in. Could you have used that?
Thanks. From what I can see the freq counter goes down to 10s Hz, whereas I need 1s Hz.
New years greetings Charlie ,well explained great job helps alot and like wise maths wasn't my strong point at school ,brought up with old math's arithmetic then second year at high school new math's was introduced ,confused me hi hi. Many thanks for sharing.
Happy New Year too Dave. Thanks for the feedback. I personally want to try and understand the underlying logic/math. It certainly helps me.
Nice project. I suppose I should learn something about arduino. I'm all in for analog circuits, but never explored the digital world very much.
Give it a go Joe. It won't cost you much.
@@CharlieMorrisZL2CTM I don't even know where to begin, but I should start by reading I guess. I tried my hand at simple programming a few times but I was baffled each time.
Maybe an easier way (suggestion) on the math regarding the voltage divider. Let: R2=4k7 --> I=5V/4k7=1.064mA. R1=(13.8V-5V)/1.064mA= ~8k3.
Do you know if the sketck will work with a cheap 'clicky' three pin encoder.
Thanks
For calibration of the si5351 I have an old I think Neo6 gps module I can set the output to 1Mhz, on the new ones you can set them to 10Mhz. I changed the Si code to 1Mhz and lock the top trace of my scope to that. And when the 2nd trace connected to the Si module stops moving using the calibration code I know I'm good to go.
That's good to know thanks Brian, I'll remember that. I have found this sig gen to be very good and certainly accurate enough for my needs here. If I didn't have that then the GPS method would be an excellent option.
Excelent! L7805 regulator is more simple! Wright?
Thanks for the video! What kind of encoder is that (seems to be an optical one) and can such a knob be bought somewhere? 73s de R2AUK
Opps, it was in the Part 1 which I missed. Sorry for this.
All good. I suspect it is an optical one. Very smooth with no indents. As for the knob, it's off an old rig.
I really appreciate this video. I am going to be rebuilding the crystal filter on my bitx40 and putting on a different frequency and so I'm very curious as to how you decide which frequencies to use for your bfo. I was going to use a sketch that would allow me to tune the bfo separately from the vfo so that I could decide which frequencies to use for the upper and lower sideband and then hardcode those in. But I am really curious how you're going to do it!
That's a great approach which I use often. Start with something close to (Bandwidth/2) + 300 Hz, then tweak it from there.
4:31 Math on the Voltage divider
8:11 Code
2nd comment. Have to adjust band limits depending on LSB or USB. Ty cannot TX USB at 3.9MHz or you are out of band... (assuming 3.9 is your local upper limit)
Hi again. In the past I have had the L/USB auto select in software depending on the band in use. In this particular case I have given the operator a choice.
VERY GOOD video Charlie ! Congratulations. I am not familiary with those you tube video: I would like to ask HOW TO download the code for the Arduino please ?
Have you already available any schematics diagram and part list for the receiver ? I am very interested. Thanks for all.
Hi Ambro. Everything shown on the video is available on the blog at: zl2ctm.blogspot.com/
hello, thanks for your video, where can i found the code ? i want to try your project, i am a new HAm radio ( F4IRX ) , thanks again.
Hi Stephane. Everything goes up on the blog at: zl2ctm.blogspot.com/
What is that rotary encoder wheel you are using?
Nice video
good project. Can you give a direct link to the synthesizer schematic?
Why not calibrate using your oscilloscope? I'm thinking either use two channels or feed the external timebase of your scope with your sig-gen (presuming you trust the sig-gen timebase over the 'scopes).
I have used the oscilloscope in the past using the X-Y mode. The freq counter does not do low enough, and I find the beat freq method works for me.
I would also continue that some don’t have oscilloscopes or signal generators. An alternative is using a receiver near a time signal (WWV 10 MHz for example). This gives the possibility of doing a zero beat without having pricey equipment, and the only error would come from trusting the stability of the time signal near your country.
@@CharlieMorrisZL2CTM I see, thanks for the clarification. I was wondering if there was some special advantage to this beat frequency method I wasn't considering, but if it's just your preferred method because you like it that's certainly valid too!
Really enjoying the project-log nature of your channel by the way, keep it up!
Hi Charlie, I really appreciate all your good work here and your willingness to share it. I'm trying to duplicate the VFO in the Simple SSB rig. The firmware won't compile and returns "no matching function for call to 'LiquidCrystal_I2::begin()'. According to the literature I might have the wrong library chosen. Can you tell me what library you used for the LCD and/or if there is some other issue here? Thanks.. Ron
Hi Ron. Libraries are always a problems. I've taken a look at mine as there is no way to tell where it came from. What I suggest you do is open the example sketch that comes with your library and simply copy across the syntax into the VFO sketch. I do that all the time when I have problems here.
Thanks Charlie. That fixed that. Now I have an issue that the display is only showing the leading digit of each part of the display. So I have the “3” of the frequency, the “1” of the 1000 and the “H” of the Hz. Same is true on the bottom line. Only have U, R and Z showing. They are all where they should be and they change with appropriate inputs on mode, PTT, Radix etc. This is happening on two different displays. Also seeing the appropriate frequencies coming out of the Si5351. Thoughts? Thanks
Ron
Hi Charlie, what is the actual model arduino / chipset etc that you are using here? Cheers Chris VK3TUB
Hi Chris. The original was a stock standard Uno with a Mega 328P and the second a Arduino Mega board. The display was a simple 16x2 with an I2C interface. Nothing special.
Hi Charlie, I noticed something a bit different on this build compared to other projects you have built.
What is the reasoning for having the (2) 470 ohm and (2) .01 uf caps on the encoder?
I have managed to get the "sketch" to compile, it might seem a little thing to you, but believe its a major achievement for me getting it to compile. Still in a steep learning curve when comes to Arduino sketches.
About to power up the VFO for the first time. 73 vk2jcc
Hi Colin. I was very kindly given some rotary encoders, which require the 470 ohm resistors. Great news about the VFO. I know compiling can be difficult, especially if any of the libraries are different. Keep it up!
How to use Callibration IF...? Thank you from YG1AQH. From West Java Indonesia...
Hi Charlie The Si5351 looks a really interesting device. I am in the middle of modifying an old 1980s multimode CB to 1.5MHz to 500Mhz coverage using the Analog Devices AD831 active mixer and the AD9910 as a DDS VFO controlled by Arduino. I am thinking of using the Si5351 to replace the SSB carrier oscillator I would be interested in your thoughts and how it performs at around 10MHz? BTW I really enjoy your videos Best Regards M0XFX
Hi John. I have had not problems using the Si5351 at around 20MHz for high side injection. That was using a simple DBM. I would have thought you'd be fine. They are certainly cheap enough to just give it a go.
Hi Charlie. Excellent videos as always, thank you. Could add any comments about the effectiveness of the rotary encoder in this and other rigs that you have built? I see that your code for "decoding" the encoder is very simple and doesn't include other more complex things seen in other rigs like interrupts, quadrature state machines, debouncing, etc. But yet it appears to be very smooth. Do you attribute that to the high-quality encoder that you are using? Or are there other tricks? I have built several rigs using commodity encoders (very similar to the cheap one you showed in part I) and I never get a really smooth response. My tuning sometimes goes the wrong direction (backlash?) for a click or two during tuning, or steps unevenly. It's still usable, but not great. I'm sure it's a software thing. I'd be interested in any hints you can share. 73s and thanks!!
Hi. You are experiencing exactly the same as I had when I first started using rotary encoders. In the end I settled on the code that features in all of the radio up until this one (check out zl2ctm.blogspot.com/). That code has been rock solid for me - nice and smooth, no jumps etc. I suggest you give that a go as I think that will solve your problems. The advantage too is that it is not a library. In this radio I am using a rotary encoder and associated code that was very generously given to me. That code sits in the main loop and not in an interrupt called function. Given that the demands on the microprocessor (Arduino) are minimal, I have elected to leave it there for now. I might look to move that to an interrupt called function as a separate effort. I hope this helps.
Charlie
@@CharlieMorrisZL2CTM Charlie, a comment from my school of fun & games with optical encoders ... when I went from the pooling method to the interrupt method the speed/responsiveness increased massively. On my setup the step size is 100Hz and I can tune all of 80 in a matter of moments. Have a go and you may find the same. I use the STM32 series which are a bit faster than the Nano. Cheers.
@@CharlieMorrisZL2CTM Thanks much Charlie, I'll give that one a look.
Definitely a cool build!!
Thanks for that. The aim is for simplicity, hopefully.
I'm confused by what you mean when you say 'tin Megahertz'.
Dear Charlie I tried to use your code but gave me lots of errors due to the fact I guess its not an updated coding do you have an updated code I can use to do this project ? I cant code at all... Thanks for your attention Big Hugs Jose CT2KFQ
Charlie, I have a doubt.Are you using BFO signal from si5351? If so I hope it is using for LSB and USB with IF shift programmed
.
Good video
Hi Anees, Yes, I normally program the BFO shift into the code (see my other rigs). On this occasion I decided to be different and make it manual.
you make it look so easy!
Not sure about that Chris. I just wish I could remember all that I have read!
Such good info! Thanks so much!
You are so welcome David. Really pleased it was useful.
Thanks for your excellent project.
I can't compile the code, it gives me an error.
// Initialize the display
lcd.begin();
In function 'void setup()':
error: no matching function for call to 'LiquidCrystal_I2C::begin()'
lcd.begin();
\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note: candidate: void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t) void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS );
\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note: candidate expects 3 arguments, 0 provided
exit status 1
no matching function for call to 'LiquidCrystal_I2C::begin()'
Forgive my inexperience in programming, Thanks for your project
Rudy. Look at the example code that comes with your LCD library and port over the syntax.
@@CharlieMorrisZL2CTM thank you very much friend. I have already managed to activate it. Thanks for your time and for sharing your projects.
My congratulations, we continue to communicate.
73
Whitis is the steck code for download ?
Check out: zl2ctm.blogspot.com/
@@CharlieMorrisZL2CTM Very good!! Tank you very much!!!!
Let's build preamp for your computer microphone ;)
It works fine, except for the Xbox recording software. A real pain.
@@CharlieMorrisZL2CTM Try to increase sensitivity in the audio settings.
Code out of focus.