Найти в Дзене
Старый радио любитель

Ардуино. Генератор на SI5351 с перестройкой энкодером.

Наконец-то сумел добить блок генератора на SI5351. Вроде и ничего особенного, но для такого программиста, как я это не такая уж тривиальная задача. Это, конечно, только заготовка для полноценного блока генераторов многодиапазонного приемника или трансивера. Но делая ее я узнал много нового и интересного для меня, и, может быть, это окажется интересным для вас. Задача, которую я поставил для этого проекта, такова: генератор должен выдавать на одном выходе si5351 сигнал, который мог бы перестраиваться энкодером, причем шаг перестройки переключается кнопкой энкодера и может быть 10 Гц, 100 Гц, 1 кГц, 10 кГц, 100 кГц и 1 МГц. Схема тут простая, всего несколько проводов. Все смонтировал на гетинаксовой плате от дядюшки Ху размером 7х9 см. Решил сэкономить время и обратился GPT. Буквально за 20 с он выдал программу. Посмотрел, вроде все похоже, только вот библиотеку он использовал Adafruit si5351, пришлось скачать и подключить. Попробовал загрузить в Ардуинку - выдает ошибку: "Ошибка компил

Наконец-то сумел добить блок генератора на SI5351. Вроде и ничего особенного, но для такого программиста, как я это не такая уж тривиальная задача.

Это, конечно, только заготовка для полноценного блока генераторов многодиапазонного приемника или трансивера. Но делая ее я узнал много нового и интересного для меня, и, может быть, это окажется интересным для вас.

Задача, которую я поставил для этого проекта, такова: генератор должен выдавать на одном выходе si5351 сигнал, который мог бы перестраиваться энкодером, причем шаг перестройки переключается кнопкой энкодера и может быть 10 Гц, 100 Гц, 1 кГц, 10 кГц, 100 кГц и 1 МГц.

Схема тут простая, всего несколько проводов.

Рис. 1.
Рис. 1.

Все смонтировал на гетинаксовой плате от дядюшки Ху размером 7х9 см.

Рис. 2.
Рис. 2.

Решил сэкономить время и обратился GPT. Буквально за 20 с он выдал программу. Посмотрел, вроде все похоже, только вот библиотеку он использовал Adafruit si5351, пришлось скачать и подключить. Попробовал загрузить в Ардуинку - выдает ошибку: "Ошибка компиляции для платы Ардуино нано". Попробовал вместо Нано взять Уно - та же ошибка. Как ни бился GPT, а ничего сделать не мог. А я спустился на первый этаж, там у меня комп с Виндовс 12 и последняя версия Arduino IDE. Запустил программу на компиляцию там - все нормально. Значит просто библиотеки типа Adafruit новые и на старой версии IDE не работают - это всем на заметку.

У меня уже была установлена библиотека Etherkit SI5351 и попросил GPT использовать ее. И опять облом. Убираешь одну ошибку, выскакивает похожая дальше. Осталась надежда на самую старую библиотеку SI5351mcu. Но и там все не как надо. Начала выскакивать ошибка 'SI5351mcu' does not name a type; did you mean 'Si5351mcu'. Искусственный разум и так и сяк - все не так, не проходит программа проверку. В конце концов он мне написал "Исследуйте документацию библиотеки. Возможно, есть дополнительные требования или изменения в методах." Т.е. думай сам, старый.

Поэтому я взял работающую программу, которую делал раньше. Там частоты на выходах синтезатора не менялись. Взял кусок программы для энкодера добавил ее и вроде все заработало. Т.е. программа проходила компиляцию нормально, без ошибок. Загружаю программу в процессор. Вроде все работает, только вот во второй строке надпись подергивалась, а значение шага вообще прочитать было невозможно. Но при вращении энкодера частота менялась, только вот непредсказуемым образом, то ч шагом 10 Гц, то 1 МГц ....

Понятно, что программа не виновата, тут что-то аппаратное. Стал тыкать пальцами в контакты :)). И оказалось, что прикосновение к контактам энкодера останавливает бег разных шагов. Скорее всего дело в импульсных помехах по питанию. Замеряю напряжение питания - ого! - всего 3,7 В. Программно отключил подсветку индикатора - напряжение питания повысилось до 4 В. Если оставить только плату Нано, то напряжение нормальное 4,9 В. Попробовал припаять конденсатор параллельно кнопке энкодера. Не помогло.

Тогда я отпаял провод от вывода кнопки энкодера и попробовал переключать вручную - все получилось. Значит энкодер паршивый. Но у меня была еще парочка энкодеров, только немного другого типа. Впаял - переключается, но иногда с ошибками. Решил посмотреть программу, там была введена задержка для устранения дребезга в 10 мс. Может мало? Изменил на 100 мс, и все заработало как часы.

Рис. 3.
Рис. 3.

Теперь шаги перестройки менялись при каждом клике. Нужно попробовать оптимизировать время задержки до минимально возможного. Но и так все работает.

Рис. 4.
Рис. 4.

На выходе clk0, как положено, прямоугольные импульсы, частота которых меняется с помощью энкодера.

Рис. 5.
Рис. 5.

На выходе clk1 импульсы с частотой 8 МГц, как и заказывал. Так что опыт удался. В добавок я сделал себе аккаунт на GitHub и программа этого проекта лежит вот здесь.

Остался вопрос с напряжением питания. В принципе, конечно, питать все устройство нужно от стабилизированного источника +5 В и подключать его нужно ко всем устройствам и к выводу 5V платы Ардуино. Но есть нюанс: при программировании через USB это питание нужно отключать, чтобы не вызывать конфликтов.

Буду работать дальше.

Всем здоровья и успехов!