Просмотрел на 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
При попытке прошивки скетча выводится сообщение об ошибке:
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:
Причина была в том, что неправильно установлена тактовая частота, вероятно всего фьюзами. Она была в 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.
Самый простой способ решить проблему - перепаять микроконтроллер, заменив его на нормальный. Не забудьте предварительно прошить в него загрузчик!
Используйте кабель USB miniB в AVRDUDESS (это GUI оболочка для AVRDUDE), отключите линию USB 5 В, установите предустановку AVRDUDESS на Arduino Uno (ATmega328P) и нажмите «Определить и запрограммировать» (Detect and Program). Затем вы можете начать писать.
Что-то пошло не так. Через XLoader залил прошивку, и ATS-20+ скончался. Сейчас при включении слышен только щелчок и всё, экран не горит, и на кнопки не реагирует. Ваши предположения Господа?
microsin: не расстраивайтесь, просто пробуйте разные прошивки. Существует несколько вариантов схемы, поэтому вероятно ваша схема не подходит под прошивку, которую залили.
Комментарии
microsin: не расстраивайтесь , просто пробуйте разные прошивки. Существует несколько вариантов схемы, поэтому вероятно ваша схема не подходит под прошивку, которую залили.
RSS лента комментариев этой записи