Coder Social home page Coder Social logo

si5351's Introduction

It is a multipurpose signal generator controlled by Arduino. This project uses the SI5351 from Silicon Labs. The Arduino sketch is configured to control the SI5351 with three channels from 32.768KHz to 160MHz and steps from 1Hz to 1MHz.

This project can be freely distributed using the MIT Free Software model.

Copyright (c) 2020 Ricardo Lima Caratti.

Contact: [email protected].

Be a member of Facebook group DSP receivers for hobbyists

Content

  1. Preface
  2. Schematic
  3. Photos and Interface
  4. Source Code
  5. References

Preface

The Si5351 is an I2C configurable clock generator that is very appropriate for many electronic projects. It is also a great device for replacing crystal oscillators. This project uses a version of SI5351 that has three signal outputs that can vary from 8 KHz to 160 MHz. These outputs, can give you three distinct frequencies running at the same time. A great feature of the Si5351A is the possibility of using it with a microcontroller or platform like Arduino, PIC family and others. This small project is about a multipurpose signal generator controlled by Arduino or similar. For more information about SI5351A see Si5351A/B/C-B I2C-PROGRAMMABLE ANY-FREQUENCY CMOS CLOCKGENERATOR + VCXO.

Despite the square wave form generated by the Si5351 device, it is very appropriated for many transmitters and receivers applications. This project has been very useful for me during Arduino Library development for the DSP receivers SI473X, SI4844, AKC695X, KT0915 and otehrs. With this signal generator, I could test the external oscillator feature of these devices. Also, I used it to build a small shortwave transmitter to test the HF reception during the bad propagation and bad reception conditions due to my current location.

See also:

  1. PU2CLR Si4735 Library for Arduino. This library was built based on โ€œSi47XX PROGRAMMING GUIDE; AN332โ€ and it has support to FM, AM and SSB modes (LW, MW and SW). It also can be used on all members of the SI47XX family respecting, of course, the features available for each IC version;
  2. PU2CLR SI4844 Arduino Library. This is an Arduino library for the SI4844, BROADCAST ANALOG TUNING DIGITAL DISPLAY AM/FM/SW RADIO RECEIVER, IC from Silicon Labs. It is available on Arduino IDE. This library is intended to provide an easier interface for controlling the SI4844.
  3. PU2CLR AKC695X Arduino Library. The AKC695X is a family of IC DSP receiver from AKC technology. The AKC6955 and AKC6959sx support AM and FM modes. On AM mode the AKC6955 and AKC6959sx work on LW, MW and SW. On FM mode they work from 64MHz to 222MHz.
  4. PU2CLR KT0915 Arduino Library. The KT0915 is a full band AM (LW, MW and SW) and FM DSP receiver that can provide you a easy way to build a high quality radio with low cost.
  5. PU2CLR RDA5807 Arduino Library. The RDA5807 is a FM DSP integrated circuit receiver (50 to 115MHz) with low noise amplifier support. This device requires very few external components if compared with other similar devices. It also supports RDS/RBDS functionalities, direct auto gain control (AGC) and real time adaptive noise cancellation function.
  6. PU2CLR SI470X Arduino Library. It is a Silicon Labs device family that integrates the complete functionalities for FM receivers, including RDS (Si4703).
  7. Small Shortwave transmitter. This project is about a shortwave trasmitter from 3 MHz to 30 MHz. It uses the SI5351 oscillator from Silicon Labs controlled by Arduino. Also, you can use it with a crystal oscillator. In this case, you will not need the SI5351 devive and Arduino.
  8. Simple BFO with si5351 controlled by Arduino. This small project is about a BFO that you can control the output of the Si5351A by using the Arduino Micro (Atmega32u4). This BFO ocilates from 452KHz to 458KHz. However, you can change this range for other between 8Kz to 160MHz.
  9. VFO and BFO using Arduino with Si5351 controlled by SmartPhone. This project implements a VFO and BFO using an Arduino with Si5351 signal generator. You can controll the VFO using an encoder and also a SmartPhone via a mobile application developed here for this purpose.

More Arduino Projects by author

  • Multipurpose signal generator with SI5351. It is a multipurpose signal generator controlled by Arduino. This project uses the SI5351 from Silicon Labs. The Arduino sketch is configured to control the SI5351 with three channels from 32.768KHz to 160MHz and steps from 1Hz to 1MHz.
  • Shortwave Arduino Transmiter. This project is about a shortwave transmitter from 3 MHz to 30 MHz. It uses the SI5351 oscillator from Silicon Labs controlled by Arduino. Also, you can use it with a crystal oscillator. In this case, you will not need the SI5351 device and Arduino.
  • Android and iOS Bluetooth Remote Control for PU2CLR Arduino Library DSP receivers. This project is an extension of the Arduino library projects for: SI4735; AKC6959 and KT0915. It is a simple example that shows a way to use your smartphone as a remote control via Bluetooth. In order to follow the steps presented here, I am assuming that you have some knowledge in development for mobile devices. Also, you will need to be familiar with the Javascript programming language. The development environment used by this project is the Apache Cordova. Cordova is a open-source mobile development framework that allows you to develop cross-platform applications. That means you can code once and deploy the application in many system, including iOS and Android. Cordova provides an easy way to develop for iOS and Android.
  • Band Pass Filter controlled by Arduino. It is a HF band pass filter controlled by Arduino. It is designed for HF receivers. With this project, you can use a set of up to four HF bandpass filters that can be selected by Arduino. To do that you will need just two digital Arduino pins.

There is a Facebook group called Si47XX for Radio Experimenters where the purpose is exchanging experiences with projects based on Silicon Labs SI47XX IC family. You will be welcome to the group Si47XX for Radio Experimenters. You can also be a member of group.io SI47XX for hobbyists

Arduino Source Code

The Arduino sketch can be found on source folder - https://github.com/pu2clr/SI5351/tree/master/source. The software is configured to control the SI5351 from 32.768KHz to 160MHz and steps from 1Hz to 1MHz.

For SI5351 control, the Arduino sketch uses the Etherkit/si5351 Arduino library from Jason Milldrum;

For encoder control, the Arduino sketch uses the Rotary Encoder Class implementation from Ben Buxton (the source code is included together with this sketch)

See source folder for more detail.

Schematic

Schematic

Photos and Interface

The user interface of this generator consists of three push buttons and an encoder. One of that push buttons comes with the encoder device.

Pressing the encoder push button, you can select the current control (Step, Favorite frequencies or output clock). By pressing de left or right push buttons, you can select the parameter you want for each kind of control. The display will show you the current status of the signal generator.

The photos below show the multipurpose signal generator controlled by Arduino. This project uses an Arduino Nano. However, you can use any Arduino board. In this case, see the pinout of your Arduino.

Current output clock is CLK0; the current Step is 10Hz; and current frequency is 8000.010 KHz

Photo 01

The current control is output clock (select the output you want to setup by pressing the left or right push buttons); current clock is CLK2; current frequency is 32.768 KHz; and current step is 10 Hz.

Photo 02

The current frequency on output CLK2 is 28000 KHz (28MHz); the current control is Step (select the step you want by pressing left or right push buttons); in this case, the current step is 50 KHz.

Photo 03

The current control is Favorite (select the favorite frequency you want for the current channel by pressing the left or right push buttons); the current step is 1 KHz; and current frequency is 16MHz.

Photo 04

MIT License

Copyright (c) 2019 Ricardo Lima Caratti

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE ARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

References

si5351's People

Contributors

pu2clr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

si5351's Issues

error compiling "si5351_signal_generator2.ino"

I'm using Arduino 1.8.15.
In the "si5351wire.cpp" section I get an error when compiling "si5351_signal_generator2.ino"
.......
.......
Si5351wire::Si5351wire(uint8_t i2c_addr, uint8_t i2c_sda, uint8_t i2c_scl)
{
i2c_bus_addr = i2c_addr;
xtal_freq[0] = SI5351wire_XTAL_FREQ;
Wire.begin(i2c_sda, i2c_scl); <------- in this line a get "RED LINE"
......
......
......

Arduino: 1.8.15 (Windows 10), Board: "Arduino Uno"

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351wire.cpp: In constructor 'Si5351wire::Si5351wire(uint8_t, uint8_t, uint8_t)':

si5351wire.cpp:40:29: error: no matching function for call to 'TwoWire::begin(uint8_t&, uint8_t&)'

Wire.begin(i2c_sda, i2c_scl);

                         ^

In file included from D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351wire.cpp:28:0:

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:53:10: note: candidate: void TwoWire::begin()

 void begin();

      ^~~~~

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:53:10: note: candidate expects 0 arguments, 2 provided

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:54:10: note: candidate: void TwoWire::begin(uint8_t)

 void begin(uint8_t);

      ^~~~~

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:54:10: note: candidate expects 1 argument, 2 provided

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:55:10: note: candidate: void TwoWire::begin(int)

 void begin(int);

      ^~~~~

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:55:10: note: candidate expects 1 argument, 2 provided

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h: In member function 'uint8_t Si5351wire::si5351wire_read(uint8_t)':

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:69:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int, int)

 uint8_t requestFrom(int, int, int);

         ^~~~~~~~~~~

