Программирование AVR Приемник ATS-20: апгрейд, устранение проблем Fri, March 29 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Приемник ATS-20: апгрейд, устранение проблем Печать
Добавил(а) microsin   

Просмотрел на youtube видеообзор на радиоприемник ATS-20 от Владимира Карпелянского (канал "HAM Radio Channel") [1]. Это приемник на основе микросхемы тюнера Si4732 (или Si4735). Мне уже приходилось иметь дело с этой микросхемой [2], и решил заказать себе такой приемник на AliExpress. В этой статье приведен небольшой обзор вариантов апгрейда радиоприемника и решение некоторых связанных с этим проблем.

Обновляется прошивка очень просто, как и любая другая платка Arduino. Конечно, иногда могут быть проблемы, как же без них, но они вполне устранимы (см. FAQ ниже). Здесь привел краткий обзор тех вариантов прошивки, что попались мне.

[Заводская прошивка]

Вероятно это самый неудобный для эксплуатации вариант. Единственное его достоинство - в нем все надписи на кнопках соответствуют запрограммированным на них функциям, и они работают максимально тупо и просто.

Недостатки этой прошивки: мелкий текст, внутрисхемные помехи от S-метра, неудобно настраивать BFO в режиме SSB.

[swling.ru]

Эта прошивка намного более продвинутая, описание улучшений см. в [3]. Однако, что очень плохо, прошивка поставляется только в бинарниках, автор закрыл исходный код.

ATS 20 firmware swling ru

[Проекты в библиотеке от pu2clr]

На GitHub опубликован проект [4], который подойдет как к ATS-20, так и ко многим аналогичным по схемотехнике приемникам. Список очень большой, см. папку examples архива SI4735-master.zip. Для моего приемника ATS-20 подошел вариант SI473X_ALL_IN_ONE_OLED_RDS_CHINESE_V8 (находится в папке examples\SI47XX_KITS\AliExpress).

ATS 20 firmware PU2CLR

[Загрузчик 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.
2. Si47XX: руководство по программированию.
3. Прошивка для радиоприемников ATS-20 и UD3SBV site:swling.ru.
4. pu2clr / SI4735 site:github.com.
5. XLoader site:hobbytronics.co.uk.
6. Optiboot Bootloader for Arduino and Atmel AVR site:github.com.
7. Многодиапазонный приемник на Si4732.
8. 220618ATS-20-upgrade.zip - исходный код, прошивки, загрузчик Optiboot.

 

Добавить комментарий


Защитный код
Обновить

Top of Page