Приемник ATS-20: апгрейд, устранение проблем |
![]() |
Добавил(а) microsin |
Просмотрел на youtube видеообзор на радиоприемник ATS-20 от Владимира Карпелянского (канал "HAM Radio Channel") [1]. Это приемник на основе микросхемы тюнера Si4732 (или Si4735). Мне уже приходилось иметь дело с этой микросхемой [2], и решил заказать себе такой приемник на AliExpress. В этой статье приведен небольшой обзор вариантов апгрейда радиоприемника и решение некоторых связанных с этим проблем. Обновляется прошивка очень просто, как и любая другая платка Arduino. Конечно, иногда могут быть проблемы, как же без них, но они вполне устранимы (см. FAQ ниже). Здесь привел краткий обзор тех вариантов прошивки, что попались мне. [Заводская прошивка] Вероятно это самый неудобный для эксплуатации вариант. Единственное его достоинство - в нем все надписи на кнопках соответствуют запрограммированным на них функциям, и они работают максимально тупо и просто. Недостатки этой прошивки: мелкий текст, внутрисхемные помехи от S-метра, неудобно настраивать BFO в режиме SSB. [swling.ru] Эта прошивка намного более продвинутая, описание улучшений см. в [3]. Однако, что очень плохо, прошивка поставляется только в бинарниках, автор закрыл исходный код. [Проекты в библиотеке от pu2clr] На GitHub опубликован проект [4], который подойдет как к ATS-20, так и ко многим аналогичным по схемотехнике приемникам. Список очень большой, см. папку examples архива SI4735-master.zip. Для моего приемника ATS-20 подошел вариант SI473X_ALL_IN_ONE_OLED_RDS_CHINESE_V8 (находится в папке examples\SI47XX_KITS\AliExpress). [Загрузчик Arduino] Кроме обновления прошивки, рекомендую также обновить загрузчик на Optiboot [6]. Этот загрузчик имеет минимально возможный размер кода, так что помещается в секцию загрузки из 512 байт. Это дает экономию места под код по сравнению со старыми загрузчиками 1.5 килобайта! Кроме того, он может нормально работать с дешевыми китайскими платками Arduino, на борту которых нет кварца. Прошивку загрузчика найдете в файле bootloader\optiboot_atmega328.hex архива [8]. Я её использовал в приемнике ATS-20, где на плате Arduino не было кварцевого резонатора (микроконтроллер работал от внутреннего RC-генератора 8 МГц), загрузка кода при этом происходила на скорости 57600 бод. Секция файла boards.txt для описания платы Arduino Nano без кварцевого резонатора и использования загрузчика Optiboot: ############################################################## nanoOpti.name=Arduino Nano Optiboot No quartz nanoOpti.upload.tool=avrdude nanoOpti.upload.protocol=arduino nanoOpti.bootloader.tool=avrdude nanoOpti.bootloader.unlock_bits=0x3F nanoOpti.bootloader.lock_bits=0x0F nanoOpti.build.f_cpu=8000000L nanoOpti.build.board=AVR_NANO nanoOpti.build.core=arduino nanoOpti.build.variant=eightanaloginputs ## Arduino Nano with ATmega328P ## -------------------------- nanoOpti.menu.cpu.atmega328=ATmega328P nanoOpti.menu.cpu.atmega328.upload.maximum_size=32256 nanoOpti.menu.cpu.atmega328.upload.maximum_data_size=2048 nanoOpti.menu.cpu.atmega328.upload.speed=57600 nanoOpti.menu.cpu.atmega328.bootloader.low_fuses=0xC2 nanoOpti.menu.cpu.atmega328.bootloader.high_fuses=0xDE nanoOpti.menu.cpu.atmega328.bootloader.extended_fuses=0x07 nanoOpti.menu.cpu.atmega328.bootloader.file=optiboot\optiboot_atmega328.hex nanoOpti.menu.cpu.atmega328.build.mcu=atmega328p [Решение проблем, FAQ] Не найден patch_ssb_compressed.h: поместить patch_ssb_compressed.h в каталог проекта, и в скетче заменить угловые скобки на ". При попытке прошивки скетча выводится сообщение об ошибке: C:\Users\имяпольз\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\имяпольз\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\имяпольз\AppData\Local\Temp\arduino_build_205453 /SI473X_ALL_IN_ONE_OLED_RDS_CHINESE_V8.ino.hex:i .. System wide configuration file is "C:\Users\имяпольз\AppData\Local\Arduino15\packages\arduino\tools\ avrdude\6.3.0-arduino17/etc/avrdude.conf" Using Port : COM3 Using Programmer : arduino Overriding Baud Rate : 115200 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x5a Как можно решить: либо применить XLoader [5], либо поменять тип загрузчика на старый загрузчик (Tools -> Processor: "ATmega328P (Old Bootloader)"). Вариант с выбором нового загрузчика может не работать, у него скорость загрузки 115200, а у старого скорость 57600: с:\arduino-1.8.9\hardware\tools\avr/bin/avrdude -CM:\arduino-1.8.9\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b57600 -D -Uflash:w:C:\Users\имяпольз\AppData\Local\Temp\arduino_build_368564 /SI473X_ALL_IN_ONE_OLED_RDS_CHINESE_V8.ino.hex:i Причина была в том, что неправильно установлена тактовая частота, вероятно всего фьюзами. Она была в 4 раза меньше, чем 16 МГц, в результате чего скорость последовательного порта вместо 115200 устанавливалась 28800, и длительность задержки delay(1) вместо 1 мс была 4 мс. Исправил, добавив в начало setup() следующий код: noInterrupts (); // cli() CLKPR = 0x80; // Разрешаем изменение значения делителя CLKPR = 1; // Записываем в регистр 1, что соответствует значению делителя 1. // Если записать 3, то коэффициент деления частоты будет 8. interrupts (); // sei() Интерфейс стал намного отзывчивее, приемник стал запускаться быстрее. Имейте в виду, что несколько увеличится ток потребления. Причина в том, что вместо ATmega32P применен китайский MCU со стертой маркировкой, на борту которого EEPROM отсутствует. Т. е. все вызовы чтения библиотеки EEPROM.h будут возвращать 0. Самый простой способ решить проблему - перепаять микроконтроллер, заменив его на нормальный. Не забудьте предварительно прошить в него загрузчик! [Ссылки] 1. ATS-20 DSP радио на ARDUINO и Si4732 site:youtube.com. |