Как подключить vga к arduino
Перейти к содержимому

Как подключить vga к arduino

  • автор:

VGA на Arduino

VGA на Arduino

VGA это сокращение от Video Graphics Array, протокола отображения видео, который часто встречается в мире электроники. В VGA используется одна «частота следования пикселей» и установленная частота вывода видео данных горизонтально, строка за строкой, пока весь кадр не будет отображен, а потом всё начинается снова. В прошлом я построил много проектов основанных на VGA, но никогда не использовал его с Arduino, поэтому в этом проекте мы будем использовать платформу Arduino UNO для имитации VGA сигнала при помощи непосредственно С кода. Это абсолютно не похоже на то, как это реализовано в видеокартах, но это интересная задача, чтобы увидеть, на сколько хорошо мы знаем и понимаем Arduino и AVR микроконтроллеры, а также VGA протокол. Работа устройства показана на видео.

Цель и обзор этого проекта

Целью данного проекта является использование Arduino UNO для вывода стандартного изображения с красным, зеленым и синим цветом на компьютерный VGA монитор. Кроме Arduino UNO я использовал небольшую плату с VGA разъемом, которую я сделал для своего предыдущего проекта «Видеокарта для мазохиста», чтобы легче подключать монитор. Для того, чтобы вывести красный, зеленый и синий цвета на компьютерный VGA монитор, мы должны договориться о разрешении, которое мы будем пытаться имитировать. Например, 800×600 удобно, т.к. используются целые круглые числа, и частота следования пикселей составляет 40МГц. И можно имитировать VGA разрешение 800×600 и выводить 200 линий красного, 200 линий зеленого и 200 линий синего цветов. Поскольку Arduino UNO работает на частоте 16МГц, невозможно получить доступ к каждому пикселю, поэтому мы будем выводить целиком линии. Элементы:
Arduino UNO
Плата с VGA разъемом
Перемычки (провода)
Компьютерный VGA монитор
Разъем для батареи +9В
Разъем для батарей

Подробный список элементов

Плата с VGA разъемом

Все элементы, используемые в этом проекте перечислены выше, но основные элементы описаны более подробно. Arduino UNO
Arduino Uno это микроконтроллер, который делает всю работу в этом проекте, выполняет наш код и выдает VGA сигналы, соответствующие тому, что мы хотим вывести на монитор без особых проблем. Плата с VGA разъемом
Эта плата изначально была сделана для моего проекта Видеокарта для мазохиста, чтобы легко подключать монитор, но я пишу всё больше и больше статьей на тему VGA, поэтому он чрезвычайно полезен. Перемычки
Обычные перемычки. Мы будем использовать их для подключения Arduino к 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 наносекунды. VGA 800х600Так как каждая инструкция выполняется 62,5 наносекунды, и мы должны проводить синхронизацию в определенное время, важно, что каждое время с картинки выше делиться на 62,5 наносекунды, а это значит, что мы можем использовать инструкции с задержкой, чтобы получить идеальное время для синхронизации. VGA 800х600При использовании 800x600VGA, каждая строка заканчивается горизонтальным импульсом синхронизации, который сообщает монитору данные следующей строки. После синхронизации 601 линии, монитор ожидает импульс вертикальной синхронизации продолжительностью 4 линии. В этот момент есть пауза в 23 линии. Благодаря вертикальной синхронизации и задней площадки строчного гасящего импульса, линии отображаются, но информация о цвете не используется.

Аппаратная часть

Сборка схемы

Это наверно одна из самых простых собранных схем, о которых я писал. Берите Arduino UNO, перемычки и VGA разъем и начинайте сборку! Сборка схемы
На фотографии вы можете видеть все детали, необходимые для сборки схемы, приведенной ранее. Сначала подключите GND к 5 контакту VGA разъема. Потом подключите контакты красного, зеленого и синего цветов. Наконец, соединения Hsync и Vsync выполнены, и монитор может понять, в каком разрешении и в какой момент вы хотите отобразить что то на нём. Я использую плату от своего предыдущего проекта. О её изготовлении можно узнать здесь. Аппаратная часть готова. Давайте перейдем к программной части и посмотрим, как всё это реализовано.

