Topics

Raduino mod to use the SI5351C


Rafael Diniz
 

Hi all,

Have anyone adapted the raduino board layout and arduino firmware for a
SI5351C instead of the SI5351A (just set CLKIN to 10Mhz for my GPSDO and
set the freq ref of the pins to the ubitx to use the CLKIN, and may be
change any constants to cope with 10MHz base clock)?

Concerning the ubitx v6 board, I don't think any modification is needed,
as the SI5351C has the same output levels available in the SI5351A, as
far as I could read the data-sheet, right?

Thanks,
Rafael


Jerry Gaffke
 

It's been several years since I've had my head in that si5351bx code,
but I believe the code will correctly index the additional registers for up to 6 outputs.
The only change required is this:

<  uint8_t  si5351bx_drive[3] = {1, 1, 1}; // 0=2ma 1=4ma 2=6ma 3=8ma for CLK 0,1,2
>  uint8_t  si5351bx_drive[6] = {1, 1, 1, 1, 1, 1}; // 0=2ma 1=4ma 2=6ma 3=8ma for CLK 0,1,2

Outputs at clknum=6,7  need special code, as they support only integer output divides, not fractional output divides.
It should be trivial to support those final two outputs by adding a couple more entries
to si5351bx_drive[] and treating them as a special case to load registers  MS6_P1 and MS7_P1 appropriately
as described in AN619.  However, note that you only get even integer divides from 6 to 254 of your VCO frequency.

The etherkit si5351 library has been tested on all 8 outputs of the larger parts such as the Si5351C,
but is quite large and takes up most of the flash on the Nano.
The si5351bx routines were written specifically to allow si5351 code to fit in the Nano's flash
along with all the other firmware required for a Bitx40 or uBitx.


If you have a 10mhz reference instead of a 25mhz reference, then I suggest changing the following lines:

<   // If using 27mhz crystal, set XTAL=27000000, MSA=33.  Then vco=891mhz
<   #define SI5351BX_XTAL 25000000          // Crystal freq in Hz
<   #define SI5351BX_MSA  35                // VCOA is at 25mhz*35 = 875mhz

>   // If using 27mhz crystal, set XTAL=27000000, MSA=33.  Then vco=891mhz
>   #define SI5351BX_XTAL 10000000          // Crystal freq in Hz
>   #define SI5351BX_MSA  88                // VCOA is at 10mhz*88 = 880mhz

Note that this does not work so well on the crystal input pins such as found on the Si5351A,
only the CLKIN pin of the Si5351C.  Attempting to drive an Si5351A crystal pin at 10mhz
sort of works, but results in significant VCO jitter.

Jerry, KE7ER


On Thu, Jan 21, 2021 at 05:12 AM, Rafael Diniz wrote:
Hi all,

Have anyone adapted the raduino board layout and arduino firmware for a
SI5351C instead of the SI5351A (just set CLKIN to 10Mhz for my GPSDO and
set the freq ref of the pins to the ubitx to use the CLKIN, and may be
change any constants to cope with 10MHz base clock)?

Concerning the ubitx v6 board, I don't think any modification is needed,
as the SI5351C has the same output levels available in the SI5351A, as
far as I could read the data-sheet, right?

Thanks,
Rafael


Rafael Diniz
 

Thanks a lot Jerry! The  I saw the etherkit si5351 library, it seems it
is all there! I don't really get the integer dividers limitation - It is
just a matter of avoiding the use of the SI5351C pins with this
integer-only divider limitation, right?

What exactly means this SI5351BX_MSA multiplier and the resultant
SI5351BX_XTAL*SI5351BX_MSA frequency? It should be always around 800
something MHz, right?

Rafael

On 1/21/21 2:01 PM, Jerry Gaffke via groups.io wrote:
It's been several years since I've had my head in that si5351bx code,
but I believe the code will correctly index the additional registers
for up to 6 outputs.
The only change required is this:

<  uint8_t  si5351bx_drive[3] = {1, 1, 1}; // 0=2ma 1=4ma 2=6ma 3=8ma
for CLK 0,1,2
  uint8_t  si5351bx_drive[6] = {1, 1, 1, 1, 1, 1}; // 0=2ma 1=4ma
2=6ma 3=8ma for CLK 0,1,2

Outputs at clknum=6,7  need special code, as they support only integer
output divides, not fractional output divides.
It should be trivial to support those final two outputs by adding a
couple more entries
to si5351bx_drive[] and treating them as a special case to load
registers  MS6_P1 and MS7_P1 appropriately
as described in AN619.  However, note that you only get even integer
divides from 6 to 254 of your VCO frequency.

The etherkit si5351 library has been tested on all 8 outputs of the
larger parts such as the Si5351C,
but is quite large and takes up most of the flash on the Nano.
The si5351bx routines were written specifically to allow si5351 code
to fit in the Nano's flash
along with all the other firmware required for a Bitx40 or uBitx.


If you have a 10mhz reference instead of a 25mhz reference, then I
suggest changing the following lines:

