Налаживание
Контур 455кГц настраиваем по максимуму громкости, ВЧ-контур - по максимуму громкости слабых станций. Я использовал для калибровки синтезатора и налаживания приёмника самодельный частотомер на PIC, и генератор сигналов на Si5351a.
Программная часть
Скетч написан на основе скетча Rob Engberts, который написан на основе скетча Jason Mildrun. Отладочная плата - Ардуино Нано с МК ATMega 328p. Мной написаны все функции, связанные со сканированием, чтением/записью каналов, спящий режим, добавлены шаги настройки 5 КГц и 25 КГц, убраны некоторые ненужные функции.
Сервисные функции
200 каналов в EEPROM. (Четыре байта отводится на значение частоты канала. Первый канал начинается с 24 байта).
Функция сканирования частоты и каналов. Выбор крайних пределов сканирования частоты и каналов.
Шаги настройки: 100Hz, 1kHz , 5 kHz, 10 kHz, 25 kHz, 100 kHz, 1 MHz.
Есть функция SLEEP, переводящая в спящий режим микроконтроллер, совместно с выключением дисплея и блокировкой настройки энкодером и, в результате, несколько меньшим потреблением тока всего устройства.
При включении приёмника, мы всегда попадаем на частоту 150 МГц и на шаг настройки: 25 кГц. (Постоянная перезапись vfo_t и radix в EEPROM из LOOP() – убрана, чтобы лишний раз не перезаписывать память.). Пределы сканирования после включения – максимальные (120-180 МГц, каналы: 1-200).
Программа написана на принимающие частоты 120-180 МГц, на случай изготовления полосовых фильтров с pin-диодами. (Так что с данной схемой по краям диапазона мы принимаем лишь зеркальный канал)
Выходы Si5351a CLK1, CLK2 – отключены, но один из них можно настроить на 10.245 МГц и использовать вместо кварца, но я не стал это делать, чтобы не тянуть длинные провода от синтезатора.
Уровень сигнала на CLK0 - максимальный, 8 mA.
При первом запуске, память EEPROM неиспользуемых каналов содержит числа, неподходящие для Si5351a. Может, и ничего страшного. Но для корректных значений я осуществил запись с 1 по 200 каналы значения частоты 145МГц. Для этого нужно раскомментировать строки в setup() под строкой ////WRITE to EEPROM EMPTY 1-200 CHANNELS//// до строки ///// !WRITE to EEPROM EMPTY 1-200 CHANNELS//// и один раз произвести запись в память, загрузив скетч в плату. Затем, снова закомментировать эти строки. И ещё раз загрузить скетч. (Если скетч будет ругаться насчёт нехватки места, придётся временно закомментировать что-нибудь ненужное, например вывод на экран названий диапазонов и т.п.)
Калибровка Si5351a. Калибровка производится с помощью нажатия кнопки Calibration на pin 5 Ардуино. Далее сравниваются показания синтезатора с эталонным частотомером (Частотомер через ёмкость подсоединяем на clk0). Затем, энкодером выставляется частота, с учётом этой разности и нажимается кнопка Calibration.
Проблемы с set_correction вероятно могут быть, если вы будете использовать другую библиотеку si5351. К сожалению, не получается выложить сюда библиотеку Si5351 с заголовочником, которую я использовал в проекте.
Также, во время калибровки, нужно закомментировать две строки с комментариями «!!comment, when calibrate!!» и раскомментировать две строки с: «!!no comment, when calibrate!!». Это макросы с границами диапазона в самом начале скетча и показания «без промежуточной частоты» в void display_frequency(). После калибровки комментарии восстанавливаем, как они были.
Описание кнопок и сервисных функций:
1. Кнопка Read: Заходим в Channels Read mode. Энкодером – меняем каналы. Кнопка Select – выбираем попеременно нижний и верхний пределы сканирования каналов. Выбирается тот канал, который установлен энкодером. (Кнопкой лишь заносим это значение в ОЗУ). Кнопка Run – начать/остановить сканирование каналов. При сканировании, задержка на каждом канале – четыре секунды. Кнопкой энкодера -Encoder Button – входим в режим SLEEP. Светится SLEEP и через секунду гаснет экран. Теперь ATMega - в режиме STANDBY. Энкодер не меняет частоту и каналы. Кнопки - не работают. Выход из режима SLEEP осуществляется последовательно двумя шагами: 1) Перемещаем энкодер в любую сторону – прерыванием выходим из SLEEP. 2) Нажимаем Encoder Button – включаем дисплей и снова появляется возможность настройки каналов энкодером.
2. Кнопка Write: Заходим в Channels Write Mode. Это режим готовности к записи. Светится WRT. (Также в этом режиме не будет слышна помеха, см.ниже). Энкодером – выбираем канал для записи. Повторное длительное (около секунды) нажатие Write – запись частоты в EEPROM и выход. Кнопка Read – выход из Channels Write Mode – без записи. (Защита от случайного нажатия на Write). В режим WRITE можно зайти также из Read Channels, но там возможен выход – только без записи (нет смысла перезаписывать канал сам на себя).
3. Кнопка Select: Из основного режима – выбор нижнего и верхнего пределов сканирования частот. Выбирается та частота, которая установлена в данный момент. Кнопка лишь заносит значение в ОЗУ. Функция кнопки из Channels Read mode уже была описана – см.п.1.
4. Кнопка Run: Начать/остановить сканирование. При сканировании светится Run. Во время сканирования, кнопкой Encoder Button можно менять шаг сканирования частоты. При шаге выше 5кГц включительно, во время сканирования присутствует задержка на каждой частоте две секунды.
5. Кнопка Encoder Button: Изменение шага настройки и шага сканирования, режим SLEEP, см.выше.Во время сканирования я не осуществил автоматическую остановку от несущей, так как при наличии множества пустых несущих, эта функция для меня не актуальна. Да и нет места в памяти.
Помехи и возбуждения: на некоторых частотах с определённым шагом присутствуют помехи (гудение вместо ЧМ шума) от дисплея OLED. Они сильнее проявляются без антенны, но принимать станции почти не мешают. Сделано следующее: в режиме WRT – (готовность к записи) – я убрал постоянное обращение к дисплею в цикле. Так что достаточно нажать кнопку WRITE, чтобы убрать помеху. Затем можно «безопасно» выйти из режима готовности записи режима, нажав READ. В режиме SLEEP, помеха также отсутствует, т.к. I2C выключен. Может быть, эта помеха связана с неправильным монтажом, но, насколько мне известно, эта проблема присутствует не только у меня.
Так как в данном проекте память программы используется на 99%, не реализовано много интересных функций. Если использовать , например Arduino Mega с TFT дисплеем, то можно сделать очень современное и красивое устройство. Но я не вижу в этом смысла, если это всего лишь однодиапазонный приёмник.
Я пока что не являюсь профессиональным программистом, поэтому естественно предположить, что код можно было сделать лучше, так что строго не судите)
Приёмник назван в честь знаменитого учёного Эдвина Армстронга, который сделал невероятно много для радиоприёмной техники, разработав в том числе супергетеродинную схему и частотную модуляцию.
Подробности:
https://cxem.net/tuner/tuner95.php
Комментарии 2