Программная часть

Есть две основных части кода, которые вы увидите, объяснить и подробно описаны ниже:
— Цвет для циклов + Hsync
— Вертикальная синхронизация 3 цикла используются для создания трех различных цветов, которые отображаются на экране. Вот выдержка из кода для генерации 200 линий красного цвета. Время указано в комментариях, и вы можете легко увидеть соответствие.

while(i < 200)< //Green Color High GREEN_ON; //2.2uS Back Porch delayMicroseconds(2); __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t"); //20uS Color Data delayMicroseconds(20); // 1uS //Green Color Low GREEN_OFF; //Low //1uS Front Porch delayMicroseconds(1); // 1uS i++; //3.2uS Horizontal Sync HSYNC_HIGH; //HSYNC High delayMicroseconds(3); __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t"); HSYNC_LOW; //HSYNC Low //26.4uS Total >

В следующем отрывке кода видно, что вертикальная синхронизация выглядит почти так же, как вывод обычных горизонтальных линий. Разница в том, что вместо того, что бы считаться в пикселях, как Hsync (128 пикселей), вертикальная синхронизация считается в линиях (4 линии).

//VSYNC High VSYNC_HIGH; //4 Lines Of VSYNC while(i <4)< //2.2uS Back Porch delayMicroseconds(2); __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t"); //20 uS Of Color Data delayMicroseconds(20);// 20uS //1uS Front Porch delayMicroseconds(1); // 1uS i++; //HSYNC for 3.2uS HSYNC_HIGH; //High delayMicroseconds(3); __asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t"); HSYNC_LOW; //Low //26.4uS Total >//Clear The i counter i=0; //VSYNC Low VSYNC_LOW;

Это основная часть кода, но его больше, и вы можете ознакомиться с ним, скачав исходник. Мы написали программу, собрали аппаратную часть, и теперь пришло время проверить устройство и посмотреть на его работу!

Результат работы и примечания

На видео показан вывод VGA сигнала с Arduino UNO на компьютерный VGA монитор. Никаких уловок и трюков, просто работа программы, и сигналы синхронизации. Красный, зеленый и синий цвета появляются на мониторе сразу после включения питания без искажений. Надеюсь, этого достаточно, чтобы убедить вас, что эта система действительно работает, и мы выводим VGA 800×600 @ 60 Гц.

Обзор VGA на основе Arduino

Как вы уже поняли, VGA довольно трудно выводить при помощи Arduino в разрешении 800×600, а получение полноценной картинки используя только Arduino в принципе невозможно, но мы используем гибкость VGA в нашу пользу и выводим упрощенные вещи. На экран выводятся красный, зеленый и синий цвета, доказывая, что мы можем выводить упрощенный VGA. Что теперь делать?
Я не рекомендовал бы тратить слишком много времени на вывод VGA сигналов при помощи Arduino, так как это получается намного сложнее из-за требований к таймингам. В конечном счете вы, вероятно, разочаруетесь в этом методе. Есть много VGA контроллеров, с которыми Arduino может взаимодействовать, что сильно упрощает вывод вещей на VGA монитор. Я уверен, что есть Arduino shield, дающий такую возможность. Заключение
Если мы перечитаем цели данной статьи, то мы поймем, что у нас всё получилось. Три цвета на экране, как и ожидалось. Программа была довольно сложной, но реализуемой. Однако, динамический VGA выход намного интереснее.

  • VGA.rar (1 Кб)

Подключение Arduino к телевизорам и мониторам

Возможно ли подключать Ардуино к телевизорам и мониторам и получать при этом цветное изображение? Какое максимальное разрешение она может выводить? Возможно отрисовывать графику сравнимую с приставкой NES (при этом корректно выглядящую на современных мониторах с большим разрешением)?

Какой аналог на ARM способен обеспечить выполнение этих условий?

  • Вопрос задан более трёх лет назад
  • 27929 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 6

