Exploring the potential of SI5351 module in electronic projects
In this tutorial, you will dive into the depths of this amazing device and discover its unlimited potential in generating signals and frequencies.
Components and supplies
1
Arduino Pro Micro
Apps and platforms
1
rogerbit.
Project description
Code
Source code
c
source code
1#include <Keypad.h> 2#include "si5351.h" 3#include "Wire.h" 4#include "U8g2lib.h"//Librería para el control del display oled 5U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); 6Si5351 si5351; 7 float f1 = 0ULL; 8 float f2 = 0ULL; 9String freq = "SETEA FREC"; 10//String botonSet = ""; 11const byte ROWS = 4; //cuatro filas 12const byte COLS = 4; //cuatro columnas 13//definimos los caracteres del teclado 14char hexaKeys[ROWS][COLS] = { 15 {'1','2','3','4'}, 16 {'5','6','7','8'}, 17 {'9','0','A','B'}, 18 {'C','D','E','F'} 19}; 20byte rowPins[ROWS] = {4, 6, 7, 8}; //conectarse a las salidas de pines de fila del teclado 21byte colPins[COLS] = {9, 10, 14, 15}; //conectarse a las salidas de pines de la columna del teclado 22 23//inicializar una instancia de la clase NewKeypad 24Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 25 26void setup(){ 27 u8g2.begin();//Inicializamos el display oled 28 bool i2c_found; 29 // Iniciar el módulo Si5351 30 i2c_found = si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0); 31 oled();//Llamamos a la función oled para mostra datos en el display 32} 33 34void loop(){ 35 char customKey = customKeypad.getKey();//Obtenemos la tecla que precionamos 36if (customKey == '1'){ 37 f1= 358205600ULL;//Frecuencia 38f2 = f1 - 87400ULL;//Corrección de frecuencia 39// Serial.println(" Herz"); 40 si5351.set_freq(f2, SI5351_CLK0); 41freq = f1; 42oled();//Llama a la función oled para mostrar la frecuencia en el display 43 } 44if (customKey == '2'){ 45f1= 14450000000ULL;//Frecuencia 46f2 = f1 - 1896000ULL;//Corrección de frecuencia 47 si5351.set_freq(f2, SI5351_CLK0); 48freq = f1; 49oled();//Llama a la función oled para mostrar la frecuencia en el display 50 } 51 52 if (customKey == '3'){ 53f1= 14500000000ULL;//Frecuencia 54f2 = f1 - 1896000ULL;//Corrección de frecuencia 55 si5351.set_freq(f2, SI5351_CLK0); 56freq = f1; 57oled();//Llama a la función oled para mostrar la frecuencia en el display 58 } 59if (customKey == '4'){ 60 f1= 14650000000ULL;//Frecuencia 61f2 = f1 - 1898000ULL;//Corrección 62si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 63freq = f1; 64oled();//Llama a la función oled para mostrar la frecuencia en el display 65} 66if (customKey == '5'){ 67 f1= 535400000ULL;//Frecuencia 68f2 = f1 - 109000ULL;//Corrección 69si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 70freq = f1; 71oled();//Llama a la función oled para mostrar la frecuencia en el display 72} 73if (customKey == '6'){ 74 f1= 710000000ULL;//Frecuencia 75f2 = f1 - 138000ULL;//Corrección 76si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 77freq = f1; 78oled();//Llama a la función oled para mostrar la frecuencia en el display 79} 80if (customKey == '7'){ 81 f1= 1013000000ULL;//Frecuencia 82f2 = f1 - 169000ULL;//Corrección 83si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 84freq = f1; 85oled();//Llama a la función oled para mostrar la frecuencia en el display 86} 87if (customKey == '8'){ 88 f1= 1410100000ULL;//Frecuencia 89f2 = f1 - 218000ULL;//Corrección 90si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 91freq = f1; 92oled();//Llama a la función oled para mostrar la frecuencia en el display 93} 94if (customKey == '9'){ 95 f1= 1810500000ULL;//Frecuencia 96f2 = f1 - 276000ULL;//Corrección 97si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 98freq = f1; 99oled();//Llama a la función oled para mostrar la frecuencia en el display 100} 101if (customKey == '0'){ 102 f1= 2120000000ULL;//Frecuencia 103f2 = f1 - 220000ULL;//Corrección 104si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 105freq = f1; 106oled();//Llama a la función oled para mostrar la frecuencia en el display 107} 108if (customKey == 'A'){ 109 f1= 2492000000ULL;//Frecuencia 110f2 = f1 - 351000ULL;//Corrección 111si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 112freq = f1; 113oled();//Llama a la función oled para mostrar la frecuencia en el display 114} 115if (customKey == 'B'){ 116 f1= 2820000000ULL;//Frecuencia 117f2 = f1 - 395000ULL;//Corrección 118si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 119freq = f1; 120oled();//Llama a la función oled para mostrar la frecuencia en el display 121} 122if (customKey == 'C'){ 123 f1= 2960000000ULL;//Frecuencia 124f2 = f1 - 412000ULL;//Corrección 125si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 126freq = f1; 127//botonSet = "SET13"; 128oled();//Llama a la función oled para mostrar la frecuencia en el display 129} 130if (customKey == 'D'){ 131 f1= 5000000000ULL;//Frecuencia 132f2 = f1 - 668000ULL;//Corrección 133si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 134freq = f1; 135//botonSet = "SET14"; 136oled();//Llama a la función oled para mostrar la frecuencia en el display 137} 138if (customKey == 'E'){ 139 f1= 14400000000ULL;//Frecuencia 140f2 = f1 - 1858000ULL;//Corrección 141si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 142freq = f1; 143//botonSet = "SET15"; 144oled();//Llama a la función oled para mostrar la frecuencia en el display 145} 146if (customKey == 'F'){ 147 f1= 14420000000ULL;//Frecuencia 148f2 = f1 - 1862000ULL;//Corrección 149si5351.set_freq(f2, SI5351_CLK0);//Seteo de la frecuencia en el CLOCK0 150freq = f1; 151oled();//Llama a la función oled para mostrar la frecuencia en el display 152} 153} 154 void oled() { 155 //Imprimimos en pantalla 156 u8g2.clearBuffer(); // borra la memoria interna 157 u8g2.setFont(u8g2_font_ncenB08_tr); // elige una fuente 158 u8g2.drawStr(0,10,"FRECUENCIA CLOCK0: "); 159 u8g2.drawStr(0,30,freq.c_str()); 160 u8g2.drawStr(80,30," Herz"); // escribir "Herz" en la memoria interna 161 freq = f1 / 100000000ULL; 162 u8g2.drawStr(0,50,freq.c_str()); 163 u8g2.drawStr(30,50," MHz"); // escribir "MHz" en la memoria interna 164 u8g2.sendBuffer(); // transferir la memoria interna a la pantalla 165 }
Comments
Only logged in users can leave comments