Si5351 vfo arduino nano


  • Cracking the SI5351 Multiple Clock Generator – Part I
  • Arduino SI5351A VFO
  • ARDUINO VFO
  • Si5351 VFO
  • Getting Started with SI5351 clock generator
  • An Arduino Si5351a quadrature VFO controller
  • Cracking the SI5351 Multiple Clock Generator – Part I

    For control board schematic click here and for the Si board click here. It consists of two parts: the controller board and the Si board. Because there are two versions of the Si with different I2C addresses and different x-tal frequencies, I made two versions of the software, for 25MHz and 27 MHz x-tal frequency.

    The software accepts both versions of the Si There are 3 clock outputs available having the following outputs: CLK0: Tx Output frequency from 1 — MHz same frequency as on the display. For instance 9 or Every frequency is possible. Si board The two push buttons are for Calibration and selecting and tune the IF frequency. The toggle switch is for selecting RIT. With this function you can tune the Rx frequency separate from the Tx frequency.

    Below you see a test setup. Note: If calibration will not succeed: You can reset the calibration by pressing the Calibration button twice without tuning.

    Then try again to calibrate. The software has the same functionality as the PIC version. For that reason you can download this updated library from here. This zip file also includes the Rotary library. It is a define statement at the beginning of the file. Modifications I have modified the sketch so the lowest frequency is now 10 KHz.

    I modified the display routine as well because it crashed when the frequency was below KHz ;-. The maximum tunable frequency is set to MHz. Update to Version 2. Repaired Update to Version 3. By holding down the stepsize push button a little longer you can step For downloading the latest Arduino sketch version 3. For the schematic click here. Tx on CLK0.

    Arduino SI5351A VFO

    If the tuning knob is turned CCW counter clock-wise then the pattern sequence between indents is 01, 00, 10, If, however, the tuning knob is turned CW clock-wise then the pattern sequence between indents is 10, 00, 01, This pattern reversal allows us to determine the tuning direction.

    The rotary encoder comes fitted with a single-pole push switch which I use to control the tuning step-size in increments of 10, , , , and Hz.

    A brief push on the tuning knob increases the tuning step-size. A longer push on the tuning knob causes the step-size to decrease. All mechanical switches suffer from contact bounce which makes for erratic tuning. Instead of «debouncing» each switch with hardware I am using a software integrator. A SPST band-change switch has been included. When the switch is activated it is possible to cycle through each of the amateur radio bands by rotating the tuning knob.

    The tuning knob behaves normally when the switch is deactivated. Programming: Programming the ATmegaP microcontroller is relatively simple. Apply 9 volts and everything should light up. Important: Even though the breakout board runs off 5 volts, the Si chip itself runs off 3.

    This means that the maximum voltage from each output is 3. A buffer is therefore required when interfacing to 5 volt logic circuits. Click here to view my other instructables. It has currently only been tested with the ATmegaP microcontroller, but should be portable to at least the ATmega88 and ATmega, although the code size is currently about 8 kB due to the math in the PLL calculations , so you will most likely need at least 16 kB of program space. Locate the crystal as close to the Si as possible and keep the traces as short as possible.

    Please use a SMT crystal. A crystal with leads will have too much stray capacitance. The library tracks the referenced frequencies and correction factors individually for both the crystal oscillator reference XO and external reference CLKIN. The XO reference frequency is set during the call to init. It should be easy to use this on any AVR, or on the Arduino platform. Only minor changes would be needed for other microcontrollers.

    There are TWO examples here. In this example we use a very nice assembly language library by Peter Fleury to take care of the I2C bit-banging. It works perfectly! This is the ideal situation. Changelog Fix warning «reg may be uninitialized» v2. Note: In practice you can, but the other will move from the frequency you set, which is an unexpected behavior, so I made them mutually exclusive CLK1 and CLK2.

    This are the valid combinations for independent clocks output. A note on Low Frequency operation The limits of the SiA configuration registers for the fractional PLL multiplier and the Multi-Synth divider means that you need to make some small changes if you wish to generate lower frequencies, in the range 8kHz to 1MHz.

    In order to generate lower frequencies you must use the final division stage, which is configurable to divide by 8 powers of 2 from 0 divide-by-1 which is the default, to 7 divide-by This is a constant defined in the. There are 8 possible division ratios: 1, 2, 4, 8, 16, 32, 64, In this case you setup a frequency the multiple higher than you really want, and then divide it back again using this division ratio.

    For example, suppose you want to generate an output frequency of kHz. This is a lot lower than 1MHz and the SiA cannot reach it directly. Then you call the function siASetFrequency with Hz 1. It should be noted that although the datasheet specifies that the lowest SiA output frequency is 8kHz, the register configurations do allow you to configure lower values, all the way down to 3.

    Features This are so far the implemented features Any particular wish? See Si. You has to enable them by hand.

    You can only have 2 of the 3 outputs running at any moment See «Two of three» section below Power control on each output independently See Si. There should be no reason that it would not work on any other Arduino hardware with I2C support. Since the CLK outputs by default are turned off, you may need to turn your CLK output on as well: Example 3: Arduino sketch example This example is very similar to Example 2 above, just re-organised a bit as an Arduino sketch.

    Click to download files. Save them all in the same directory as the. You can specify any value from 1MHz to MHz. It determines the correct register entries to configure the SiA to get the desired output frequency. There are some comments in the code to explain it.

    The comments are nicely tab-indented to character column 37 in my AVR Studio, but they might not line up so nicely in your editor or your internet browser. Note that I kept it minimal.

    I have not created a define for every register the SiA has, or tried to cater for all the functionality or variants of the Si chip.

    Unlike other SiA demo libraries, I want to keep this one as simple and easy to understand as possible. So I only created defines for things I needed. You do have defines for the clock configuration registers, for the base address for PLL A and B, and for the base addresses for multisynth 0, 1 and 2; as well as the R-Divider definitions for division ratios The actual oscillation frequency will be different.

    I have one here which measures 27,, for example. If precision is important to your application, you will want to measure and put in the actual oscillation frequency here. Alf VK2YAC also provided a single file sketch, it is the same as the above collection of four files but all in one.

    The final file is made available here, and should make it all easy: sia-test.

    ARDUINO VFO

    The board is double sided, meant to accomodate everything including connectors, the LCD module and all controls. Most of the passives are sized, except of C9, C10 which are sized. The most tricky component Sia comes in a tiny 3x3mm! MSOP package with 0.

    Si5351 VFO

    Figure 2: Top side click to enlarge Figure 3: Bottom side click to enlarge Figure 4: Populated board driving a simple 40m receiver Figure 5: Populated board driving a simple 40m receiver I still have a few spare unpopulated boards, if someone is interested in having one or morecontact me. The UI part contains a small template library using both the CRTP pattern to avoid the overhead of virtual functions saves code memory and a bit of runtime overhead and compile-time evaluation with variadic templates to permit strong compiler optimizitation.

    In fact, the version 2. Quite a difference in a micro controller with 32kB of code memory. There are 3 clock outputs available having the following outputs: CLK0: Tx Output frequency from 1 — MHz same frequency as on the display.

    Getting Started with SI5351 clock generator

    For instance 9 or Every frequency is possible. Si board The two push buttons are for Calibration and selecting and tune the IF frequency. The toggle switch is for selecting RIT. With this function you can tune the Rx frequency separate from the Tx frequency. Below you see a test setup.

    An Arduino Si5351a quadrature VFO controller

    Note: If calibration will not succeed: You can reset the calibration by pressing the Calibration button twice without tuning. Then try again to calibrate.

    The software has the same functionality as the PIC version. For that reason you can download this updated library from here. This zip file also includes the Rotary library.


    thoughts on “Si5351 vfo arduino nano

    Leave a Reply

    Your email address will not be published. Required fields are marked *