Всё же программная реализация вывода графики на монитор/телевизор — это то ещё извращение. Я бы на вашем месте смотрел в сторону ПЛИС с отдельной внешней видео-памятью, там сможете реализовать всё что душе угодно.
Если с ПЛИС принципиально связываться не хотите, то берите один из современных eMPU с встроенным LCD-контроллером. А уже к нему можно прицепить HDMI-трансивер (например, TFP410, как здесь www.starterkit.ru/html/index.php?name=shop&op=view&id=65 ) или Triple DAC для подключения к VGA.

Ответ написан более трёх лет назад
Нравится 3 1 комментарий
Открытый VGA/LCD-контроллер на Verilog можете посмотреть тут: opencores.org/project,vga_lcd
журналист, переводчик, программист, стартапщик

На офсайте есть библиотеки для разных видеоустройств, там подробности описаны:
arduino.cc/playground/Main/InterfacingWithHardware#Video

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Gameduino is a game adapter for Arduino (or anything else with an SPI interface) built as a single shield that stacks up on top of the Arduino and has plugs for a VGA monitor and stereo speakers.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

Да, сам подключал, только изображение ч/б 128х96, но вполне реально сделать простенькую приставку.
А вот и библиотека программного подключения через композитный вывод: arduino-tvout.

Ответ написан более трёх лет назад

Попробовал недавно данную библиотеку, и устройство. Вывел текст, пару геометрических фигур. Недостаток в том, что она черно-белым выводит и слишком малое разрешение. Подходит только для «поиграться» или в крайнем случае, вывести пару цифр\графиков на экранчике парктроника машины. Ну а плюсом будет то что состоит данная примочка из 2 резисторов и провода на конце которого разъем «тюльпан».

Когда я столкнулся с задачей вывода цветной графики с Arduino, то пришел к тому, что 100% нужен внешний шилд. Остановился на двух вариантах:

  1. Serial VGA Monitor Driver, занимает UART последовательный порт (вернее всего одну его передающую ногу). Я даже обрадовался, что всего по одной ноге можно передать всё, что угодно, и не занимать SPI-порт, который в моем проекте использовался для 2,4GHz радио-модуля. Но первая печаль в том, что эту шилду в Россию не доставляют, а вторая — нет настройки размера текста. Весь текст идет одним размером. serial-vga-5.jpg
  2. NovaVGA — крутая штука и есть доставка в Россию, но занимает весь SPI порт. Если дорог SPI, то придется использовать две платы Arduino и потом связывать обмен. Аналогичная печаль: нет настройки текста, нет русских символов, требуется допиливание вручную библиотеки символов в HEX. novavga_tetris.jpg

Я даже посмотрел в сторону Raspberry.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

продолжаю искать. Это дороговато и нет цвета

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

электроника

  • Электроника
  • +4 ещё

Как выбрать компактный цифровой микроскоп для пайки?

  • 1 подписчик
  • вчера
  • 59 просмотров

Подключение ESP. Подключение VGA монитора.

Рассмотрим подключение ESP8266 к VGA монитору. Схема подключения содержит всего 1 резистор и может быть повторена даже ребёнком. На монитор можно выводить данные с сенсоров и датчиков, например температурных или движения, или из интернета. Показаны способы подключения монитора к ESP для получения разных RGB цветов и оттенков.

Сегодня я покажу как подключить плату ESP8266 к VGA монитору, а потом будет урок как подключить к монитору и Ардуино. Подключение производится напрямую, без каких-нибудь дополнительных плат. Нам понадобятся всего 3 резистора. Но можно обойтись и одним. Два других нужны только для изменения цвета фона и цвета выводимого текста или графики.

Давайте посмотрим кусочек демо примера из библиотеки, а потом как обычно разберём как это работает. У меня сейчас подключен только красный цвет, поэтому всё в красных тонах.
А пока смотрим я расскажу, что можно будет сделать. Это правда мои хотелки, а возможно это или нет, я пока не знаю.

