Текстовый VGA на Arduino Uno R4 Minima — библиотека RA4M1_VGA_Text v1.1.7-alpha + 11 демо
Принимайте новенького.
Ушёл примерно месяц работы - получилось то, что хочется показать. Это не классическая VGA-карта (без RAMDAC и внешней памяти), а эмуляция VGA-сигнала на одной Arduino Uno R4 Minima средствами её периферии. Пока только текстовый режим, графика в планах.
Что сделано
Библиотека RA4M1_VGA_Text v1.1.7-alpha выдаёт монохромный VGA 640×480 @ 60 Гц, текстовое поле 64×35 или 64×50 знакомест, шрифт CP866 8×8. Из железа - только три резистора на VGA-разъём и сама плата.
Как это работает
HSYNC - аппаратный, таймер, пин D9
VSYNC - программный GPIO, пин D8
Видеопоток - SPI1 на 24 МГц, пин D11, через делитель на зелёный канал VGA
Поток строится через два DMA-канала. Процессор в передаче не участвует, только готовит буфер следующей строки.
Ресурсы
Библиотека занимает ~14 КБ из 32 КБ RAM (текстовый буфер, 2 слота экранов, транспонированный шрифт, DMA-буферы). Свободно ~18 КБ под пользовательскую логику и данные игры. Слоты можно отключить #define VGA_SCREEN_SLOTS 0 — останется занято 7.7 КБ.
Что умеет
Текст: printf, printfAt, printAt, курсор с подчёркиванием
Графика знакоместами: drawBox, линии, fillRect/clearRect
Спрайты до 4×4 знакомест, режимы REPLACE/OVERLAY/SUBTRACT/XOR
Скролл региона в 4 направлениях
2 слота экранов: saveScreen/loadScreen с плавной или быстрой загрузкой
Колбэки в кадровом гашении для пользовательской логики
Пользовательский шрифт, инверсия, статус-бар с замером нагрузки CPU в реальном времени
Демо-пакет - 11 примеров
01_ScreenTest, 02_Functions, 03_Dynamic, 04_Rect, 06_SaveLoad, 07_Sprites, 08_Starfield, 09_ScrollRegion, 10_CustomFont, 11_LibraryTest, Snake. Все проверены на железе.
Видео звездного неба (08_Starfield) приложено к теме - видна плавность анимации и стабильность синхронизации.
В работе
Шрифт CP866 переделываю.
Синхронизация на некоторых мониторах с автозахватом не всегда адекватная. В процессе.
D2 и D3 заняты под подстройку позиции окна экрана..
Планы
4 цвета палитра или медленная палитра на 256 оттенков через ЦАП (A0) - фоны, градиенты, вспышки
Графический режим на той же архитектуре
Публикация на GitHub и на arduino.cc после стабилизации альфы.
Фото платы нет - разобрал, надо перепаять - разобраться с уровнями цветов, добавить 2 канала цвета, заложить канал звука и прочие мелочи. Что бы по 100 раз не переделывать плату.
Видео демо звездное небо.
Немного резюмируя - плата на самом деле унылая несмотря на мощное ядро. Памяти мало, пинов мало, DMA неполноценный. Но все тонкости прознал, когда был на середине пути. Поэтому решил добить. Получилось то, что получилось, я не совсем доволен. но поскольку на uno r4 minima библиотек мало, то пусть будет еще одна в копилку общую. Тем более с выводом на VGA монитор.