<   // If using 27mhz crystal, set XTAL=27000000, MSA=33.  Then vco=891mhz
<   #define SI5351BX_XTAL 25000000          // Crystal freq in Hz
<   #define SI5351BX_MSA  35                // VCOA is at 25mhz*35 =
875mhz

   // If using 27mhz crystal, set XTAL=27000000, MSA=33.  Then vco=891mhz
   #define SI5351BX_XTAL 10000000          // Crystal freq in Hz
   #define SI5351BX_MSA  88                // VCOA is at 10mhz*88 =
880mhz

Note that this does not work so well on the crystal input pins such as
found on the Si5351A,
only the CLKIN pin of the Si5351C.  Attempting to drive an Si5351A
crystal pin at 10mhz
sort of works, but results in significant VCO jitter.

Jerry, KE7ER


On Thu, Jan 21, 2021 at 05:12 AM, Rafael Diniz wrote:

Hi all,

Have anyone adapted the raduino board layout and arduino firmware
for a
SI5351C instead of the SI5351A (just set CLKIN to 10Mhz for my
GPSDO and
set the freq ref of the pins to the ubitx to use the CLKIN, and may be
change any constants to cope with 10MHz base clock)?

Concerning the ubitx v6 board, I don't think any modification is
needed,
as the SI5351C has the same output levels available in the SI5351A, as
far as I could read the data-sheet, right?

Thanks,
Rafael


Jerry Gaffke
 

Rafael,

Yes, avoiding outputs 6 and 7 allows you to use the si5351bx code, no change except
as noted in my previous post.


The si5351 is a two stage device.
SiLabs specs the two VCO's as having a range of 600 to 900 mhz,
though G0UPL has found that the Si5351 still seems to work when programmed between roughly 1200mhz and 300mhz.
The uBitx VCO frequency (875mhz) is determined by the reference frequency (25mhz) and the MSA divider value (35).
The VCO frequency is divided by MSA, the result is compared with the reference frequency:  875mhz/35 == 25mhz

A minor change to load up registers MS6_P1 and MS7_P1  would allow you to
emit frequencies that are an even integer divide of the VCO.

The Si5351 has two VCO's, the second VCO is left unused.
You could use the first VCO as the source for output 6,
the second VCO for output 7, and if you use fractional dividers on the PLL's (the PLL currently uses
an integer divide of 35), then outputs 6 and 7 can be any frequency you want.
And outputs 0 through 5 can do fractional divides of either one of those VCO's, so they can be arbitrary too.
But doing all of that will take a thorough understanding of AN619.

The etherkit library tries to do pretty much everything.
For that reason, you may find it harder to use than the si5351bx routines.
But not quite as hard as figuring out AN619.
 
Jerry, KE7ER


On Thu, Jan 21, 2021 at 10:15 AM, Rafael Diniz wrote:
Thanks a lot Jerry! The  I saw the etherkit si5351 library, it seems it
is all there! I don't really get the integer dividers limitation - It is
just a matter of avoiding the use of the SI5351C pins with this
integer-only divider limitation, right?

What exactly means this SI5351BX_MSA multiplier and the resultant
SI5351BX_XTAL*SI5351BX_MSA frequency? It should be always around 800
something MHz, right?

Rafael


Rafael Diniz
 

Thanks Jerry. I think I start to understand its working. I'm taking a
look in the AN619. Any recommended package type for the Si5351C?

Rafael

On 1/21/21 3:58 PM, Jerry Gaffke via groups.io wrote:
Rafael,

Yes, avoiding outputs 6 and 7 allows you to use the si5351bx code, no
change except
as noted in my previous post.


The si5351 is a two stage device.
SiLabs specs the two VCO's as having a range of 600 to 900 mhz,
though G0UPL has found that the Si5351 still seems to work when
programmed between roughly 1200mhz and 300mhz.
The uBitx VCO frequency (875mhz) is determined by the reference
frequency (25mhz) and the MSA divider value (35).
The VCO frequency is divided by MSA, the result is compared with the
reference frequency:  875mhz/35 == 25mhz

A minor change to load up registers MS6_P1 and MS7_P1  would allow you to
emit frequencies that are an even integer divide of the VCO.

The Si5351 has two VCO's, the second VCO is left unused.
You could use the first VCO as the source for output 6,
the second VCO for output 7, and if you use fractional dividers on the
PLL's (the PLL currently uses
an integer divide of 35), then outputs 6 and 7 can be any frequency
you want.
And outputs 0 through 5 can do fractional divides of either one of
those VCO's, so they can be arbitrary too.
But doing all of that will take a thorough understanding of AN619.

The etherkit library tries to do pretty much everything.
For that reason, you may find it harder to use than the si5351bx routines.
But not quite as hard as figuring out AN619.
 
Jerry, KE7ER


On Thu, Jan 21, 2021 at 10:15 AM, Rafael Diniz wrote:

Thanks a lot Jerry! The  I saw the etherkit si5351 library, it
seems it
is all there! I don't really get the integer dividers limitation -
It is
just a matter of avoiding the use of the SI5351C pins with this
integer-only divider limitation, right?

What exactly means this SI5351BX_MSA multiplier and the resultant
SI5351BX_XTAL*SI5351BX_MSA frequency? It should be always around 800
something MHz, right?

Rafael