После установки программы (оболочки, IDE) и предварительной настройки (установка драйвера, настройка порта), пришло время открыть и посмотреть программу(скетч) синтезатора. Скетч может быть с любым именем, но только латинскими буквами. При работе со скетчем, если понадобится что то подправить для себя или добавить дополнительные команды кода для разных конфигураций, с разными вариантами использования и попытки сохранить (Сохранить как …) с русским буквами, программа конечно сохранить папку со скетчем, но будет «ругаться», что …
и папка в сохраненном месте будет иметь такой вид
то есть весь текст автоматически пере именуется программой, оболочкой Ардуино с русского названия, на «нижнюю палочку» вместо каждого введенного знакоместа кириллицы. Потому только латынь !
Скетч (прошивка) имеет расширение name.ino. Причем при сохранении создается папка с таким же названием, внутри которой с таким же именем и сам файл «прошивки». Сделано так потому, что иногда дополнительно с файлом прошивки должны (могут) «лежать» в одной папки еще дополнительные файлы настроек, конфигурации и др. Раньше в первых версиях программу Ардуино файл (прошивка) сохранялся, находился без папки. А теперь если даже имеется «голый» скетч без папки, то при открытии его, программа уже сама говорит что будет создана папка для данного проекта.
Если программа (оболочка, IDE) была установлена на компьютер инсталлятором с сайта поддержки, то скорей всего файлы данного типа расширений будут открываться автоматически (автоматом), т.к. Windows при инсталляции уже позаботился об этом. А если же был скачан архив с программой и распакован с любое удобное место, то нужно указать Windows путь к данному софту чтобы система знала каким приложением открывать файлы данного типа, с данным расширением. Место где расположен софт и все папки в нем буду иметь примерно такой вид
Вид папок открытый с помощью файлового менеджера Total Commander
Вид папок открытый с помощью стандартных средств Windows — Проводник
Описывать назначения каждой каждой папки не имеет смысла. При желании сами пройдетесь, пересмотрите содержания каждой папки. Нам будет интересны всего два названия из этого списка. Это запускной файл программы
и папка libraries — библиотеки, со всеми дополнительными, вспомогательными папками содержащие необходимые файлы для работы различных устройств. Стандартный набор библиотек сразу после установки будет иметь примерно такой вид
Согласитесь, не очень много выходит. Для примера приведу свою папку с «нафаршированными» папками с библиотеками
Конечно для наших целей всего этого не нужно. Для работы со скетчем синтезатора (генератора), прошивки его понадобится всего две дополнительные папки (библиотеки). Для просмотра без «заливки» скетча в микроконтроллер библиотеки вообще не понадобятся. Это только при попытке проверить на конфликты (правильность) и загрузкить его в МК будет выведено сообщение, что не хватает каких то дополнительных файлов, библиотек на которые ссылается внутри кода (прошивки) программа.
Дополнительные папки это Rotary — файлы, библиотеки для работы энкодера (валкодера). И папка (библиотека) Si5351Arduino-master — главная, основная библиотека синтезатора.
В середине папки с библиотекой имеется несколько файлов. Это файл лицензии, файл описания, папка с примерами examples и два самых главных файла si5351.cpp и si5351.h написанных на языке программирования СИ++. При желании можно просмотреть любым текстовым редактором например Блокнотом или более продвинутым Notepad++.
НЕКОТОРОЕ ОТСТУПЛЕНИЕ !!!
Первый и последний от меня урок по программированию !!!
Всё, что Вам нужно на первом этапе по программированию это две косые чёрточки или две дробные черты // которые надо будет ставить или убирать в тексте (листинге) программе, скетче, «прошивке» или как Вам угодно еще называть. Всё, что после них идет, любой текст, любой кусок кода, игнорируется при компиляции, заливки, прошивки в микроконтроллер. Выполнение кода происходит построчно и дойдя до значка //, программа как бы останаливается, видит что дальше нельзя и переходит на новую строчку. А если новая строчка(строчки) так же начинается с //, то и ее(их) пропускает, пока не найдет «нормальный» для себя код. Это часто в основном используется в конце какого то действия (кода, операции) для комментирования что данная стройка выполняет, какое действие. Чтобы можно было разобраться с чужим, а часто еще и со своим кодом через некоторое время когда уже под забылось что, куда … Вообще среди программистов считается хорошим правилом комментировать действия своего кода при написании программы. Чтобы и другой мог в нем разобраться. Пример:
Здесь сработает только строчка #define IF_Offset которая тоже после значка // говорит что делает. То есть на выходе синтезатора будет частота выше (или ниже) на значение ПЧ. А все остальные строчки это коменты, комментарии.
КОНЕЦ ОТСТУПЛЕНИЯ !!!
Архив с нужными библиотеками нужно взять ЗДЕСЬ. В нем находится две папка — libraries, в которой находятся библиотеки для работы энкодера и самой микросхемы SI5351a. Их надо вставить … чтобы они у нас так же появились как показано выше на картинке обведенным красным. Вторая папка sintezator_Si5351_band_160_10 — это папка внутри которой файл (скетч, «прошивка», программа) с готовой конфигурацией, которой нужно «вскормить» микроконтроллер модуля Arduino, чтобы получился синтезатор со следующими параметрами:
— диапазон рабочих частот — от 1 до 30МГц(не прерывный);
— частота на выходе выше на значение 8865кГц;
— стартовая частота при подачи питания 7,100 МГц;
— шаг перестройки при вращение энкодера 100кГц;
— вкл./выкл. кнопкой по кругу режимов АТТ/УВЧ;
— весь диапазон частот разбит на 9 поддиапазонов для подачи на ключи ПДФ или ФНЧ.
И многое другое ….
Все эти параметры в широких пределах можно менять сам пользователь, радиолюбитель. Даже если он никогда не сталкивался с программированием и микро контроллерной техникой. Потому что все они организованы по типу МЕНЮ в понятном для человека виде. Пройдемся по некоторым строчкам кода и посмотрим что, где можно поменять, чтобы получить синтезатор с нужными нам параметрами.
Открываем второй файл, предварительно разархивированный в любое место с именем sintezator_Si5351_band_160_10. Если программа установлена при помощи инсталлятора, то откроется окно ардуиновской оболочки. А если софт находится где то в распакованном виде на диске(винчестере), то нужно Открыть с помощью … и указать расположение запускного приложения arduino.exe и назначить (поставить галочку) чтобы файлы данного типа (с расшитением .ino) открывались автоматом данным приложением, программой. После запуска окно программы и «текст» в ней будет иметь примерно такой вид:
Если картинка (окно) будет отличатся, в частности не будет по вертикали слева нумерации строк, то их надо включить в пункте Настройки и выставить галочку Показать номера строк. Ну и там же чуть выше можно выставить размер шрифта, чтобы не очень мелкий был. нормально будет Размер шрифта: 14. Или как будет удобней. Можно больше. По желанию. В первой части инструкции есть картинка со всеми выставленными настройками. Чем удобна нумерация строк ? Тем, что в дальнейшем чтобы не искать глазами код или место с кодом который надо будет править (редактировать), а можно быстро по строчке перейти на нужно место, которое буду указывать для изменения, правки, редактирования.
Чтобы убедится что все библиотеки для синтезатора (генератора) расположены где им положено, в папке libraries, а не где то в другом месте можно попробовать нажать слева вверху в окне программы на значок
это проверка правильности написания скетча (программы, кода, прошивки), а так же других конфликтов, отсутствия нужных библиотек и прочих правил написания скетча, программы. Проверку можно проводить даже если не подключено железа, которое нужно будет программировать. То есть проверка только без программирования. После нажатия в нижней части окно будет сообщение Компиляция скетча … , по завершении которого появится другое — Компиляция завершена и дополнительная информация о размере скетча, используемой памяти и др. информация.
Если ли у Вас то же самое и нет сообщений об ошибке, то 99% что в дальнейшем уже при «заливке» в Ардуино все так же пройдет без проблем. А если будет что то как здесь
то может или отсутствуют нужные библиотеки в папке libraries , или Вы их не туда «забросили» или еще чего не так … В любом случае дальнейшее продвижение не имеет смысла пока не устранится данная проблема. Потому что при «заливке» в микроконтроллер Ардуино, программа (оболочка) так же выдаст ошибку и ничего не будет запрограммировано.
Итак, самое интересное !!! Начнем …
Оболочка Arduino IDE открыта. Листинг (текст) скетча виден. Перемещаться по тексту вниз-вверх можно при помощи колёсика мышки или чтобы быстрее, зажав левую кнопку мышки курсором на движке слева и не отпуская перемещать движением мышки вниз-вверх. Нумерацию строк видим. Далее …
Строки от 3 до 10 включительно — т.н. много строчный комментарий. Можно писать всё что угодно. Обычно начальное описание, ссылки на первоисточник разработчика, могут быть ссылки для скачивания нужных библиотек и другая информация. В общем бесполезная информация. Можно удалить. На работу не влияет. Компилятором игнорируется. Много строчный комментарий должен начинаться с /* и заканчиваться наоборот */ . Всередине можно писать хоть книгу.
Строчки от 12 до 15 включительно. Информация для нашего скетча (программы, прошивки) о библиотеках которые нужно подключить, чтобы брать оттуда все данные для работы нашей программы. В наших библиотеках, которые мы поместили в папку libraries содержатся почти такие же строчки кода, что и в скетче. А иногда даже и по более строк, чем в этом скетче. И чтобы не загружать основной скетч (программу, прошивку) лишней информацией, придумали для разных устройств, «железа» хранить все данные в отдельных папках — библиотеках на данный девайс, устройство, железо. Вот и если нужно будет какая то информация, конфигурация, состояние, то всё будет черпаться из библиотеки. В библиотеке прописаны строчки, настройки, конфиги — «на все случаю жизни».
Здесь строчки:
#include
#include
#include
Ну и еще одна … можно не забивать мозг лишней информацией и пропустить.
#include
В этих строчках ничего, никогда не меняется. И можно про них забыть.
Строчки 17, 18 — нижний и верхний пределы (границы) перестройки синтезатора. В такими данными (числами) синтезатор (генератор) будет иметь непрерывный диапазон перестраиваемых частот от 1 МГц до 30 МГц.
Значения можно менять в любых пределах от 1000000L (1МГц) до 160000000L (160МГц). Можно даже сделать одно диапазонный вариант синтезатора на 80-метровый, любительский диапазон выставив так:
#define F_MIN 3500000L // Нижний предел частоты
#define F_MAX 3800000L // Верхний предел частоты
Или трех диапазонный вариант — 80-40-20 метров:
#define F_MIN 3500000L // Нижний предел частоты
#define F_MAX 14350000L // Верхний предел частоты
Или установить с запасом по краям +10 кгц на нижнем или верхнем пределах перестройки. При вращении энкодера и достижении верхней или нижней пределов, частота «упрется» в указанные границы и не будет идти далее. Забегая вперед скажу, что для НЧ и ВЧ диапазонов есть пункт настройки где можно выставлять значение ПЧ выше или ниже принимаемого сигнала. Это если на НЧ нужно выходные частоты с синтезатора, плюс значение ПЧ, а на ВЧ — наоборот. Или по другому, как будет угодно.
Строчки от 39 до 45 включительно. Пожалуй самые основные и интересные для работы синтезатора строки. Напомню что основная и полезная информация для редактирования (правки) — всё то, что стоит до значков //. Всё после двойного слэша — комментарии, описание что данная строчка (команда, код) делает, выполняет.
Здесь строчки:
39 — volatile uint32_t LSB = 886300000ULL; — значение, частота ОГ для «нижнего» ската КФ для выделения «верхней» боковой.
40 — volatile uint32_t USB = 886700000ULL; — значение, частота ОГ для «верхнего» ската КФ для выделения «нижней» боковой.
Для примера расклада наглядности и понятия данного вопроса
41 — volatile uint32_t bfo = 886700000ULL; — строчка с какой частотой будет «стартовать» опорный генератор (ОГ) при включении, подачи питания на синтезатор.
44 — volatile uint32_t vfo = 710000000ULL / SI5351_FREQ_MULT; — строчка какая частота будет стартовая при включении, подачи питания на синтезатор. С данными как указано, синтезатор «стартует» с частотой 7,100 МГц — середина 40-метрового, любительского диапазона. Можно ставить любую. 1000000000ULL — 10 МГц, 1500000000ULL — 15 МГц, 2000000000ULL — 20 МГц и т.д.
45 — volatile uint32_t radix = 100000; — начальный шаг (step) перестройки энкодера при старте, включение питания синтезатора. При данном значении шаг перрестройки — 100 кгц. При нажатии на кнопку энкодера шаг меняется от 1гц до 1МГц по кругу. Со значениями volatile uint32_t radix = 10000; — шаг 10 кгц, volatile uint32_t radix = 1000; — 1 кгц, volatile uint32_t radix = 100; — 100 гц и т.д.
Строчки от 52 до 55 — выбор общей конфигурации, функциональности синтезатора, генератора. В этих строчках выбирается (выставляется), в каком режиме будет использоваться данное устройство. В зависимости от примененной строчки, синтезатор можно использовать в режиме генератора сигналов (ГСС), синтезатора для приемо — передающей аппаратуры с разными значениями ПЧ, даже «с преобразованием вверх». Для техники прямого преобразование (ТПП), SDR-техники, условием работы которой есть частота на выходе Х2, Х4. То есть умноженная на два или четыре. Иными словами на выходе синтезатора частота больше принимаемого сигнала в два или четыре раза.
Остановимся подробней на этом месте. Напомню, что строчки 50, 51 и 56 — это комментарии которые описывают, что в данном месте нужно сделать чтобы изменить режимы работы синтезатора. Для применения (задействования) интересующего режима, нужно перед строчкой снять значки // , что будет означать «включение» данного параметра. Раскомментирывовать, удалять двойной // можно только в одном месте. Иначе работать ничего не будет.
52 — #define IF_Offset — если оставляем как на картинке без двойного // впереди, то устройство будет работать как синтезатор частоты с правом выбора значения ПЧ. Как выбрать нужное значение ПЧ описано выше. Напомню только что это делается в строчках 39, 40 и 41 кода, скетча.
53 — #define Direct_conversion — если впереди этой строчки убераем двойной //, а вдругих строчках выставить // , то в таком режиме устройтво будет работать как генератор стандартных сигналов — ГСС. На выходе частота будет равнятся как экране ЖКИ. Частоту перестройки может быть любая. Задать ее можно в строчках скетча 17 и 18. 17 — минимальная частота, 18 — максимальная.
#define F_MIN 1000000L // Нижний предел частоты
#define F_MAX 160000000L // Верхний предел частоты
В таком виде перестройка частоты генератора будет от 1 МГц до 160 МГц.
54, 55 — #define FreqX4 и #define FreqX2 соответственно. Если раскомментировать любую их этих строчек, чтобы она начиналась со знака #, то синтезатор на выходе будет выдавать частоты в два или четыре раза больше, чем показание на экране ЖКИ. Эти режимы будут полезны для экспериментов с SDR-техникой или с техникой прямого преобразования.
Для начала чтобы ознакомится с многими режимами работы синтезатора, генератора информации достаточно. В дальнейшем можно будет еще указать места или где добавить несколько строчек, чтобы для вариантов с выбором ПЧ, можно чтобы на НЧ диапазонах сигнал был выше на значение ПЧ, а на ВЧ — ниже. Или всегда только выше. Или выход с частотой второго, опорного гетеродина был выше, ниже и как угодно в зависимости от частоты первого, основного выхода. Можно так же менять поддиапазоны частот, их границы для подачи управляющих сигналов на ключи (транзисторы) ДПФ, ФНЧ. Так же если не нужны режимы включения ATT и PRE (аттенюатор, УВЧ), то вместо них можно задействовать смену боковых LSB и USB. И многое другое.
Теперь про схемы подключения «железа». Схемы при использовании модуля на Si5351a + микроконтроллерных модулей Arduino Nano и Arduino Pro Mini. Напомню, что связка ЖКИ 1602 + модуль Arduino (микроконтроллерная часть), будет работать даже без синтезаторного модуля Si5351a. Все показания, режимы работы, отображение на ЖКИ будут работать и без него.
Схема подключения «программатора» для Arduino Pro Mini
Из модуля на Si5351A — синтезатор, генератор. Создание «своей» прошивки. Часть 3
3 комментария
serqej05 · 27.11.2021 в 19:08
Доброго времени суток Василий. Спасибо за идею и помощь. Очень интересный проект а самое главное все понятно. Спасибо. Но есть вопрос… Скажите что нужно и где поменять в скетче что -бы использовать si5351 с тактовой 25 МГц а не 27. Взаранее спасибо.
admin · 27.11.2021 в 21:06
Здравствуйте ! Сейчас уже не помню, то тактовая частота «тянется» из библиотеки si5351.h
Там нужно где то найти что то типа XTAL FREQ и установить нужное.
serqej05 · 27.11.2021 в 22:46
Спасибо за ответ. Буду искать. И у меня есть ещё один вопрос, пожалуй самый главный, Вы по Крыму работаете? Просто есть кое-что, что меня заинтересовало. Спасибо ещё раз и традиционные 73!