Простой 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

Примечание:

  1. Для того чтобы избежать искажения изображения при приеме данных через UART, для VGA рекомендуется производить обмен данными с адаптером  в течении приблизительно 300-600 мкс после сигнала  вертикальной синхронизации VSYNC (во время обратного хода луча по кадру).
  2. Объема RAM памяти Mega8535 (512 байт) не достаточно для формирования Видео сигнала с разрешением 38x20 символов.

Алгоритм работы программы:

Пояснения по работе программы:

    Алгоритм рендеринга изображения достаточно традиционен, главное ноу-хау проекта в использовании для побитного вывода изображения – сдвигового регистра 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

Теория VGA сигнала

Генерация VGA сигнала на PIC

За дальнейшим развитием проекта следите за:  http://www.vga-avr.narod.ru/

Связаться с автором можно по электронному адресу: simple-vga@rambler.ru

Ибрагимов Максим Рафикович     

г. Тольятти   

20.10.2005 г. Откорректировано 6.2011

Hosted by uCoz