Очередное обновление проекта в программной части.
Вся история разработок доступна в этой ветке статей по посвящённой разработке трансивера UA3REO.
В этой версии все изменения касаются только прошивки, не затрагивая аппаратную часть, среди них (по сравнению с версией 1.2):
+Изменён уровень усиления AGC
Уровень авто-усиления сигнала теперь не вызывает перегрузок по НЧ, можно вручную выставлять усиление через меню, а можно воспользоваться автоматикой.
+Доработана автокалибровка FFT при отсутствии сильных сигналов
Водопад, отображающий спектр сигнала, теперь стал более удобным и комфортным в использовании.
+Используется DMA для смещения водопада в памяти
DMA позволяет проводить операции по копированию блоков памяти без использования процессора (он может выполнять иные задачи в это время). Это позволило сократить количество лагов и ускорить отрисовку водопада в 2 и более раз.
+Исправлены ошибки отображения на LCD в некоторых ситуациях
Доработана очередь отрисовки информации на LCD, что избавило от ситуаций, когда 2 процесса пытаются одновременно нарисовать что-то на экране, вызывая визуальные баги.
+Исправлены баги со звуком
Найдены и устранены ошибки с обработкой и выводом звука.
+Отображение ширины полосы на FFT
Теперь на водопаде визуально отображается ширина выбранной полосы приёма/передачи.
+Доработан АМ демодулятор
Добавлен полосовой фильтр для приёма станций, которые находятся недалеко друг от друга по частоте. Ранее принималась только самая мощная станция в полосе приёма.
+Watchdog timer от зависаний
Это специальное устройство, входящее в состав процессора, но работающее отдельно от него. Процессор обязан высылать таймеру сигналы что он работает, иначе(в случае зависаний) таймер вызывает принудительную перезагрузку устройства.
+Исправлена проблема с наводками на I2S от FSMC
FSMC шина генерирует большое количество электромагнитных помех, в данном случае шина работала на сверх-высокой скорости обмена, что предполагает очень крутые скаты меандра сигнала. При снижении скорости помехи исчезли, при этом скорость обмена осталась на достаточном уровне.
+Композитный USB (2 COM порта)
При подключении трансивера по USB определяются 2 виртуальных COM-порта одновременно. Один используется для отладки (в дальнейшем для ключа и PTT), второй для CAT Интерфейса.
+Подключение по USB CAT (эмуляция Yaesu FT-450)
Трансивер поддерживает эмуляцию протокола CAT от моего настольного трансивера Yaesu FT-450, поддерживаются все базовые команды.
+Реализация PTT через CAT команду
Поддерживается перевод в режим передачи через CAT команды вышеуказанного интерфейса.
+Доработки демодулятора
Доработаны шумодав в режиме FM (FM-SQL), а также ФНЧ(LPF) фильтрация сигналов при их демодуляции.
+Исправлены ошибки TX + доработка аудио-компрессора (NOISE GATE)
Исправлены проблемы с передачей, которые были в версии 1.2, также доработан аудио-компрессор голоса, в него добавлен пороговый уровень, который не позволяет усиливать шум микрофона во время молчания оператора.
У аудио-кодека включен High Pass фильтр, что избавляет сигнал от щелчков, возникающих при ошибках оцифровки сигнала.
+Базовые реализации режима TX для AM и FM моды
Реализован режим передачи для амплитудной и частотной модуляции, работы над ними ещё продолжаются (например у FM фиксированная ширина полосы передачи).
+Исправлены проблемы с буфером при TX
Теперь трансивер правильно работает с поступающими на передачу данными, не вызывая переполнения, либо недостатка данных в буффере.
+Сохранение частоты при переключении между диапазонами
Для каждого диапазона, описанного в бенд-мапе, реализован механизм сохранения последней выбранной частоты.
+Задержка 10мс перед подачей ВЧ при переходе в TX (для реле)
Реализована небольшая задержка перед подачей ВЧ сигнала, необходимо для корректного срабатывания реле антенны и усилителя.
+Звуки нажатия на экран
При нажатии на экран (тачпад) теперь слышны звуки нажатия, что сделало интерфейс более отзывчивым. По необходимости выключается в системных настройках.
Файлы проекта доступны в 2х версиях (в архиве на момент публикации, и в репозитории github, постоянно обновляемые и с исправлениями ошибок), в них включены файлы и исходные коды прошивок, даташиты, смета, схемы и чертежи плат.
Архив проекта версии 1.3
Репозиторий проекта на GitHub
Архив статей по проекту
В дополнение к послу на форуме:
Закомментировал строку 312 в usb_dev_cat.c, лишние перерисовки экрана пропали, информация обновляется моментально. Понизил приоритет прерывания USB до 6, звук почти не рвется. Также есть нестыковки в модуляции по диапазонам в bands.c -для .mode = TRX_MODE_DIGI_U надо .startFreq = 3573000. Но есть проблема с обновлением текущего вида модуляции — после переключения диапазона по CAT примерно на полсекунды выводится правильная мода, потом сразу переключается на USB (на 3,573 к примеру).
Вот это очень странно, 312 строка вызывается при смене моды, но она меняется же не на постоянной основе, а только при смене диапазона. Это WSJT-X так посылками спамит получается?
Частоты брал из https://digital.gov.ru/uploaded/files/prilozhenie-k-resheniyu-gkrch—15-35-02.pdf , разве появилась более свежая редакция? если да то прошу поделиться.
Ну, по крайней мере, на 3573 частота FT8, а ширина CW там точно не подойдет )
Вечером сниму и выложу на ютуб поведение экрана при раскомментированной строке 312, поставлю приоритет USB пониже, чтобы было лучше видно. Насчет спама не уверен, но в дебаге много нераспознанных команд.
Пришлите ещё, пожалуйста, версию WSJT-X и какие команды не находит.
Версия 2.0.1. Вчера было вроде бы больше команд, сейчас unknown только FT1 и VS1. Еще трансивер стал переходить на передачу при открытии отладочного порта ), а при закрытии щелчок в наушниках.
Возможно, это потому что нужно драйвера com-портов на Ваши обновить, но они без подписи, потом с ней буду разбираться.
Это я тут в дев-ветке экспериментировал с управлением через DTR, теперь DTR на дебаг-порту управляет CW ключом, сегодня доделал.
В терминале, где смотрите отладку DTR отключите и не будет донимать.
А Если 312 строку на LCD_displayTopButtons(false); менять, какой эффект?
Вечером попробую, но пропадания прорисовки пропали после закомментирования.
Многократно перерисовывается не вся верхняя часть экрана, а только кнопки. Закомменировал, все стало отлично. Видимо, лишняя команда все-таки в этом месте )
Если без неё, может быть ситуация, когда бенд-мап выключен, через CAT мода изменилась, а в верхнем меню это не отобразилось.
Тогда, возможно, стоит проверять предыдущее состояние кнопок и перерисовывать только изменившиеся? Эта многократная перерисовка очень заметна, причем чем ниже приоритет USB, тем она заметнее.
А достаточно ли у процессора остается ресурсов, чтобы всю отрисовку делать не прямо в видеопамять, а в промежуточный массив, который потом по DMA передавать в видеопамять? Т.к. практически на всех меню очень заметна перерисовка, ибо против приоритетов прерываний не попрешь ) А так можно даже несколько массивов хранить, если памяти хватит.
Мне сложно это сделать, т.к. я вообще перерисовки не вижу во время работы с JTDX/WSJT, но попробую сделать «на ощупь», добавлю проверок)
А насчёт промежуточных массивов — памяти не хватит, нужно 320*240*16бит=153 600 байта. Сейчас перевёл заполнение квадратов и экрана цветом на DMA, тоже должно заметно ускорить работу.
Почему же у меня эта перерисовка так заметна? Тайминги FSMC сильно не отличаются от Ваших, скорее всего дело в неоптимальной инициализации контроллера дисплея, которая передрана с китайского диска с примерами от платы stm32f103rbt6 ) На выходных повожусь с кодом в этом направлении, давно его пора привести в порядок для работы с Вашим проектом. Там отличается следующее: адрес для обмена данными, блок инициализации, команды ориентации экрана и установки области курсора. Вышлю Вам код, как подготовлю его.
Понял, у вас в WSJT в настройках CAT стоит мода USB по умолчанию, выключите, чтобы трансивер мог по бендмапу сам выбирать. Поэтому он сначала выбирает моду из бендмапа (когда WSJT меняет частоту), а потом WSJT досылает моду, и она переключается в USB.
Стояла мода Data\Pkt, сейчас выключил, больше не досылает.
FPGA еще раз скачал, перенес свою распиновку, залил и тишина, точнее — шум. Лишь по центру красная полоса.
Пока даже идей нет что это может быть, по сути изменения не такие кардинальные, отброшен лишний бит в смесителе RX и объединён NCO.
А если в качестве эксперимента я Вам выложу свою распиновку (только скажите, в каком виде), Вы откомпилируете прошивку и я ее залью с свою плату, тогда можно будет понять, на каком этапе возникает проблема. Возможно, у меня что-то с квартусом, но предыдущие версии прошивок работают без проблем.
Без проблем, проставляйте в пинпланнере всё что необходимо, скидывайте мне файлик UA3REO.qsf на почту XGudron(собакен)gmail.com
В ответ пришлю JIC файл с прошивкой
Залил, то же самое. Мистика какая-то )
Скомпилировал только что выложенную dev версию, такой же шум, но появились однотонные писки в случайные моменты времени.
2 раза вчера отвечал на сообщение, но ответ так и не отобразился )
Залил присланный файл, все то же самое. Скачал обновленную dev-версию, прошился, такой же шум, только добавились попискивания в рандомные моменты времени.
Короче, все это время я пытался принимать с реле в положении передачи )) У меня то оно инверсное относительно Вашего варианта, и в 1.2 я выход на пин реле подавал в обход элемента НЕ, а в эти разы что-то про него и позабыл )
О, это хорошие новости)) как в целом приёмный тракт сейчас? стоит в релиз включать? попробовал частоту аудио к 48000 подбить, но пришёл к выводу, что нужен кварц на 49.152MHZ нужен, чтобы получить 48000 делением степенью двойки, иначе либо АЧХ едет, либо щелчки идут. Заказал с китая вот, жду.
С моей антенной трудно судить об чувствительности, но я бы не сказал, что общая картина кардинально улучшилась. По сравнению с предыдущей редакцией софта для плис есть некоторая проблема, сейчас сниму на видео и вышлю почтой ссылку, на водопаде есть проседания уровней в одном и том же месте на всех диапазонах. Также в нулевом положении линия на водопаде, желтая или красная.
Появление полосы это наоборот хорошо и знак увеличения чувствительности)
Вы теперь принимаете помехи от аудио-кодека и смещение FFT по постоянному току (нулевые биения), которые как раз думаю как автоматически компенсировать. Проседания уровней также похоже на то что теперь видны нелинейности АЧХ CIC и компенсатора, проверю, спасибо!
Обновился до dev-версии, пропала связь с fpga. Залил в stm32 предыдущую прошивку от 27 марта — все работает.
в последних версиях появилась поддержка ARM компилятора 6й версии, попробуйте в нём скомпилировать.
Компилировал 6-м.
А тест связи при запуске тоже не работает? или только сама передача звука?
В основном тест завершается на 1-м пине, пару раз было на 2-м. Пробовал подкидывать fpga.c из предыдущей версии, но в итоге те же ошибки теста.
Интересно… а с 5м компилятором ничего не меняется?
Обмен данными с fpga появился, но теперь тормозит вывод на экран (уровень оптимизации 3, как и был раньше).
На 6м компиляторе пришлось переписать функции работы с тактованием шины, больше с FPGA изменений не было.
https://github.com/XGudron/UA3REO-DDC-Transceiver/commit/d47cf97dafd5b478d5e0c2ee698d25d25b0c6570#diff-619b8a5869456d9a4048c7258257f29e
В функциях FPGA_clockRise/FPGA_clockFall у вас правильно пины прописаны?
clk и sync у меня не отличаются от Ваших. Сейчас решил еще раз перекомпилировать на 6-м, заработало ) Пробовал разные варианты оптимизации, работает, остановился на О3. Не понял что-то, чего ему вчера надо было )
BUF сейчас горит постоянно.
Так, BUF на приём загорается, когда DMA кодека просит данных, а аудио-процессор их ещё не подготовил.
Пришлите, пожалуйста, значения отладочных переменных из stm32f4xx_it.c:
FPGA Samples
Audio DMA samples
Audioproc cycles A
Audioproc cycles B
Audioproc timer counter
FPGA Samples 46852
Audio DMA samples 47104
Audioproc cycles A 185
Audioproc cycles B 186
Audioproc timer counter 18455
В целом всё ок, должен успевать, странно.
Попробуйте уменьшить интервал срабатывания таймера TIM5 (тот что аудиопроцессором заведует).
в IQ моде тоже BUF горит? или только LSB/USB?
BUF пропадает при переключении моды, неважно на какую.
При смене моды в буффере ничего не меняется, единственное предположение — вызывается LCD_redraw который перекрашивает экран и надпись исчезает.
Может с буффером всё ок, просто статус на экране не обновляется. Когда буфер горит, чему переменная WM8731_Buffer_underrun равна?
Сейчас вот сижу, ковыряю код ili9325, при очередной прошивке FPGA BUS PIN 0 ERROR )