Я хочу сделать табло с выводом погоды и времени. И получать эти данные прямо из интернета, благо что эти примеры мы уже сделали, и надо просто скопировать код сюда. Или с внешних датчиков подключенных прямо к плате. Например, подключив датчик движения, можно будет оживлять экран, а при превышения значений, выводить значки тревоги. Подключившись к серверу новостей или курсу валют, пускать бегущую строку. Да ещё много чего можно придумать.
Посмотрели кусочек, а теперь будем разобраться как это всё сделать.
Я не буду сегодня рисовать схемы, а просто покажу картинки из самой библиотеки.
Подключив как показано на рисунке вы получите такие цвета.
Контакт D7 задействован всегда, вы можете менять разный цвет, но это основной канал вывода. Дополнительные оттенки можно сделать, подключив другие цвета к контактам D0 и D4. Результат будет выглядеть вот так.
А вот это основная схема подключения.

Теперь посмотрим как надо разделывать кабель. Цвета жил могут отличаться, поэтому надо обязательно прозванивать контакты. Основные провода отвечающие за RGB цвета более толстые и находятся в экране.
Все экраны надо соединить вместе и подключить к земле. Так же к земле надо подключить 5 и 10 контакт вилки кабеля.
У меня конечный результат получился вот такой.

Теперь рассмотрим скетч демо примера.
Я не буду рассказывать как он работает. Это сложный пример, и я загрузил его только для того что бы показать какую надо установить библиотеку.
Скачать её можно с GitHub или с моего сайта. Ссылка будет в описании.
Теперь я включу ещё раз демо пример, что бы более полно посмотреть возможности связки ESP – VGA монитор. Я здесь вывел три варианта цветов. Это основные цвета, но можно было бы вывести и оттенки.
Это видео получилось небольшое, Так как это просто знакомство с новыми возможностями подключения ESP и вывод данных на VGA монитор.
В чём мои разочарования.
Я думал что можно будет свести RGB цвета вмести и получить рисунок в качестве фотографии. Потому, что хотел сделать слайд шоу, подгружая из интернета или с SD карты.
Так же я хотел сделать вариант Умного зеркала, где будет выводиться разная информация, такая как новости, погода, список дел, напоминания, а зеркальную поверхность будет заменять камера.
Ну и пока я не разобрался как выводить на экран русский шрифт, но думаю, что это можно победить.
Я конечно ещё поищу в интернете информацию по этой теме и возможно найду ещё что-то интересное.
Это действительно может получиться очень интересный проект. Может вы что посоветуете интересного, что ещё можно вывести на экран монитора. Сделать такой dashboard, расписание, и т д.
Я видел, что кто-то таким способом запустил DOOM. Короче давайте вместе думать.

Если вам интересна эта тема, то я могу снять ещё много видео про Использование ESP и не только про это.
Объём вашего интереса, я буду оценивать по количеству лайков и комментариев. Чем их будет больше, тем быстрее выйдет новое видео.
Ну, а если вам нравятся мои уроки, то ставьте лайк и делитесь моими видео, с другими. Это очень поможет мне в продвижении канала, а меня будет стимулировать выпускать уроки чаще и интереснее.

Вы видите ссылки на видео, которые, я думаю будут вам интересны. Перейдя на любое из этих видео вы узнаете что-то новое, а ещё поможете мне. Ведь любой ваш просмотр — это знак YOUTUBE, что это кому-то интересно и что его надо показывать чаще.
Спасибо.
А пока на этом всё.

Подключение Arduino к VGA монитору. Ардуино проекты.

Рассмотрим подключение Arduino к VGA монитору. Схема подключения очень простая и содержит всего 3 резистора. Выводить можно не только основные RGB цвета, но и оттенки. Качество картинки на уровне игрушек 90 годов.

