Задиханов Радмир

Генератор радиосигналов выполнен на базе синтезатора si5351.
Для индикацмм использован двухстрочный LCD дисплей 1602. Управление генератором осуществляется
с помощью энкодера HW-040, со встроенной кнопкой.
В качестве контроллера использована плата Arduino UNO.

Генератор позволяет получать сигнал частотой от 8MHz до 160MHz.
У синтезатора Si5351 имеется три выхода, но в данном проекте используется только один.

#define CLK 4 // Логический пин на энкодере
#define DT 2 // Логический пин на энкодере
#define SW 5 // Кнопка на энкодере
#include <GyverEncoder.h>
#include <LiquidCrystal_I2C.h>
#include <si5351mcu.h>
Si5351mcu Si; // Инициализация синтезатора
LiquidCrystal_I2C lcd(0x38, 16, 2); // Инициализация дисплея
Encoder enc1(CLK, DT, SW); // Инициализация энкодера
unsigned long kHz = 145000; // Перемена для частоты
boolean sw, flag_1; // переменые
void setup() {
Serial.begin(9600);
Si.init(25000000L); // Ставим частоту процессора синтезатора
Si.correction(2392); // Коректируем радио-частоту
Si.setFreq(0, kHz * 1000); // Устанавливаем радио-частоту
Si.reset(); // Обновляем синтезатор
Si.enable(0); // Включаем синтезатор
lcd.init(); // Инициализация дисплея
lcd.setCursor(0, 0); // Выводим частоту первоначальную
lcd.print(kHz);
lcd.print("kHz");
pinMode(CLK, INPUT_PULLUP); // Открываем пины энкодера
pinMode(DT, INPUT_PULLUP);
enc1.setType(TYPE1);
}
void loop() {
enc1.tick(); // Считываем энкодер
sw = enc1.isClick();
if (sw) flag_1 = !flag_1; // Меняем шаг по нажатию кнопки...
if (flag_1){
lcd.setCursor(0,1);
lcd.print("step 50 "); // на 50kHz
}
else{
lcd.setCursor(0,1);
lcd.print("step 250 "); // на 250kHz
}
if (!flag_1) if (enc1.isRight() || enc1.isFastR() )kHz += 250 ; // при повороте изменяем частоту на 250 больше
if (!flag_1) if (enc1.isLeft() || enc1.isFastL() ) kHz -= 250; // при повороте изменяем частоту на 250 меньше
if (flag_1) if (enc1.isRight() || enc1.isFastR() )kHz += 50 ; // при повороте изменяем частоту на 50 больше
if (flag_1) if (enc1.isLeft() || enc1.isFastL() ) kHz -= 50; // при повороте изменяем частоту на 50 меньше
if (enc1.isTurn()) { // Выводим и изменяем её частоту
lcd.setCursor(0, 0);
lcd.print(kHz);
lcd.print("kHz");
Si.setFreq(0, kHz * 1000);
}
}
Корпус для генератора решили не разрабатывать, воспользовавшись проверенным
решением для "учебных макетов", разместив платы на стойках между двумя
основаниями из пластика.