#### Si570 Set Frequency

Alfredo Mendiola Loyola

Hello:

I have found this Arduino code to set the Frequency on a si570 oscillator but it has a max frequency of 157 Mhz (#define ULIMIT 157000000UL),

Is there a way to modify the source code to make it work until 440 Mhz ?

I would like to set frequencies from 430 to 440 mhz.

Regards
Alfredo Mendiola
OA4AJP

Ricardo Caratti

Try it:

Where did you see
#define ULIMIT 157000000UL

replace to
#define ULIMIT 440000000UL

The last band starts on 135MHz. You might need to change this value
too on this code:
uint32_t SiBandTable[24] =
{10000000, 11000000, 12000000, 13000000, 15000000, 17000000, 19000000,
21000000, 23000000, 25000000, 28000000, 32000000, 36000000, 41000000,
47000000, 54000000, 61000000, 70000000, 81000000, 90000000,
101000000,
111000000, 128000000, *135000000*};

Try to replace the values of the bands to values of your goal.

73.

On Sun, Apr 14, 2019 at 2:59 PM Alfredo Mendiola Loyola via Groups.Io
<mendiola_loyola=yahoo.com@groups.io> wrote:

Hello:

I have found this Arduino code to set the Frequency on a si570 oscillator
but it has a max frequency of 157 Mhz (#define ULIMIT 157000000UL),

Is there a way to modify the source code to make it work until 440 Mhz ?

I would like to set frequencies from 430 to 440 mhz.

Regards
Alfredo Mendiola
OA4AJP

--

QRZ: http://www.qrz.com/db/PU2CLR
Skype: ricardo_caratti
Mobile: +55 61 81442296

Nick Kennedy

For this program it might take a bit of work. The program is set up to have
pre-calculated register values for all frequency ranges within the
specified limits, so the amount of calculation required for a small change
within a band is minimized. So you would need to expand the tables of
values all the way up to your desired 440 MHz limit to continue with that
method.

There's no reason you couldn't do it, but you'd have to study the code
(and/or the AA0ZZ QEX article) a bit to understand how the tables are
constructed.

I have expanded this basic program to one that includes display, rotary
encoder, TX/RX offset and so on, but I haven't expanded the frequency
limits because the version of the Si570 that I'm using is only specified to
160 MHz.

Good luck with it.

73-

NIck, WA5BDU

On Sun, Apr 14, 2019 at 12:59 PM Alfredo Mendiola Loyola via Groups.Io
<mendiola_loyola=yahoo.com@groups.io> wrote:

Hello:

I have found this Arduino code to set the Frequency on a si570 oscillator
but it has a max frequency of 157 Mhz (#define ULIMIT 157000000UL),

Is there a way to modify the source code to make it work until 440 Mhz ?

I would like to set frequencies from 430 to 440 mhz.

Regards
Alfredo Mendiola
OA4AJP

wb6ogd

The Si570 is a tricky beast!
Craig AA0ZZ conquered the programming using pre-calculated tables like Nick said.

Silicon Labs has an app note that has C code for one of their microcontroller chips.
I was able to port that to a PIC using Microchip's free C compiler but it took up almost
all the memory  :(

BUT Arduino's run C and pretty efficiently.  I would get the app note and port it to
Arduino.  The actual code that sets the frequency is only a few lines.  It is probably
not as fast as the integer calculation/table method.

If you could use the Si5351, there are Arduino libraries available to do it.  Is easy,
I have been using the Etherkit library and board for a few years now.

I have both an AD9851 (DDS-60) and Si5351 in my PHSNA using modified Nick code
with LCD and encoder for local standalone.  It is my favorite piece of test equipment,
thanks to Nick and PHSNA group!!
Code is posted in the Files area.
73,
Gary
WB6OGD

On 4/14/2019 1:55 PM, Nick Kennedy wrote:
For this program it might take a bit of work. The program is set up to have
pre-calculated register values for all frequency ranges within the
specified limits, so the amount of calculation required for a small change
within a band is minimized. So you would need to expand the tables of
values all the way up to your desired 440 MHz limit to continue with that
method.

There's no reason you couldn't do it, but you'd have to study the code
(and/or the AA0ZZ QEX article) a bit to understand how the tables are
constructed.

I have expanded this basic program to one that includes display, rotary
encoder, TX/RX offset and so on, but I haven't expanded the frequency
limits because the version of the Si570 that I'm using is only specified to
160 MHz.

Good luck with it.

73-

NIck, WA5BDU

On Sun, Apr 14, 2019 at 12:59 PM Alfredo Mendiola Loyola via Groups.Io
<mendiola_loyola=yahoo.com@groups.io> wrote:

Hello:

I have found this Arduino code to set the Frequency on a si570 oscillator
but it has a max frequency of 157 Mhz (#define ULIMIT 157000000UL),

Is there a way to modify the source code to make it work until 440 Mhz ?

I would like to set frequencies from 430 to 440 mhz.

Regards
Alfredo Mendiola
OA4AJP

Alfredo Mendiola Loyola

I found this library sarfata/radiono, I think I can use it to set the frequencies on the si570.

|
|
|
| | |

|

|
|
| |

Minima's Arduino software. Useful for controlling a homebrew Si570 based superhet transceiver/receiver. - sarfat...
|

|

|

73sAlfredo Mendiola LoyolaOA4AJP

On Monday, April 15, 2019, 9:04:36 AM GMT-5, wb6ogd <garywinblad@...> wrote:

The Si570 is a tricky beast!
Craig AA0ZZ conquered the programming using pre-calculated tables like
Nick said.

Silicon Labs has an app note that has C code for one of their
microcontroller chips.
I was able to port that to a PIC using Microchip's free C compiler but
it took up almost
all the memory  :(

BUT Arduino's run C and pretty efficiently.  I would get the app note
and port it to
Arduino.  The actual code that sets the frequency is only a few lines.
It is probably
not as fast as the integer calculation/table method.

If you could use the Si5351, there are Arduino libraries available to do
it.  Is easy,
I have been using the Etherkit library and board for a few years now.

I have both an AD9851 (DDS-60) and Si5351 in my PHSNA using modified
Nick code
with LCD and encoder for local standalone.  It is my favorite piece of
test equipment,
thanks to Nick and PHSNA group!!
Code is posted in the Files area.
73,
Gary
WB6OGD

On 4/14/2019 1:55 PM, Nick Kennedy wrote:
For this program it might take a bit of work. The program is set up to have
pre-calculated register values for all frequency ranges within the
specified limits, so the amount of calculation required for a small change
within a band is minimized. So you would need to expand the tables of
values all the way up to your desired 440 MHz limit to continue with that
method.

There's no reason you couldn't do it, but you'd have to study the code
(and/or the AA0ZZ QEX article) a bit to understand how the tables are
constructed.

I have expanded this basic program to one that includes display, rotary
encoder, TX/RX offset and so on, but I haven't expanded the frequency
limits because the version of the Si570 that I'm using is only specified to
160 MHz.

Good luck with it.

73-

NIck, WA5BDU

On Sun, Apr 14, 2019 at 12:59 PM Alfredo Mendiola Loyola via Groups.Io
<mendiola_loyola=yahoo.com@groups.io> wrote:

Hello:

I have found this Arduino code to set the Frequency on a si570 oscillator
but it has a max frequency of 157 Mhz (#define ULIMIT 157000000UL),

Is there a way to modify the source code to make it work until 440 Mhz ?

I would like to set frequencies from 430 to 440 mhz.

Regards
Alfredo Mendiola
OA4AJP

Ambro_IW2FVO

Hi Alfredo, this is iw2fvo .
Years ago I got in touch with Nick WA5BDU to have some indication about the si570 control and thank to his suggestion I developed a sketch capable of controlling the SI570 in its whole frequency band ( up to 1.4 GHZ )
I did use this sketch on Arduino Nano as a VFO for my two meters FM receiver and for the APT receiver.
The sketch does not requires to enter pre_computed values : it performs the calculation for each one of the required frequencies.
It receives the operating frequency using Nano UART input : You can use the Arduino IDE Monitor ( e.g. : 150.123.500 to set 153.123500 MHz ) to control the frequency output.
you can define the IF freq offset : see line 72 of the code ( it is set to 10.7 MHz : change it as you need).
you can disable some messages sent to the monitor if not needed. There is a define for that monitor.
I hope this sketch will help since I was able to generate frequencies of about 300 MHz due to the limited frequency range of my si570 chip.
I will try to attach the sketch here !
Thanks Nick !
I am sorry for my bad English !!!
73, IW2FVO, Ambrogio

Alfredo Mendiola Loyola

On Wed, Apr 17, 2019 at 07:38 AM, Ambro_IW2FVO wrote:

Ambrogio
Thank you very much Ambrogio.
I will test the code.

Can I share it in a GitHub repository?

Regards
Alfredo Mendiola
OA4AJP

Ambro_IW2FVO

yes of course: mention Nick ( WA5BDU ), P.Talacchini and IW2FVO .
regards,
73 iw2fvo Ambrogio

Alfredo Mendiola Loyola

QSL
Thank you.
Alfredo Mendiola Loyola

On Wednesday, April 17, 2019, 11:19:07 AM GMT-5, Ambro_IW2FVO via Groups.Io <iw2fvo=yahoo.com@groups.io> wrote:

yes of course: mention Nick ( WA5BDU ), P.Talacchini and IW2FVO .
regards,
73 iw2fvo  Ambrogio

Alfredo Mendiola Loyola

Ambrogio,

Do I have to define this value:

#define IFO_FRQ 10700000ULL // = 10.7 MHz ?

If so, How Can I calculate the IFO_FRQ ?

Regards
Alfredo Mendiola
OA4AJP

Ambro_IW2FVO

IF_offset is simply the value of the Intermediate frequency ( IF ) of your receiver .
If you want to receive 432.000 MHz and your receiver IF is 21.4 MHz then your SI570 shall output 432.000 MHz - 21.4 MHz for low side injection
or it shall output 432.000 MHz+ 21.4 MHz if you use the top side injection.
If you set the IFO_FRQ=0 in the code then the SI570 will output the frequency value received through the serial link ( from the IDE monitor ) without any offset.
73, iw2fvo

Alfredo Mendiola Loyola

I got it.
Alfredo Mendiola Loyola

On Wednesday, April 17, 2019, 2:31:00 PM GMT-5, Ambro_IW2FVO via Groups.Io <iw2fvo=yahoo.com@groups.io> wrote:

IF_offset is simply the value of the Intermediate frequency ( IF ) of your receiver .
If you want to receive 432.000 MHz and your receiver IF is 21.4 MHz then your SI570 shall output 432.000 MHz - 21.4 MHz for low side injection
or it shall output 432.000 MHz+ 21.4 MHz if you use the top side injection.
If you set the IFO_FRQ=0 in the code then the SI570 will output the frequency value received through the serial link ( from the IDE monitor ) without any offset.
73, iw2fvo

Alfredo Mendiola Loyola

Ambrogio,

What is the purpose of these variables:

#define MIN_FRQ_DCO 4850000000ULL // = 4850MHz
#define MAX_FRQ_DCO 5670000000ULL // = 5670MHz

They are used in the method CalcRFREQ()

Can I remove those variables from the logic of the code?

Thank you.

73
Alfredo Mendiola
OA4AJP

Ambro IW2FVO

Alfredo,
the DCO must stay in the frequency range provided in the si570 specification....
NO, you should not remove the limits from the code.
regards,
Ambrogio

Bob V

Hi Alfredo -

I think it unlikely that the device could get anywhere near to 4850MHz
(=4.85 GHz). I suspect that is a typo.

I do note from https://ko7m.blogspot.com/2014/04/si570-programming.html
<https://ko7m.blogspot.com/2014/04/si570-programming.html>that the start up
frequency of the device is 56.320MHz, roughly a factor of ten off of this
number.

I suspect these numbers are critical but should really be 45500KHz to
56700KHz. Those would realistically reflect the frequency range of the
DCO.

73
Bob
WA2I

Jim Smith

Hi Bob/Alfredo,

Further down the KO7M link you provided he states:

"The internal DCO is constrained to 4.85 to 5.67 GHz determined by the internal crystal frequency multiplied by a reference frequency."

So not a typo, and not to be ignored.

73

Jim - G3ZQC

Ambro IW2FVO

I do suggest to read this document:
https://www.silabs.com/documents/public/data-sheets/si570.pdf
at page 14 figure 3.
I confirm that there is no errors:> the DRO must stay in the 4.8 GHZ to 5.6 Ghz frequency range.
As i told before the sketch is loaded on Arduino Nano and it is working as a VFO for my Two Meters FM receiver and for the APT ( around 137 MHz ) receiver.
The tuning information is provided to the Arduino Nano through a serial link : >> you could use the Arduino IDE Monitor to set the desired frequency.
I do really suggest to load the sketch as is, >> run it >> and then introduce the modification you need.
73, iw2fvo
ciao.

Ambro IW2FVO

for a better explanation have a look at this part of the code:

//--- First checks for N1=1 and HS_DIV between 4 & 11

i=1;

for (j = 0; j <= 5; j++)

{ f_dco = (uint64_t)Fout * (uint64_t)HS_Div_Vect[j];

if ( (f_dco >= MIN_FRQ_DCO) && (f_dco <= MAX_FRQ_DCO) )

{ found = TRUE;

N1 = 1;

HS_Div = HS_Div_Vect[j];

HS_Div_Reg = HS_Div-4; //the value to write in Si570reg must be subtracted by 4

break;

}

}
I do attach a spread sheet (if could be useful) .
73, iw2fvo, Ambrogio
North Italy

Ambro IW2FVO

Alfredo,
I do remember you that the sketch does not use any pre_computed value to generate any output frequency.
Just plug your Arduino to the Arduino IDE Monitor and command the frequency you want to have !
Of course your SI570 "type number" has to be able to generate it: >> look at the max frequency limit of your 570 .
You could have it by looking at the full part number printed on the chip.
73, iw2fvo
Ambrogio
North Italy

Alfredo Mendiola Loyola

On Fri, Apr 19, 2019 at 04:27 AM, Ambro IW2FVO wrote:

Ambrogio
Ambrogio,

I found the information about the DCO frequency range in the si570 Datasheet.
I understand how it works.

I created a repository with the Version 5 of the software at: https://github.com/oa4ajp/Si570_v5