Как и обещал, показываю как подключить Arduino к VGA монитору. Это продолжение вот этого урока, где я подключал к монитору плату ESP 8266.
С подключением не должно возникнуть никаких проблем. Оно очень простое. Чуть больше резисторов чем в прошлом примере, а точнее на два. На схеме указано что резисторы идущие от вертикальной и горизонтальной синхронизации должны быть 68 Ом, но у меня таких не было, поэтому я поставил по 100 Ом.
Значение остальных резисторов тоже выше, это потому что напряжение в Ардуино 5 вольт, против 3.3 вольт у ESP.

Это небольшой отрывок примера из библиотеки с подключенной Ардуино NANO. Можно было бы подключить и UNO без разницы.
Как можно увидеть, что разрешение экрана совсем маленькое и поэтому всё смотрится не очень хорошо. Да чего я говорю. Смотрится очень плохо. Как будто откатились лет на 20.
В конце, для сравнения, я выведу на экран демо примеры с подключенными Ардуино NANO и Ардуино MEGA.
Качество при работе с Мега не на много лучше.

Вот посмотрите таблицу.

  • ESP — 512x480px
  • UNO — 192x80px
  • MEGA — 200x240px | 200x80px

Как видите, что если на ESP ещё можно думать о каком-то качестве, то с UNO или NANO без вариантов. К тому же только библиотека и небольшой пример съедает 95 процентов памяти. С Mega получше, но использовать мегу, для этого просто бессмысленно.
Так что если и использовать подключение к VGA монитору, то только с ESP или объединять несколько плат Ардуино. Одну для подключения к монитору, а другие для работы с датчиками.

Теперь давайте посмотрим как это всё собрать.

Вот картинки из документации к библиотеке. Здесь схемы подключения к Ардуино УНО и Ардуино Мега.
Все примеры из библиотеки работают с процессорами ATMega328 MCU (или выше) и не работает с ATTINY или ATMega168.
Как я уже говорил что разрешение можно получить с подключенной УНО 192x80px, а с MEGA 200x240px
Каждый пиксель может иметь всего 2 цвета.

Вывести можно только 2 цвета чёрный и основной. Основной – это тот цвет который подключен к к контакту 1 TX. И он может быть красным, зелёным или синим.
Для дополнительный цветов надо подключить два дополнительных провода к контактам 6 и 7 в УНО или 30 и 31 в МЕГА.

Теперь скачиваем VGAXUA эту библиотеку. Скачать её можно с GitHub или с моего сайта. Ссылка будет в описании. Она работает с UNO и MEGA.

Теперь посмотрим как надо разделывать кабель. Цвета жил могут отличаться, поэтому надо обязательно прозванивать контакты. Основные провода отвечающие за RGB цвета более толстые и находятся в экране.
Все экраны надо соединить вместе и подключить к земле. Так же к земле надо подключить 5 и 10 контакт вилки кабеля.
У меня конечный результат получился вот такой.

Теперь загрузим скетч демо примера и выведем одновременно работающие Ардуино НАНО и МЕГА.
Это видео получилось небольшое, Так как это просто знакомство с новыми возможностями подключения Ардуино и вывод данных на VGA монитор.
Что я понял после тестирования подключений ESP и ARDUINO.
Ни один не другой пример в таком виде для дальнейшего использования не пригоден. Но я не потерял надежду на использование не традиционных вариантов вывода информации. На очереди вывод на телевизор. И я надеюсь, что там мне и вам конечно же, повезёт больше.
Что то я скатился на совсем коротенькие видео. Как вам такие коротыши?

Спасибо всем кто написал комментарии к прошлому видео. Я вижу, что тема вас заинтересовала и если это наберёт так же много, то я постараюсь побыстрее снять видео о подключении к телевизору, а может и ещё что.
Ну, а если вам нравятся мои уроки, то ставьте лайк и делитесь моими видео, с другими. Это очень поможет мне в продвижении канала, а меня будет стимулировать выпускать уроки чаще и интереснее.
Вы видите ссылки на видео, которые, я думаю будут вам интересны. Перейдя на любое из этих видео вы узнаете что-то новое, а ещё поможете мне. Ведь любой ваш просмотр — это знак YOUTUBE, что это кому-то интересно и что его надо показывать чаще.
Спасибо.
А пока на этом всё.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *