In this tutorial, you will dive into the depths of this amazing device and discover its limitless potential in signal and frequency generation.
Join me as we explore all the functions and features of the SI5351 module, from its ability to generate multiple frequencies with amazing precision to its versatility in applications such as frequency synthesizers, software-defined radios, and communication projects.
Whether you are a beginner or a subject matter expert, this comprehensive guide will provide you with the knowledge to master the SI5351 module. You will learn how to configure it, control it through an arduino and take full advantage of its capabilities.
It doesn’t matter if you are interested in electronics, hobby radio or just exploring new technologies, this video will show you how the SI5351 module can supercharge your projects and take your creativity to the next level.
Get ready to immerse yourself in an exciting journey of discovery and learning. Don’t miss this opportunity to unlock the full potential of the SI5351 module!
Electronic components
Arduino Pro Micro
The Pro Micro is similar to the arduino Mini Pro except with an ATMEGA32U4 on board. This chip makes a big difference since it can also be used as a human interface device. The USB transceiver inside the 32U4 allows us to add USB connectivity on board and do away with bulky external USB interface. This little board does all the Arduino functions you are familiar with: 4 channel 10-bit ADC, 5 PWM pins, 12 DIOs, as well as hardware serial Rx and Tx connections. Running at 16 MHz and 5 V. This little microcontroller can go anywhere. There is a voltage regulator on board so that it can accept a voltage of up to 12V.
- 12 digital I/O pins (5 PWM)
- 4 analog input pins (10 bit each)
- Input voltage 5-12V (It has an internal regulator)
- Output voltage: 5v
- Maximum total output current 150mA
- ATMega 32U4 running at 5V/16MHz
- Supported under Arduino IDE v1.0.1
- Micro-USB connector for programming
- 4 pines x ADC de 10 bits
- Rx and Tx Hardware Serial Connections
- 12 digital inputs/outputs of which 5 can be PWM.
- Dimensions: 3.31cm X 1.78cm
SI5351 module
PinOut
- VCC: Power pin. It must receive a 3.3V or 5V power supply, depending on the module specification.
- GND: Ground pin. It must be connected to the ground terminal of the system or power supply.
- SDA: Bidirectional data line for I2C (Inter-Integrated Circuit) communication. This pin is used to send and receive data to and from the SI5351 module.
- SCL: Clock line for I2C communication. This pin provides the clock pulse to synchronize data transmission between the master device and the SI5351 module.
- CLK0, CLK1, CLK2: These pins are configurable clock signal outputs from the SI5351 module. You can use them to generate different frequencies and waveforms according to your needs.
- MS0, MS1, MS2: These pins are register bank select pins for the SI5351 module configuration. They set the register bank that the I2C bus accesses.
The Si5351 is a Programmable Frequency Clock (PLL) generator produced by Silicon Labs. It is widely used in electronic projects and Radio Frequency (RF) applications, such as building oscillators, frequency synthesizers, software-defined radios (SDR) and other projects that require a highly accurate and stable signal source.
The Si5351 has the ability to generate three independent clock signals with frequencies ranging from a few kilohertz to a few hundred megahertz, making it suitable for a wide range of applications. In addition, it is programmable through an I2C communication interface, allowing designers to easily adjust the frequency and phase of the output signal accurately and quickly.
Clock Generator Si5351a – 8 Khz to 160 Mhz + 3 SMA female connectors
This module has a precision 25 MHz crystal reference and an internal PLL and dividers, so it can output almost any frequency from <8 KHz to over 160 MHz. The Si5351A Clock Generator is an I2C clock generator. It uses the onboard precision clock to control multiple PLLs and clock dividers using I2C instructions. By configuring the PLL and dividers you can create precise and arbitrary frequencies. There are three independent outputs, and each one can have a different frequency. Outputs are 3Vpp, either via a breadboard compatible header or for RF work, an optional SMA connector. We put this handy little chip on its own PCB, with a 3.3V LDO regulator so it can be powered from 3-5VDC.
SMA Female Jack Connector To PCB Straight RF Adapter
– Series: SMA
– Gender: Female
– Type: outer screw inner hole
– Impedance: 50 Ohm
– Frequency: 0~6GHz
– Connector material: copper
– Length: 13mm
– Stitch length: 4mm
Applications
- HDTV, DVD/Blu-ray, cable box
- Audio/video equipment, games
- Printers, scanners, projectors
- portable instrumentation
- residential gateways
- networks/communication
- servers, storage
- XO Replacement
female pins
Display oled sh1106
It is a 128×64 dot monochrome OLED screen module with I2C interface. It has several advantages compared to LCD screens, and we can highlight its high brightness, very good contrast, a wider viewing angle, and low consumption. of energy. It is compatible with Arduino Rasberry Pi and PIC microcontrollers among others. It works with logic levels from 3.3V to 5V and has a viewing angle greater than 160 degrees. Screen Size is 1.3 inches. It is powered with a voltage of 3.3V to 5V. It can be used in applications such as smart watches, MP3, thermometers, instruments, and various projects, etc.
Characteristics
- Interface: I2C(3.3V / 5V logic level)
- Resolution: 128 x 64
- Angle of view: >160 degree
- Display color: Blue
- Display size: 1.3 inch
- Driver IC: SH1106
- Power supply: DC 3.3V~5V
- Operating temperature: -20~70’C
- Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.
17 buttons
A socket for arduino pro micro
electronic diagram
PCB
Source code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
#include <Keypad.h> #include "si5351.h" #include "Wire.h" #include "U8g2lib.h"//Librería para el control del display oled U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); Si5351 si5351; float f1 = 0ULL; float f2 = 0ULL; String freq = "SETEA FREC"; //String botonSet = ""; const byte ROWS = 4; //cuatro filas const byte COLS = 4; //cuatro columnas //definimos los caracteres del teclado char hexaKeys[ROWS][COLS] = { {'1','2','3','4'}, {'5','6','7','8'}, {'9','0','A','B'}, {'C','D','E','F'} }; byte rowPins[ROWS] = {4, 6, 7, 8}; //conectarse a las salidas de pines de fila del teclado byte colPins[COLS] = {9, 10, 14, 15}; //conectarse a las salidas de pines de la columna del teclado //inicializar una instancia de la clase NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ u8g2.begin();//Inicializamos el display oled bool i2c_found; // Iniciar el módulo Si5351 i2c_found = si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0); oled();//Llamamos a la función oled para mostra datos en el display } void loop(){ char customKey = customKeypad.getKey();//Obtenemos la tecla que precionamos if (customKey == '1'){ f1= 358205600ULL;//Frecuencia f2 = f1 - 87400ULL;//Corrección de frecuencia // Serial.println(" Herz"); si5351.set_freq(f2, SI5351_CLK0); freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '2'){ f1= 14450000000ULL;//Frecuencia f2 = f1 - 1896000ULL;//Corrección de frecuencia si5351.set_freq(f2, SI5351_CLK0); freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '3'){ f1= 14500000000ULL;//Frecuencia f2 = f1 - 1896000ULL;//Corrección de frecuencia si5351.set_freq(f2, SI5351_CLK0); freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '4'){ f1= 14650000000ULL;//Frecuencia f2 = f1 - 1898000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '5'){ f1= 535400000ULL;//Frecuencia f2 = f1 - 109000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '6'){ f1= 710000000ULL;//Frecuencia f2 = f1 - 138000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '7'){ f1= 1013000000ULL;//Frecuencia f2 = f1 - 169000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '8'){ f1= 1410100000ULL;//Frecuencia f2 = f1 - 218000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '9'){ f1= 1810500000ULL;//Frecuencia f2 = f1 - 276000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == '0'){ f1= 2120000000ULL;//Frecuencia f2 = f1 - 220000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == 'A'){ f1= 2492000000ULL;//Frecuencia f2 = f1 - 351000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == 'B'){ f1= 2820000000ULL;//Frecuencia f2 = f1 - 395000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == 'C'){ f1= 2960000000ULL;//Frecuencia f2 = f1 - 412000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; //botonSet = "SET13"; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == 'D'){ f1= 5000000000ULL;//Frecuencia f2 = f1 - 668000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; //botonSet = "SET14"; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == 'E'){ f1= 14400000000ULL;//Frecuencia f2 = f1 - 1858000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; //botonSet = "SET15"; oled();//Llama a la función oled para mostrar la frecuencia en el display } if (customKey == 'F'){ f1= 14420000000ULL;//Frecuencia f2 = f1 - 1862000ULL;//Corrección si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 freq = f1; oled();//Llama a la función oled para mostrar la frecuencia en el display } } void oled() { //Imprimimos en pantalla u8g2.clearBuffer(); // borra la memoria interna u8g2.setFont(u8g2_font_ncenB08_tr); // elige una fuente u8g2.drawStr(0,10,"FRECUENCIA CLOCK0: "); u8g2.drawStr(0,30,freq.c_str()); u8g2.drawStr(80,30," Herz"); // escribir "Herz" en la memoria interna freq = f1 / 100000000ULL; u8g2.drawStr(0,50,freq.c_str()); u8g2.drawStr(30,50," MHz"); // escribir "MHz" en la memoria interna u8g2.sendBuffer(); // transferir la memoria interna a la pantalla } |
RECOMMENDED PROJECT