Генератор сигналов на Si5351A

Автор R9AL, Нояб. 21, 2023, 09:54

« назад - далее »

R9AL


Doloto

Здравия! Можно ли добавить количество шагов перестройки генератора, если да, то какие изменения внести в скетч?

R9AL

По-моему нет, 50 кГц минимальный шаг

Doloto

Цитата: R9AL от Июль 12, 2024, 07:01  По-моему нет, 50 кГц минимальный шаг
А как тогда добавить в скетч, например, 100КГц, 200КГц, 500КГц или 1МГц? Какие строки необходимо изменить?

R9AL

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()) { // Выводим и изменяем её частоту

Doloto

Да, это понятно. А как например, к этим имеющимся шагам, добавить третий шаг, например 500КГц?

R9AL

например так:

#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; // переменые
int flag_1 = 0;

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 += 1; // Меняем шаг по нажатию кнопки...
  if (flag_1 == 0) {
    lcd.setCursor(0, 1);
    lcd.print("step 50   "); // на 50kHz
  }
  else if (flag_1 == 1) {
  lcd.setCursor(0, 1);
    lcd.print("step 250   "); // на 250kHz
  }
  else if (flag_1 == 2) {
  lcd.setCursor(0, 1);
    lcd.print("step 500   "); // на 500kHz
  }
  if (flag_1 == 0 and (enc1.isRight() || enc1.isFastR()))kHz += 50 ; // при повороте изменяем частоту на 50 больше
  if (flag_1 == 0  and (enc1.isLeft() || enc1.isFastL())) kHz -= 50; // при повороте изменяем частоту на 50 меньше
  if (flag_1 == 1 and (enc1.isRight() || enc1.isFastR()))kHz += 250 ; // при повороте изменяем частоту на 250 больше
  if (flag_1 == 1 and (enc1.isLeft() || enc1.isFastL())) kHz -= 250; // при повороте изменяем частоту на 250 меньше
  if (flag_1 == 2 and (enc1.isRight() || enc1.isFastR()))kHz += 500 ; // при повороте изменяем частоту на 500 больше
  if (flag_1 == 2  and (enc1.isLeft() || enc1.isFastL())) kHz -= 500; // при повороте изменяем частоту на 500 меньше
  if (enc1.isTurn()) { // Выводим и изменяем её частоту
    lcd.setCursor(0, 0);
    lcd.print(kHz);
    lcd.print("kHz");
    Si.setFreq(0, kHz * 1000);
  }
}

Doloto

Здравия! Всё понятно. Благодарю за отзывчивость. Будут вопросы, отпишусь. Удачи!