Усилитель vga сигнала схема
Простой VGA /Видео адаптер
(Что, в свое время дало мне "хорошего пинка" в деле мотивации
совершенствования моих познаний в области микроконтроллеров).
Предыстория проекта.
Несколько месяцев назад, задавшись целью подключить VGA-монитор для вывода текстовых данных с микроконтроллерной системы сбора информации - я с удивлением обнаружил, что ничего сколько-нибудь "внятного" и доступного для повторения “ на коленке ” по этой теме в Интернете отсутствует.
Хотелось что-то гораздо более “дешевое и сердитое”. Предварительные прикидки показывали, что из наиболее распространенных и достаточно быстродействующих микроконтроллеров подходит продукция фирмы ATMEL.
Результат своей работы я представляю на ВАШ суд.
Поставленная техническая задача:
Цель которую я поставил для себя, достаточно проста на первый взгляд:
Ограничившись одним корпусом распространенного MCU типа Mega8,16,8535
и т.д., и минимумом внешних элементов сконструировать символьный дисплей-адаптер с разрешением > 15x15 символов, который бы выводил информацию на VGA монитор при стандартных частотах VGA сигнала. Информацию символьный адаптер должен получать через стандартный USART порт микроконтроллера. Частота используемого микроконтроллера стандартная -16M H z.
Данная задача на данный момент успешно решена.Более того - проект несколько расширен и дополнен введением формирования обычного видео ч.б. ( PAL / SECAM ) сигнала. Т.е. в зависимости от положения джампера тип формируемого видео сигнала VGA либо Composite Video .
Фотографии и схемы проекта:
Ниже приводится принципиальная схема простого VGA/ Video адаптера (откорректировано 28.06.2011):
Принципиальная схема откорректирована, на старой схеме были ПЕРЕПУТАНЫ положение порта PAL-синхронизации и джампера PAL - VGA!Из-за этого в "железе" у многих схема НЕ РАБОТАЛА.
Так все это выглядит в железе, собранном на “коленке” за один час:
А вот что мы получаем на экране монитора:
Технические характеристики проекта:
Технические характеристики VGA-адаптера:
Количество символов: 20 строк по 20 символов
Разрешение матрицы знакогенератора: 8x12 точек
Кодовая таблица знакогенератора: WIN 1251
Формируемый сигнал: VGA
Частота кадровой синхронизации: 60Hz
Скорость обмена UART 19200 bps
Технические характеристики Video -адаптера:
Количество символов: 20 строк по 38 символов
Разрешение матрицы знакогенератора: 8x12 точек
Кодовая таблица знакогенератора: WIN 1251
Формируемый сигнал : Composite Video(PAL/SECAM)
Разрешение: 625 строк (чересстрочная)
Частота кадровой синхронизации: 50Hz
Скорость обмена UART 19200 bps
Тип используемого микроконтроллера: Mega 8, Mega16, , Mega32, Mega8535 и т.д.
Тактовая частота микроконтроллера стандартная - 16Mhz
- Для того чтобы избежать искажения изображения при приеме данных через UART, для VGA рекомендуется производить обмен данными с адаптером в течении приблизительно 300-600 мкс после сигнала вертикальной синхронизации VSYNC (во время обратного хода луча по кадру).
- Объема RAM памяти Mega 8535 (512 байт) не достаточно для формирования Видео сигнала с разрешением 38 x 20 символов.
Алгоритм работы программы:
Пояснения по работе программы:
Алгоритм рендеринга изображения достаточно традиционен, главное ноу-хау проекта в использовании для побитного вывода изображения – сдвигового регистра SPI SPDR через бит MOSI . При этом образуется двухступенчатый конвейер рендеринга:
В то время, как последующий байт для рендеринга выбирается из памяти,
предыдущий байт выводится через сдвиговый регистр SPI SPDR MOSI ..
Поскольку данный проект написан на С (WinAVR GCC), он легко масштабируем для увеличения разрешения и частот регенерации дисплея. Так, на микроконтроллерах Mega 48,88,168 поддерживающих официальную тактовую частоту 20 MHz возможно получение разрешения 20 строк по 25-30 символов при абсолютно той же схемотехнике (возможности оверклокинга автор намеренно не рассматривает). Применения проекта не ограничиваются одним лишь терминальным вариантом (смотрите примеры в папке examples ) – не смотря на серьезную загруженность процессора регенерацией дисплея, оставшейся мощности вполне достаточно для организации обработки например нескольких цифровых и аналоговых сигналов и реакции на них, а также выдаче результатов их измерений на дисплей в real - time (охранные системы, АСУТП, КИПиА и т.д.). Автор располагает улучшенными вариантами подобных систем с разрешением символьного дисплея 40 x 24 символов в режиме VGA , работающими в коммерческих изделиях.
Исходники подкорректированы под WinAVR-20090313 portable ( "пофиксена" специфика команд: cbi, sbi, PRG_RDB etc.),
не устранены некоторые warnings, думаю они не критичны.
Полезные ссылки:
Ситуаций, когда необходимо расположить монитор на значительном расстоянии от компьютера, возникает много. Первая возникающая мысль – купить кабель большей длины. Вполне разумное решение, имеющее, однако, свои подводные камни.
Во-первых, максимальная длина VGA кабеля составляет 50 метров, дальше без искажений (а значит и докупки специальных компенсаторов) не обойтись. Кабель такой длины, безусловно, должен быть надлежащего качества, что ведет нас к «во-вторых» — цене. Казалось бы, ситуация безнадежная – либо терпеть ограничения, либо готовиться выложить круглую сумму за кабель.
Но здесь нас спасают бойцы британского инженерного фронта – компания Adder, предлагающая недорогое (даже для домашнего использования) решение, позволяющее передавать VGA сигнал на расстояние до 150 метров.
О «спасательном круге» – внутри.
Имя спасительному устройству – AdderLink LPV150 (от Line Powered Video, питание через подключение). Устройство, как и любой видео удлинитель, состоит из двух модулей – передатчика, подключающегося к источнику VGA видео, и ресивера (приемника), который располагается рядом с удаленным VGA дисплеем. Соединяются два модуля недорогой витой парой CAT5.
Питание обоих устройств осуществляется через USB подключение на стороне передатчика (дополнительного питания ресиверу не требуется, ток идет по витой паре). Максимальное разрешение видео составляет 1080p, чего хватит для практически любых целей.
Проблем с подключением не возникает, танцев с бубном не требуется – AdderLink LPV150 поддерживает DDC (канал передачи данных с дисплея на видеокарту и обратно, с его помощью видеоадаптер автоматически подстраивается под монитор для работы на оптимальном разрешении).
Теперь немного о габаритах устройства. И передатчик, и ресивер в буквальном смысле умещаются на ладони. Это позволит установить оба устройства незаметно для постороннего взгляда, что немаловажно, поскольку самим производителем удлинитель позиционируется как устройство для digital signage, рекламной технологии, подразумевающей вывод рекламной информации на один или несколько дисплеев в местах скоплений людей. Например, относительно недавно установленные в московском метро экраны или реклама в супермаркетах.
Для поклонников цифр – технические характеристики устройства списком:
Разрешение видео
До 1080p HD, включая 1080i & 720p
Дистанция работы
До 150 м
Коннекторы
Локальное устройство: VGA, USB (для питания), RJ45
Удаленное устройство: VGA, RJ45
Физические размеры
Передатчик: 45 мм, 63 мм, 21 мм (без кабелей)
Ресивер: 45 мм, 63 мм, 21 мм (без кабелей)
Питание
Питание по интерфейсному кабелю USB
Рабочая температура
0-40 С
Дополнительный плюс – независимость от ОС, поэтому установка производится в стиле plug-n-play и занимает несколько минут (или сколько времени требуется человеку, чтобы пройти 150 метров?).
Необходимость передачи SVGA-сигнала на большие расстояния появилась, наверное, одновременно с появлением этого стандарта. В сети можно найти достаточно большое количество публикаций, посвященных решению этой задачи, однако, судя по комментариям к этим материалам, после их изучения у читателей все равно остается ряд вопросов, ответы на которые не всегда легко найти.
Мне не раз приходилось подключать мониторы и телевизоры к источнику SVGA-сигнала, расположенному на расстоянии, превышающем типовые два метра. Чаще всего потребность в подобных удлинителях возникала неожиданно, причем в самый последний момент, когда времени на приобретение специализированных кабелей нужной длины, при условии, что они вообще существуют, уже не оставалось. Да и сам факт их приобретения не всегда соответствовал здравому смыслу, поскольку подобное подключение часто требовалось лишь для ограниченного периода времени, после чего дорогое оборудование просто бы валялось без дела.
Решение, предлагаемое в этой статье, относится к категориям «быстро» и «дешево». Для качественной передачи аналогового изображения по витой паре требуется использовать достаточно сложное оборудование, поэтому «чуда» от предлагаемого решения ожидать не следует. Однако, чаще всего «чуда» и не требуется. В моей практике, во многих случаях, если качество изображения на экране позволяло зрителям отличить человека от коровы, это уже было отличным результатом.
Когда необходимы SVGA-удлинители?
Чаще всего потребность в SVGA-удлинителях возникает во время проведения различных мероприятий на нестационарных или временных площадках, например, выставок или презентаций. В этом случае крупноформатный монитор или телевизор устанавливается в верхней части экспозиции, а формирующий изображение компьютер или ноутбук – на столе. Расстояние между компьютером и монитором в этом случае, с учетом всех особенностей монтажа проводов, может достигать 10 м, что значительно больше длины широкодоступных SVGA-кабелей.
Однажды мне довелось устанавливать подобную экспозицию в ресторане, в котором мой знакомый отмечал свадьбу. Молодожены сняли небольшой фильм о том, как они дошли до такой жизни, который во время банкета транслировался без звука с ноутбука на два больших телевизора. Длина кабеля, соединяющего источник видеосигнала с дальним телевизором, тогда составила около 25 м. Эта инсталляция просуществовала всего один вечер, после чего была полностью демонтирована.
Иногда потребность удлинить SVGA-кабель возникает и при долговременной стационарной эксплуатации компьютеров, например, для подключения телевизора или проектора, расположенного далеко от компьютера.
В некоторых случаях проектировщики мебели не всегда продумывают пути прокладки кабеля, соединяющего системный блок с монитором, из-за чего его длина оказывается больше стандартных двух метров. Выясняется это обычно тоже в самый последний момент, когда на столе уже расставлены фотографии детей и котов, а сотруднику нужно срочно выполнять свои функциональные обязанности. В этом случае, SVGA-удлинитель можно установить как временно – до приобретения специализированного кабеля нужной длины, – так и постоянно. Несмотря на очевидную «неправильность» такого решения, при небольших расстояниях (до 3 м) и использовании бюджетных мониторов с диагональю до 22 дюймов качество изображения оказывается вполне достаточным для длительной работы за компьютером и не вызывает дискомфорта или дополнительной усталости. Мне довелось несколько лет проработать за компьютером, монитор которого подключался к системному блоку с помощью UTP-кабеля длиной около 2.5 м – особенности моего стола не позволяли сократить это расстояние. И я не могу сказать, что качество изображения на экране как-то сказывалось на моем самочувствии или трудоспособности.
Наверное, единственной областью, в которой подобное решение использовать нельзя ни в коем случае, является область, связанная непосредственно с формированием изображений: полиграфия, графика, обработка видео и т.п. В этом случае искажения, вносимые витой парой, могут значительно повлиять на конечный результат. Однако, насколько мне известно, в подобных приложениях интерфейс SVGA из-за присущих ему ограничений используется далеко не всегда.
Зачем поднимать старую тему?
Интерфейс VGA был разработан компанией IBM в 1987 году. Буквально через несколько лет появилась его расширенная версия – SVGA (Super Video Graphics Array), которая стала неофициальным стандартом на несколько десятилетий. К сожалению, ограничения SVGA, в первую очередь, аналоговый способ передачи видеосигнала, не позволяют качественно передавать изображения с большим количеством элементов, поэтому с 2010 года этот стандарт считается устаревшим, и с каждым днем все больше производителей электроники прекращают его поддержку, используя вместо него более современные цифровые интерфейсы, например, HDMI.
Однако техника, поддерживающая интерфейс SVGA, все еще находится в эксплуатации и сможет качественно проработать не один год. Кроме того, даже в новом оборудовании производители нередко оставляют SVGA-разъемы, обеспечивающие совместимость со старым устройствами. Кроме того, интерфейс SVGA является простым и имеет неплохие технические характеристики, иначе его бы не использовали столько лет, поэтому установка его в простых приложениях позволяет удешевить аппаратуру, что является немаловажным в условиях рынка.
Кроме того, современные цифровые интерфейсы также имеют свои ограничения. Например, длина стандартного HDMI-кабеля не должна превышать десяти метров, хотя в продаже есть и пассивные кабели большей длины. Для передачи данных на большее расстояние необходимо применять дополнительные усилители, иногда встроенные непосредственно в кабель, или переходить с медного кабеля на оптический. Стоимость метра кабеля для интерфейсов SVGA и HDMI приблизительно одинакова и обычно намного больше стоимости метра простейших версий витой пары. Очевидно, что для простых приложений использование старых решений может оказаться экономически выгодней.
Таким образом, несмотря на наличие более современных технологий, на которые, без сомнения, нужно ориентироваться при выборе нового оборудования, можно прогнозировать, что интерфейс SVGA еще не один год будет активно использоваться в различных приложениях. Поэтому вопросы, рассмотренные в этой статье, все еще остаются актуальными, и, возможно, еще не одно поколение специалистов за несколько часов до начала очередной выставки будет искать быстрый и дешевый способ подключения монитора к ноутбуку или компьютеру.
Почему витая пара?
После массового распространения компьютеров витая пара, она же – хTP-кабель (UTP, STP или FTP со всеми разновидностями), стала одним из самых распространенных типов сигнальных кабелей. На сегодняшний день в кладовых любого ИТ-отдела можно обнаружить многометровые запасы этого кабеля, как абсолютно нового – в заводских бухтах, так и побывавшего в употреблении. Стоимость этого кабеля колеблется в широких пределах. При этом практика показывает, что даже самый дешевый неэкранированный UTP-кабель посредственного качества неплохо работает на небольших расстояниях. В сложных случаях, например, при большой длине линии связи или в напряженной электромагнитной обстановке, обычно используют более дорогие экранированные кабели (STP или FTP). Таким образом, практически у любого ИТ-специалиста всегда можно взять во временное пользование несколько десятков метров витой пары, чаще всего – совершенно бесплатно. В крайнем случае, требуемое количество UTP-кабеля можно легко купить – сейчас он продается даже в хозяйственных магазинах.
Подключить витую пару к видеоустройствам можно с помощью специализированных переходников (Рисунок 1), содержащих 15-контактные субминиатюрные разъемы DE-15 (их часто неправильно обозначают DB-15, DBН-15 или DB-15HD) для подключения к интерфейсу SVGA и RJ-45 для подключения к кабелю. В этом случае соединить удаленный монитор с компьютером можно всего за пять минут, не считая времени на прокладку кабеля. Для этого нужно просто обжать концы витой пары коннекторами RJ-45 с помощью инструмента, имеющегося в наличии у каждого специалиста, занимающегося обслуживанием информационных сетей.
Рисунок 1. | SVGA-переходник для подключения витой пары. |
Самые дешевые пассивные переходники просто соединяют проводники витой пары с нужными контактами SVGA-разъема, то есть, фактически, являются тем же решением, что и будет предложено ниже, только в фирменной упаковке. В более дорогих могут содержаться узлы, обеспечивающие согласование несимметричных каналов интерфейса SVGA с симметричной средой распространения сигналов. А самые дорогие активные адаптеры имеют дополнительные усилители и корректоры, позволяющие не только ощутимо улучшить качество изображения, но еще и передавать звук. Очевидно, что стоимость активных переходников будет намного выше пассивных. Кроме того, для них потребуется еще и дополнительный источник питания.
Рисунок 2. | Разъем DE-15 и корпус для установки на кабель. |
Простой SVGA-удлинитель с вполне удовлетворительным качеством передачи сигнала можно собрать и самому. Для этого достаточно всего двух разъемов DE-15 (Рисунок 2), обычно всегда присутствующих в наличии практически у всех продавцов электронных компонентов. В крайнем случае, эти разъемы можно снять с нерабочих мониторов или SVGA-кабелей – после аккуратного удаления внешнего пластикового компаунда активная металлическая часть этих разъемов может быть вполне пригодна для дальнейшего использования. Однако намного проще их купить в радиомагазине.
Схема SVGA-удлинителя
В последней версии интерфейса SVGA используются семь сигналов (Таблица 1), пять из которых (RED, GREEN, BLUE, H_SYNC и V_SYNC) предназначены для передачи изображения, а два (SDA и SCL) образуют информационный канал (Display Data Channel, DDC), позволяющий источнику видеосигнала определить тип и параметры устройства отображения информации. Кроме того, в последних версиях интерфейса DDC (E-DDC) предусмотрена возможность получения информации об оконечном видеоустройстве, даже когда оно выключено. Для этого на контакт 9 разъема SVGA подается постоянное напряжение +5 В, используемое для питания внешних узлов системы E-DDC.
Таким образом, для реализации полноценного SVGA-удлинителя, поддерживающего все функции этого интерфейса, необходим кабель, содержащий не менее девяти проводов: общий провод, семь проводов для передачи информационных сигналов и один провод для питания узлов интерфейса DDC. Создать такой удлинитель можно только на основе экранированных кабелей FTP или STP (Рисунок 3), поскольку в неэкранированном кабеле UTP всего восемь токопроводящих жил.
Рисунок 3. | Схема полнофункционального SVGA-соединителя на основе кабеля FTP или STP, позволяющего передать сигналы на небольшие расстояния. |
Однако подобный удлинитель будет нормально работать только при небольших длинах кабеля, не превышающих нескольких десятков сантиметров, а для таких длин нет никакого смысла использовать витую пару. Дело в том, что максимальная частота видеосигналов RED, GREEN и BLUE может превышать 100 МГц, а распространение сигналов с такой частотой происходит уже исключительно с помощью электромагнитных волн даже при использовании медных кабелей. Поэтому при передаче видеосигналов следует особое внимание уделять линиям связи.
Еще одним высокочастотным сигналом, критичным к качеству кабеля, является сигнал горизонтальной синхронизации H_SYNC. И хотя его частота намного меньше, а энергетический уровень больше (размах сигнала H_SYNC равен 5 В, в то время как размах видеосигналов RED, GREEN и BLUE не превышает 1 В), проникновение помехи в этот канал может привести к серьезному ухудшению качества изображения, проявляющемуся в «дрожании» вертикальных линий, вплоть до срыва синхронизации.
Из-за этого в специализированных SVGA-кабелях сигналы RED, GREEN, BLUE и H_SYNC передаются по отдельным коаксиальным линиям с волновым сопротивлением 75 Ом (Рисунок 4), позволяющим как максимально защитить каналы от внешних электромагнитных помех, так и максимально уменьшить взаимную интерференцию сигналов. Остальные сигналы (V_SYNC, SDA и SCL) являются относительно низкочастотными и не требуют для передачи каких-либо специализированных линий связи.
Рисунок 4. | Схема специализированного SVGA-кабеля (красным цветом показаны цепи, связанные с общим проводом). |
Однако витые пары являются симметричными линиями с волновым сопротивлением 100 Ом, поэтому, если просто подключить их к разъемам SVGA, то в местах соединения кабеля возникнут отражения сигнала, которые приведут к появлению повторов на изображении, расстояние между которыми будет пропорционально длине кабеля. Максимально уменьшить это повторы можно только с использованием специализированных узлов, обеспечивающих согласование как типов линии (симметричная/несимметричная), так и волновых сопротивлений (75/100 Ом) (Рисунок 5).
Рисунок 5. | Принцип согласования несимметричного канала SVGA с симметричной линией витой пары. |
Кроме того, паразитная емкость кабеля, пропорциональная его длине, приведет к ослаблению высокочастотных компонентов сигнала, что станет причиной уменьшения четкости и «размытия» изображения. Поэтому в идеальном случае на входе и выходе кабеля нужно поставить не только согласователи, но и корректоры АЧХ канала.
Таким образом, при передаче SVGA-сигнала по витой паре на большие расстояния приходится идти на компромиссы. Первый компромисс заключается в задействовании трех витых пар для передачи сигналов RED, GREEN и BLUE (Рисунок 6). Оставшиеся два проводника используются для передачи сигналов синхронизации, причем обратные токи сигналов H_SYNC и V_SYNC будут протекать по обратным проводам каналов видеосигналов.
Рисунок 6. | Схема SVGA-удлинителя на основе витой пары (при использовании неэкранированного кабеля UTP экран кабеля не подключается). |
Такой вариант является не самым лучшим с точки зрения теории связи, однако в этом случае следует учесть одну особенность аналоговых видеосигналов, заключающуюся в передаче сигналов синхронизации во время обратного хода луча, когда информация об изображении не передается. Из-за этого взаимное влияние видеосигналов и сигналов синхронизации минимально и не приводит к ощутимому ухудшению качества изображения (в композитном видеосигнале сигналы синхронизации и изображения передаются в одном канале, совершенно не мешая друг другу).
Таким образом, только для передачи видеосигнала необходимо задействовать все восемь проводников витой пары. Из-за этого возможностей для передачи сигналов DDC уже не остается. Это является вторым компромиссом, на который приходится идти при использовании подобных удлинителей. Источник видеосигнала теперь никогда не узнает, что за устройство подключено к разъему SVGA и в каких режимах оно может работать. Эти настройки придется вводить вручную, и, возможно, для этого придется отключить функцию Plug-and-Play, чтобы убрать ограничения, накладываемые на неизвестные устройства. К счастью, это никак не ограничивает основной функционал рассматриваемой системы – передачу изображения.
Какие пары кабеля использовать для передачи конкретных сигналов – дело вкуса монтажника. Например, оранжевую пару можно использовать для передачи сигнала RED, зеленую – для GREEN, синюю – для BLUE и коричневую – для H_SYNC и V_SYNC, но это не принципиально, поскольку витые пары кабелей xTP имеют приблизительно одинаковые электрические характеристики и отличаются лишь шагом скрутки.
VGA это сокращение от Video Graphics Array, протокола отображения видео, который часто встречается в мире электроники. В VGA используется одна "частота следования пикселей" и установленная частота вывода видео данных горизонтально, строка за строкой, пока весь кадр не будет отображен, а потом всё начинается снова.
В прошлом я построил много проектов основанных на VGA, но никогда не использовал его с Arduino, поэтому в этом проекте мы будем использовать платформу Arduino UNO для имитации VGA сигнала при помощи непосредственно С кода. Это абсолютно не похоже на то, как это реализовано в видеокартах, но это интересная задача, чтобы увидеть, на сколько хорошо мы знаем и понимаем Arduino и AVR микроконтроллеры, а также VGA протокол. Работа устройства показана на видео.
Цель и обзор этого проекта
Целью данного проекта является использование Arduino UNO для вывода стандартного изображения с красным, зеленым и синим цветом на компьютерный VGA монитор. Кроме Arduino UNO я использовал небольшую плату с VGA разъемом, которую я сделал для своего предыдущего проекта «Видеокарта для мазохиста», чтобы легче подключать монитор.
Для того, чтобы вывести красный, зеленый и синий цвета на компьютерный VGA монитор, мы должны договориться о разрешении, которое мы будем пытаться имитировать. Например, 800x600 удобно, т.к. используются целые круглые числа, и частота следования пикселей составляет 40МГц. И можно имитировать VGA разрешение 800x600 и выводить 200 линий красного, 200 линий зеленого и 200 линий синего цветов. Поскольку Arduino UNO работает на частоте 16МГц, невозможно получить доступ к каждому пикселю, поэтому мы будем выводить целиком линии.
Элементы:
Arduino UNO
Плата с VGA разъемом
Перемычки (провода)
Компьютерный VGA монитор
Разъем для батареи +9В
Разъем для батарей
Подробный список элементов
Все элементы, используемые в этом проекте перечислены выше, но основные элементы описаны более подробно.
Arduino UNO
Arduino Uno это микроконтроллер, который делает всю работу в этом проекте, выполняет наш код и выдает VGA сигналы, соответствующие тому, что мы хотим вывести на монитор без особых проблем.
Плата с VGA разъемом
Эта плата изначально была сделана для моего проекта Видеокарта для мазохиста, чтобы легко подключать монитор, но я пишу всё больше и больше статьей на тему VGA, поэтому он чрезвычайно полезен.
Перемычки
Обычные перемычки. Мы будем использовать их для подключения Arduino к VGA монитор. Также можно использовать провода со штырьками или крокодильчиками.
Обзор схемы
Это один из тех случаев, когда схема проекта очень мала, потому что большая часть работы происходит в программе. Несколько необходимых соединений показаны на схеме.
Особенности схемы
RGB соединения
В VGA используется смешивание красного зеленого и синего цветов для получения всех цветов радуги. Параметры на каждом из этих контактов показывают монитору, насколько интенсивно должен гореть этот цвет. Мы не регулируем интенсивность цвета, поэтому у нас всегда для каждого из цветов 100% красного, 100% зеленого или 100% синего.
Hsync и Vsync соединения
Для того чтобы знать, какая линия сейчас отображается и завершен ли кадр, используется два сигнала синхронизации: горизонтальная синхронизация H-SYNC и вертикальная синхронизация V-SYNC. Это самые важные сигналы, и если их тайминги будут нарушены, то VGA выход не будет работать как надо.
GND соединения
В VGA разъеме есть много GND выводов для разработчиков, чтобы сделать профессиональный VGA контроллер. Но для того, что мы делаем, нужно всего лишь подключить GND к 5 контакту. Всё!
Основы теории VGA
В спецификации VGA описывается отображение цветовых данных, горизонтальной и вертикальной синхронизации, и об определенном времени на каждое действие, которое нельзя пропускать.
Arduino UNO тактируется кварцевым генератором 16МГц и одна инструкция выполняться за один цикл, что означает, что каждая инструкция в нашей программе будет выполняться точно за (1/16000000) секунды или примерно 62,5 наносекунды.
Так как каждая инструкция выполняется 62,5 наносекунды, и мы должны проводить синхронизацию в определенное время, важно, что каждое время с картинки выше делиться на 62,5 наносекунды, а это значит, что мы можем использовать инструкции с задержкой, чтобы получить идеальное время для синхронизации.
При использовании 800x600VGA, каждая строка заканчивается горизонтальным импульсом синхронизации, который сообщает монитору данные следующей строки. После синхронизации 601 линии, монитор ожидает импульс вертикальной синхронизации продолжительностью 4 линии. В этот момент есть пауза в 23 линии. Благодаря вертикальной синхронизации и задней площадки строчного гасящего импульса, линии отображаются, но информация о цвете не используется.
Аппаратная часть
Это наверно одна из самых простых собранных схем, о которых я писал. Берите Arduino UNO, перемычки и VGA разъем и начинайте сборку!
Сборка схемы
На фотографии вы можете видеть все детали, необходимые для сборки схемы, приведенной ранее. Сначала подключите GND к 5 контакту VGA разъема. Потом подключите контакты красного, зеленого и синего цветов. Наконец, соединения Hsync и Vsync выполнены, и монитор может понять, в каком разрешении и в какой момент вы хотите отобразить что то на нём. Я использую плату от своего предыдущего проекта. О её изготовлении можно узнать здесь.
Аппаратная часть готова. Давайте перейдем к программной части и посмотрим, как всё это реализовано.
Программная часть
Есть две основных части кода, которые вы увидите, объяснить и подробно описаны ниже:
- Цвет для циклов + Hsync
- Вертикальная синхронизация
3 цикла используются для создания трех различных цветов, которые отображаются на экране. Вот выдержка из кода для генерации 200 линий красного цвета. Время указано в комментариях, и вы можете легко увидеть соответствие.
В следующем отрывке кода видно, что вертикальная синхронизация выглядит почти так же, как вывод обычных горизонтальных линий. Разница в том, что вместо того, что бы считаться в пикселях, как Hsync (128 пикселей), вертикальная синхронизация считается в линиях (4 линии).
Это основная часть кода, но его больше, и вы можете ознакомиться с ним, скачав исходник. Мы написали программу, собрали аппаратную часть, и теперь пришло время проверить устройство и посмотреть на его работу!
Результат работы и примечания
На видео показан вывод VGA сигнала с Arduino UNO на компьютерный VGA монитор. Никаких уловок и трюков, просто работа программы, и сигналы синхронизации.
Красный, зеленый и синий цвета появляются на мониторе сразу после включения питания без искажений. Надеюсь, этого достаточно, чтобы убедить вас, что эта система действительно работает, и мы выводим VGA 800x600 @ 60 Гц.
Обзор VGA на основе Arduino
Как вы уже поняли, VGA довольно трудно выводить при помощи Arduino в разрешении 800x600, а получение полноценной картинки используя только Arduino в принципе невозможно, но мы используем гибкость VGA в нашу пользу и выводим упрощенные вещи. На экран выводятся красный, зеленый и синий цвета, доказывая, что мы можем выводить упрощенный VGA.
Что теперь делать?
Я не рекомендовал бы тратить слишком много времени на вывод VGA сигналов при помощи Arduino, так как это получается намного сложнее из-за требований к таймингам. В конечном счете вы, вероятно, разочаруетесь в этом методе. Есть много VGA контроллеров, с которыми Arduino может взаимодействовать, что сильно упрощает вывод вещей на VGA монитор. Я уверен, что есть Arduino shield, дающий такую возможность.
Заключение
Если мы перечитаем цели данной статьи, то мы поймем, что у нас всё получилось. Три цвета на экране, как и ожидалось. Программа была довольно сложной, но реализуемой. Однако, динамический VGA выход намного интереснее.
Читайте также: