Генератор радиосигналов выполнен на базе синтезатора 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); } }
Корпус для генератора решили не разрабатывать, воспользовавшись проверенным
решением для "учебных макетов", разместив платы на стойках между двумя
основаниями из пластика.