C:\Users\Kalila\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\libraries\Wire\src/Wire.h:66:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t, uint8_t)

 uint8_t requestFrom(uint8_t, uint8_t, uint8_t);

         ^~~~~~~~~~~

si5351_signal_generator2:116:1: error: 'Si5351' does not name a type; did you mean 'Si5351wire'?

Si5351 si5351;

^~~~~~

Si5351wire

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino: In function 'void setup()':

si5351_signal_generator2:159:3: error: 'si5351' was not declared in this scope

si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);

^~~~~~

si5351_signal_generator2:159:15: error: 'SI5351_CRYSTAL_LOAD_8PF' was not declared in this scope

si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);

           ^~~~~~~~~~~~~~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:159:15: note: suggested alternative: 'SI5351wire_CRYSTAL_LOAD_8PF'

si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);

           ^~~~~~~~~~~~~~~~~~~~~~~

           SI5351wire_CRYSTAL_LOAD_8PF

si5351_signal_generator2:161:44: error: 'SI5351_PLL_INPUT_XO' was not declared in this scope

si5351.set_correction(CORRECTION_FACTOR, SI5351_PLL_INPUT_XO);

                                        ^~~~~~~~~~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:161:44: note: suggested alternative: 'SI5351wire_PLL_INPUT_XO'

si5351.set_correction(CORRECTION_FACTOR, SI5351_PLL_INPUT_XO);

                                        ^~~~~~~~~~~~~~~~~~~

                                        SI5351wire_PLL_INPUT_XO

si5351_signal_generator2:162:18: error: 'SI5351_PLL_FIXED' was not declared in this scope

si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);

              ^~~~~~~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:162:18: note: suggested alternative: 'SI5351wire_PLL_FIXED'

si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);

              ^~~~~~~~~~~~~~~~

              SI5351wire_PLL_FIXED

si5351_signal_generator2:162:36: error: 'SI5351_PLLA' was not declared in this scope

si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);

                                ^~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:162:36: note: suggested alternative: 'SI5351wire_PLLA'

si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);

                                ^~~~~~~~~~~

                                SI5351wire_PLLA

si5351_signal_generator2:163:29: error: 'si5351_clock' was not declared in this scope

si5351.set_freq(vfoFreq, (si5351_clock) currentClock); // Start CLK0 (VFO)

                         ^~~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:163:29: note: suggested alternative: 'si5351wire_clock'

si5351.set_freq(vfoFreq, (si5351_clock) currentClock); // Start CLK0 (VFO)

                         ^~~~~~~~~~~~

                         si5351wire_clock

si5351_signal_generator2:166:24: error: 'SI5351_CLK1' was not declared in this scope

si5351.output_enable(SI5351_CLK1, 0);

                    ^~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:166:24: note: suggested alternative: 'SI5351wire_CLK1'

si5351.output_enable(SI5351_CLK1, 0);

                    ^~~~~~~~~~~

                    SI5351wire_CLK1

si5351_signal_generator2:167:24: error: 'SI5351_CLK2' was not declared in this scope

si5351.output_enable(SI5351_CLK2, 0);

                    ^~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:167:24: note: suggested alternative: 'SI5351wire_CLK2'

si5351.output_enable(SI5351_CLK2, 0);

                    ^~~~~~~~~~~

                    SI5351wire_CLK2

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino: In function 'void loop()':

si5351_signal_generator2:300:5: error: 'si5351' was not declared in this scope

 si5351.set_freq(vfoFreq, (si5351_clock) currentClock);

 ^~~~~~

si5351_signal_generator2:300:31: error: 'si5351_clock' was not declared in this scope

 si5351.set_freq(vfoFreq, (si5351_clock) currentClock);

                           ^~~~~~~~~~~~

D:\hobi\RF Signal Generator\Multipurpose Sigen pu2clr\SI5351-master\source\si5351_signal_generator2\si5351_signal_generator2.ino:300:31: note: suggested alternative: 'si5351wire_clock'

 si5351.set_freq(vfoFreq, (si5351_clock) currentClock);

                           ^~~~~~~~~~~~

                           si5351wire_clock

exit status 1

no matching function for call to 'TwoWire::begin(uint8_t&, uint8_t&)'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.