Не дает мне покоя конвертер RGB в VGA(HDMI) от АлексЕкб. Есть у него преимущества относительно других конвертеров, о которых я рассказал в предыдущей статье:
- очень стабильная работа;
- не требователен к подключению, не нужны экранированные провода, но длина их все ровно должна быть максимально короткой;
- логика работы полностью на программном уровне и ее, теоретически, можно поменять.
Главный его недостаток - это несовместимость с Орионом-ПРО, т.к. этот конвертер создавался исключительно для ZX Spectrum совместимых компьютеров. Соответственно несовместимость в разрешении экрана, размерах буферов памяти, частотой входного сигнала от Ориона-ПРО и много еще разных мелочей.
Вот он собранный конвертер на базе микроконтроллера RP2040 модуля Raspberry Pi Pico:
Конвертер подключается в разъем "X4 Video". Если есть необходимость в раздельных строчных и кадровых импульсах, то их можно получить отдельно на 9 и 10 контактах микросхемы D17. Я подключил именно так, используя раздельные ССИ и КСИ, но синхросмесь также будет работать.
Я уже в предыдущих статьях писал, что есть прошивка для этого конвертера с разрешением 800 на 600 и увеличенным буфером памяти. Простым перебором настроек можно добиться вполне стабильного отображения на экране, но большинство пикселей потеряны и пользоваться таким отображением просто не удобно:
Очень долго я пытался разобраться в логике работы этого конвертера. Несколько раз полностью бросал эту затею, а потом снова возвращался к нему. Мог неделю вечерами ставить эксперименты, но ничего не получалось. Причина, по которой я возвращался к нему, была в том, что другие варианты подключения Ориона-ПРО меня не устраивали.
Вот то, что я получал с разными переделками:
Алекс создал великолепную прошивку, которая отлично работает на ZX Spectrum совместимых компьютерах, да и не только. Его переделанный вариант работает на Радио-86РК, ЮТ-88, Специалисте, но не на Орионе с его 10 МГц.
Я каждый раз упирался в быстродействие микроконтроллера RP2040. В итоге было принято решение перейти на микроконтроллер RP2350 модуля Raspberry Pi Pico 2. Raspberry Pi Pico и Raspberry Pi Pico 2 полностью совместимы по пинам, соответственно можно вынуть один и заменить его другим без каких либо переделок самого конвертера. У меня модуль был припаян, я просто собрал новый и сразу поставил Raspberry Pi Pico 2:
В итоге я получил более мощный микроконтроллер RP2350 с двумя новыми ядрами ARM Cortex-M33, почти в два раза больше оперативной и флеш памяти, более производительную шину. Для примера, первая пико стабильно работала на скорости 252 МГц, а на 260 МГц уже работать отказалась, вторая пика на 320 МГц работает стабильно и не сильно греется.
Далее я расскажу об изменениях в оригинальной прошивке от АлексЕкб. Можно не читать, а скачать готовый вариант в конце статьи.
Прошивка от Raspberry Pi Pico для новой версии конвертера не подходит, хотя я вычитал, что у Raspberry Pi Pico 2 есть обратная совместимость. Нужно обязательно пересобрать прошивку. Среду разработки я использую Arduino IDE. Про настройку этой среды я писал в статье по сборке ЮТ-88, повторять тут не буду. В той статье в менеджере плат я выбрал версию Raspberry Pi Pico/RP2040 3.9.5, эта версия не подходит для нового проекта, установить надо последнюю версию. На момент написания статьи актуальная версия 5.5.0.
За основу я взял прошивку из Github от АлексЕкб. В меню "Инструменты" необходимо выбрать плату "Raspberry Pi Pico 2", указать порт, если плата подключена к компьютеру, и указать режим оптимизации "Optimize More (-O2)".
Прошивка из Github на версии Raspberry Pi Pico/RP2040 5.5.0 не соберется. Требуется поменять в файле g_config.h #include "pico/platform.h" на #include "pico.h". Теперь можно скомпилировать и загрузить новый скетч в конвертер.
Естественно, что ничего не поменялось, проблемы изображения практически такие же, как и на первой версии Raspberry. Первым делом решил поднять частоту микроконтроллера. В оригинальной прошивке - это 252 МГц. Т.к. с Орион-ПРО приходит 10 МГц я решил пробовать частоты кратные 10. На 320 МГц без изменения исходного кода программы изображение на экране стало стабильным и все символы стали читаться, но некоторые артефакты все ровно присутствуют. Дело в том, что для разрешения 640 на 480 стандартный пиксельный клок 25.175 МГц, системная частота 252 МГц идеально подходит для этого разрешения, делитель 10, но совсем не подходит для Орион-ПРО, мы не увидим на экране часть пикселей. А при частоте 320, чтобы получить 25.175 МГц делитель будет 12.71, что также сказывается на изображении. Такой делитель дает погрешности, которые хорошо видны в виде задвоения некоторых пикселей, но, при этом захват отрабатывает и потерь нет (две фотографии):
Моя задача была подобрать частоту для RP2350, чтобы корректно отрабатывал механизм захвата сигнала от Ориона-ПРО. 320 МГц оказалась вполне комфортной для данного чипа и для захвата.
Для разрешения 800x600x60Гц стандартный пиксель клок уже 40 МГц, тут не возникает никаких погрешностей при использовании 320 МГц и изображение должно быть без каких либо искажений. Но мне потребовалось увеличить буфер и переписать немного логику формирования VGA. Результат очень порадовал, каждый пиксель на своем месте:
Кстати, когда я разбирался с прошивкой для RP2040, для разрешения 800x600 мне пришлось уменьшить системную частоту до 240 МГц, возникли проблемы с началом кадра и изображение постоянно прыгало по вертикали. Алгоритм захвата "захлебывался". Увеличение частоты до 260 МГц часто превращал микроконтроллер в "кирпич", но правда иногда он запускался, при этом все ровно не хватало производительности, т.к. изображение продолжало дергаться.
Разрешение 800x600 хорошо подходит для разрешения Ориона 384x256, но 512x256 уже не влезает в пределы экрана. Каждый пиксель у меня выводится по два раза, иначе изображение получается слишком узким.
Решено реализовать разрешение 1024x768. Для этого разрешения требуется пиксельный клок 65 МГц. Ближайшие системные частоты, которые подошли бы для правильного захвата от Ориона (10 МГц) - это 260 МГц и 390 МГц. 390 МГц для RP2350 очень большой разгон и нет смысла его использовать. Для 260 МГц делитель для пиксельного клока получается ровно 4.0, в самый раз.
Чтобы изображение полностью заняло все пространство по вертикали, пришлось каждую строку пикселей выводить по три раза. При разрешении Орион-ПРО 384x256 изображение на экране выглядит так:
При разрешении Орион-ПРО 512x256 изображение на экране выглядит так:
В моем мониторе имеется возможность растянуть изображение на весь экран, режим "Широкоформатный":
Теперь при разрешении Орион-ПРО 384x256 изображение на экране выглядит более растянутым:
А вот 512x256 теперь занимает всю область экрана:
Мои настройки конвертера в программе setupGUI.exe:
Еще одна проблема, с которой я столкнулся, это не правильное позиционирование, если видео сигнал от Ориона-ПРО начинает приходить до включения конвертера. Изображение стало прижиматься к левому краю. И это не зависимо от настроек смещения в setupGUI.exe. Если последовательность включения изменить, то позиционирование было корректно.
Любое вмешательство и без того нагруженного цикла захвата приводило к не стабильной работе. В итоге я нашел способ вставить в полне работающий "костыль" в механизм захвата. Но есть один побочный эффект: при старте Орион-ПРО, когда конвертер запущен, изображение на секунду смещается сильно влево, а затем уже правильно позиционируется. Когда конвертер уже запитан от Орион-ПРО этот эффект увидеть невозможно.
Для старых мониторов я собрал отдельную прошивку с соотношением сторон 3x4, ее можно скачать по ссылке в конце статьи.
Итого в прошивке сделано:
- системная частота 260 МГц;
- исправлены недочеты в выделении памяти;
- вырезан весь механизм HDMI,
- убрана 3x буферизация (не важно что выбрано в настройках, всегда будет 1x);
- увеличен буфер для разрешений Ориона-ПРО;
- реализовано разрешение VGA 1024x768;
- исправлено сохранение настроек на внутреннюю flash, т.к. на RP2350 возникали проблемы и туда попадал мусор при высокой системной частоте;
- добавлен механизм коррекции позиционирования изображения при старте.
Вот несколько фотографий изображений на экране разных программ:
Подключенный конвертер к Ориону-ПРО:
Думаю, что с видео отображением Ориона-ПРО я окончательно разобрался.
Вытянутая прошивка для широких мониторов.
Прошивка с соотношением сторон 3x4.
Переделанный исходный код прошивки (ZIP файл).
PS: Может у кого-то получится с этой прошивкой оживить RP2040, у меня не получилось. Естественно ее надо пересобрать под этот микроконтроллер.