Amateur Radio Station R9AL Задиханов Радмир

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

В качестве контроллера использована плата Arduino UNO.


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




LCD 1602 с I2C модулем имеет 2 строки по 16 символов. Имеет зеленую подсветку, которая придает синему экрану лаймовый цвет. В верхней строчке указывается частота в kHz. Снизу отображается шаг изменения частоты.

Энкодер снабжен кнопкой, которая срабатывает при нажатии на вал вращения. Общение с модулями происходит за счет библиотек: “GyverEncoder.h”; ”LiquidCrystal_I2C.h”; ”si5351mcu.h”;

#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);
  }
}


Сначала инициализируем дисплей, синтезатор и энкодер. Запускаем синтезатор и выводим значение на дисплей. Начинаем опрос энкодера и при изменении угла поворота изменяем частоту с шагом указанном на дисплее, в лево на уменьшение, а в право на увеличение. При нажатии кнопки шаг меняется, либо 250кHz, либо 50kHz.

Файлы:

Тема форума: https://forum.msevm.ru/index.php?topic=43


29.02.2024

Стригун Иван

      Корпус для генератора решили не разрабатывать, воспользовавшись проверенным решением для "учебных макетов", разместив платы на стойках между двумя основаниями из пластика.







Copyright © R9AL 2023 Все права защищены
Рейтинг@Mail.ru Яндекс цитирования