Простой VGA/Видео адаптер
(проект о формированию VGA сигнала при помощи 8-ми битных MCU фирмы AVR)
Эта статья была опубликована в Atmel Application Journal #6 Winter 2006
(Что, в свое время дало мне "хорошего пинка" в деле мотивации
совершенствования моих познаний в области микроконтроллеров).
Предыстория проекта.
Несколько месяцев назад, задавшись целью подключить VGA-монитор для вывода текстовых данных с микроконтроллерной системы сбора информации - я с удивлением обнаружил, что ничего сколько-нибудь "внятного" и доступного для повторения “ на коленке ” по этой теме в Интернете отсутствует.
Конечно, существуют промышленные платы стандарта PC-104, можно кое-что “нарыть” и на www.opencores.org для реализации на FPGA, есть графические контроллеры Fujitsu, кто-то здесь недавно на местной конференции предлагал за 5000$ проект на ACEX’е, но надо признать - все это страшно далеко от народа..
Хотелось что-то гораздо более “дешевое и сердитое”. Предварительные прикидки показывали, что из наиболее распространенных и достаточно быстродействующих микроконтроллеров подходит продукция фирмы ATMEL.
8-ми битное RISC ядро AVR обеспечивает пиковую производительность порядка 16 MIPS на тактовой частоте 16MHz. Плюс на подходе более скоростные семейства Mega48,88,168 поддерживающие официальную тактовую частоту 20MHz.При этом скорость вывода данных через стандартный порт ввода-вывода при FOSC = 16MHz командами вывода в порт (out portx..) 8 MIPS. К тому же я уже имел достаточный опыт разработки устройств на микроконтроллерах AVR. И я засучил рукава..
Результат своей работы я представляю на ВАШ суд.
Поставленная техническая задача:
Цель которую я поставил для себя, достаточно проста на первый взгляд:
Ограничившись одним корпусом распространенного MCU типа Mega8,16,8535
и т.д., и минимумом внешних элементов сконструировать символьный дисплей-адаптер с разрешением > 15x15 символов, который бы выводил информацию на VGA монитор при стандартных частотах VGA сигнала. Информацию символьный адаптер должен получать через стандартный USART порт микроконтроллера. Частота используемого микроконтроллера стандартная -16MHz.
Данная задача на данный момент успешно решена.Более того - проект несколько расширен и дополнен введением формирования обычного видео ч.б. (PAL/SECAM) сигнала. Т.е. в зависимости от положения джампера тип формируемого видео сигнала VGA либо Composite Video.
Фотографии и схемы проекта:
Ниже приводится принципиальная схема простого VGA/Video адаптера (откорректировано 28.06.2011):
Примечание
Принципиальная схема откорректирована, на старой схеме были ПЕРЕПУТАНЫ положение порта PAL-синхронизации и джампера PAL - VGA!Из-за этого в "железе" у многих схема НЕ РАБОТАЛА.
Так все это выглядит в железе, собранном на “коленке” за один час:
А вот что мы получаем на экране монитора:
И телевизора:
Технические характеристики проекта:
Технические характеристики VGA-адаптера:
Количество символов: 20 строк по 20 символов
Разрешение матрицы знакогенератора: 8x12 точек
Кодовая таблица знакогенератора: WIN 1251
Формируемый сигнал: VGA
Разрешение: 640x480
Частота кадровой синхронизации: 60Hz
Скорость обмена UART 19200 bps
Технические характеристики Video-адаптера:
Количество символов: 20 строк по 38 символов
Разрешение матрицы знакогенератора: 8x12 точек
Кодовая таблица знакогенератора: WIN 1251
Формируемый сигнал: Composite Video(PAL/SECAM)
Разрешение: 625 строк (чересстрочная)
Частота кадровой синхронизации: 50Hz
Скорость обмена UART 19200 bps
Тип используемого микроконтроллера: Mega8, Mega16, , Mega32, Mega8535 и т.д.
Тактовая частота микроконтроллера стандартная - 16Mhz
Примечание:
Алгоритм работы программы:
Пояснения по работе программы:
Алгоритм рендеринга изображения достаточно традиционен, главное ноу-хау проекта в использовании для побитного вывода изображения – сдвигового регистра SPI SPDR через бит MOSI. При этом образуется двухступенчатый конвейер рендеринга:
В то время, как последующий байт для рендеринга выбирается из памяти,
предыдущий байт выводится через сдвиговый регистр SPI SPDR MOSI..
Заключение:
Поскольку данный проект написан на С (WinAVR GCC), он легко масштабируем для увеличения разрешения и частот регенерации дисплея. Так, на микроконтроллерах Mega48,88,168 поддерживающих официальную тактовую частоту 20MHz возможно получение разрешения 20 строк по 25-30 символов при абсолютно той же схемотехнике (возможности оверклокинга автор намеренно не рассматривает). Применения проекта не ограничиваются одним лишь терминальным вариантом (смотрите примеры в папке examples) – не смотря на серьезную загруженность процессора регенерацией дисплея, оставшейся мощности вполне достаточно для организации обработки например нескольких цифровых и аналоговых сигналов и реакции на них, а также выдаче результатов их измерений на дисплей в real-time (охранные системы, АСУТП, КИПиА и т.д.). Автор располагает улучшенными вариантами подобных систем с разрешением символьного дисплея 40x24 символов в режиме VGA, работающими в коммерческих изделиях.
Вы можете свободно пользоваться материалами данной публикации в образовательных и некоммерческих целях. Все права на проект зарегистрированы. Перепечатка, публикация в Интернете, журналах, использование в коммерческих приложениях – возможна только после согласования с автором .
Файлы:
Исходные тексты проекта, примеры применения
Данный материал в формате "PDF"
Примечание
Исходники подкорректированы под WinAVR-20090313 portable ( "пофиксена" специфика команд: cbi, sbi, PRG_RDB etc.),
не устранены некоторые warnings, думаю они не критичны.
VGA_PAL_terminal_v1.3.zip от 28.06.2011 (скачать)
Полезные ссылки:Cornell University Electrical Engineering 476- Генерация видеосигнала на AVR
За дальнейшим развитием проекта следите за: http://www.vga-avr.narod.ru/
Связаться с автором можно по электронному адресу: simple-vga@rambler.ru
Ибрагимов Максим Рафикович
г. Тольятти
20.10.2005 г. Откорректировано 6.2011