Simple SSB Rig: Part 2 - VFO, Arduino Code, Si5351 Calibration

Поделиться
HTML-код
  • Опубликовано: 13 янв 2021
  • Video looking at the VFO (Arduino wiring, switches etc), Arduino sketch/code, and the calibration of the Si5351. Apologies that the audio during the code portion is low.
    The schematics and code are available on the blog at: zl2ctm.blogspot.com/
  • НаукаНаука

Комментарии • 82

  • @mariaviklund4546
    @mariaviklund4546 2 месяца назад

    Wow, this is amazing. As someone previously said, this is something i have been looking for. Awesome job Sir.

  • @acestudioscouk-Ace-G0ACE
    @acestudioscouk-Ace-G0ACE 3 года назад +2

    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!

  • @genericdynamics6618
    @genericdynamics6618 3 года назад +3

    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! 😂

  • @curtstacy779
    @curtstacy779 3 года назад +1

    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.

  • @khalidtarawneh2289
    @khalidtarawneh2289 3 года назад +2

    Can't thank you enough for all the detail and info
    cheers

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      My pleasure Khalid.

    • @khalidtarawneh2289
      @khalidtarawneh2289 3 года назад

      @@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

  • @Chris-ZL
    @Chris-ZL 3 года назад

    you make it look so easy!

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      Not sure about that Chris. I just wish I could remember all that I have read!

  • @newmonengineering
    @newmonengineering 3 года назад

    Definitely a cool build!!

  • @docfoot316
    @docfoot316 3 года назад +1

    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
      @CharlieMorrisZL2CTM  3 года назад

      Happy New Year too Dave. Thanks for the feedback. I personally want to try and understand the underlying logic/math. It certainly helps me.

  • @daviddickey9832
    @daviddickey9832 3 года назад

    Such good info! Thanks so much!

  • @stephenfine8671
    @stephenfine8671 3 года назад

    Do you know if the sketck will work with a cheap 'clicky' three pin encoder.
    Thanks

  • @RA4FOC
    @RA4FOC 2 года назад

    good project. Can you give a direct link to the synthesizer schematic?

  • @fredriko.zachrisson9711
    @fredriko.zachrisson9711 2 года назад

    What is that rotary encoder wheel you are using?

  • @MiscDotGeek
    @MiscDotGeek 3 года назад

    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!

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад +1

      That's a great approach which I use often. Start with something close to (Bandwidth/2) + 300 Hz, then tweak it from there.

  • @edbeckerich3737
    @edbeckerich3737 Год назад

    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??

  • @WhatDennisDoes
    @WhatDennisDoes 3 года назад

    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?

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад +1

      Thanks. From what I can see the freq counter goes down to 10s Hz, whereas I need 1s Hz.

  • @user-sh8nn9gx7b
    @user-sh8nn9gx7b Год назад

    Nice video

  • @diddleize
    @diddleize 3 года назад +1

    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

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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

  • @brianharper9798
    @brianharper9798 3 года назад

    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.

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад +1

      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.

  • @fredriko.zachrisson9711
    @fredriko.zachrisson9711 2 года назад

    4:31 Math on the Voltage divider
    8:11 Code

  • @rontaylor9026
    @rontaylor9026 3 года назад

    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

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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

  • @R2AUK
    @R2AUK 3 года назад

    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

    • @R2AUK
      @R2AUK 3 года назад

      Opps, it was in the Part 1 which I missed. Sorry for this.

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад +1

      All good. I suspect it is an optical one. Very smooth with no indents. As for the knob, it's off an old rig.

  • @joewoodchuck3824
    @joewoodchuck3824 3 года назад

    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.

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      Give it a go Joe. It won't cost you much.

    • @joewoodchuck3824
      @joewoodchuck3824 3 года назад

      @@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.

  • @stephaneshm3043
    @stephaneshm3043 3 года назад +2

    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.

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад +1

      Hi Stephane. Everything goes up on the blog at: zl2ctm.blogspot.com/

  • @louisbanaszak3125
    @louisbanaszak3125 2 года назад

    if you are having difficulty with line lcd.begin(); change to lcd,init(); g0psz

  • @M0XFXUK
    @M0XFXUK 3 года назад

    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

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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.

  • @ambroribo6079
    @ambroribo6079 3 года назад

    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.

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      Hi Ambro. Everything shown on the video is available on the blog at: zl2ctm.blogspot.com/

  • @rontaylor9026
    @rontaylor9026 3 года назад

    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

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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.

    • @rontaylor9026
      @rontaylor9026 3 года назад

      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

  • @HeathLedgersChemist
    @HeathLedgersChemist 3 года назад

    I'm confused by what you mean when you say 'tin Megahertz'.

  • @colincolin30
    @colincolin30 3 года назад

    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

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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!

  • @dadangsudrajat9406
    @dadangsudrajat9406 2 года назад

    How to use Callibration IF...? Thank you from YG1AQH. From West Java Indonesia...

  • @aneespi4684
    @aneespi4684 3 года назад

    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

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад +1

      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.

  • @nodzie1
    @nodzie1 3 года назад

    Hi Charlie, what is the actual model arduino / chipset etc that you are using here? Cheers Chris VK3TUB

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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.

  • @ernestb.2377
    @ernestb.2377 Год назад

    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.

  • @RICKY_TECNO_RADIO
    @RICKY_TECNO_RADIO 2 года назад

    Excelent! L7805 regulator is more simple! Wright?

  • @diddleize
    @diddleize 3 года назад

    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)

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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.

  • @Superfungus0
    @Superfungus0 3 года назад +1

    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).

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      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.

    • @robertcullipher3492
      @robertcullipher3492 3 года назад

      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.

    • @Superfungus0
      @Superfungus0 3 года назад

      @@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!

  • @missangas
    @missangas Год назад

    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

  • @mars667
    @mars667 3 года назад

    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!!

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад +1

      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

    • @nevmarr
      @nevmarr 3 года назад

      @@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.

    • @mars667
      @mars667 3 года назад

      @@CharlieMorrisZL2CTM Thanks much Charlie, I'll give that one a look.

  • @rudysr
    @rudysr 3 года назад +1

    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
      @CharlieMorrisZL2CTM  3 года назад

      Rudy. Look at the example code that comes with your LCD library and port over the syntax.

    • @rudysr
      @rudysr 3 года назад

      @@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

  • @luizhenriquemialchi435
    @luizhenriquemialchi435 3 года назад

    Whitis is the steck code for download ?

  • @bfx8185
    @bfx8185 3 года назад

    Let's build preamp for your computer microphone ;)

    • @CharlieMorrisZL2CTM
      @CharlieMorrisZL2CTM  3 года назад

      It works fine, except for the Xbox recording software. A real pain.

    • @bfx8185
      @bfx8185 3 года назад

      @@CharlieMorrisZL2CTM Try to increase sensitivity in the audio settings.

  • @rambasu7502
    @rambasu7502 8 месяцев назад

    Code out of focus.