3 April

Простая самодельная VGA видеокарта

Programming microcontrollersVideo cardsDIYElectronics for beginners
Насколько мне известно, довольно многим интересно подключить микроконтроллер к обычному монитору и попробовать что-либо вывести на экран. В этой статье пойдёт речь о создании простейшей VGA-видеокарты на базе микроконтроллера atmega168-20.

Вообще говоря, этому проекту сто лет в обед. Но когда-то я обещал рассказать про эту видеокарту и здесь, но всё было лень. Теперь пришло время исполнить обещанное.

Данная видеокарта выдаёт картинку разрешением 254x240 точек при 256 цветах. Работает вся эта штука в стандартном VGA режиме 640x480 при 60 Гц развёртки. Испытывал я эту видеокарту с 6 мониторами (1 ЭЛТ и 5 ЖК), при этом на всех мониторах карта работала, за исключением монитора фирмы Acer. Чем ему не понравился сигнал, я так и не понял.

В макетном исполнении видеокарта выглядит вот так:



Видеокарта состоит из двух модулей: модуля памяти и модуля ЦАП'а.

Модуль памяти просто формирует сигналы синхронизации (HS, VS) и гашения луча (BL) и выдаёт наружу код цвета (D0...D7), который модуль ЦАП'а преобразует в уровень 0-0.7 В и подаёт на монитор. Микроконтроллер модуля памяти просто перебирает адреса статического ОЗУ, а данные из ОЗУ и есть цвета точек. С использованием микроконтроллера Atmega168 с частотой 20 МГц требуется 2 такта на одну точку, поэтому эта часть программы написана на ассемблере и развёрнута в повторяющийся фрагмент для каждой точки строки. Я позволю себе не описывать развёртку VGA-сигнала во времени, тем более, что в интернете полно информации на этот счёт (хоть и часто не совпадающей друг с другом), а я за давностью лет уже порядком подзабыл, какую временную диаграмму я реализовал в этой видеокарте.


Схема модуля памяти (открыв в новом окне можно увеличить).

Модуль ЦАП'а состоит из трёх обычных R-2R ЦАП'ов с ключами и выходным эмиттерным повторителем (из-за которого несколько «зарезается» диапазон цветов). Если кто придумает, как дёшево и сердито исправить это «зарезание» — милости прошу в комментарии. На радиокоте мне посоветовали заменить эмиттерный повторитель на истоковый, но я этот совет так и не проверил. Как видно из схемы, я отвёл 3 бита на красный, 3 бита на зелёный и 2 бита на синий цвет. Транзисторы я взял КТ-315. :)


Схема ЦАП'а.

Что именно будет отображать видеокарта определяет управляющий контроллер. Его задача — выставлять адрес на шину адреса (A0...A15), выставлять данные на шину данных (D0...D7), выставлять сигналы WR (запись по низкому уровню), OE (разрешение вывода данных при низком уровне) и выставлять сигнал A/B (переключение памяти на работу с управляющим контроллером по низкому уровню). Управляющий контроллер получает от платы памяти сигнал гашения луча (BL), который может быть использован для синхронизации записи в память видеокарты.

Работает такая видеокарта вот так:


Печатные платы и прошивки с их исходниками.

Удачи в развитии проекта!
Tags:самодельные видеокарты
Hubs: Programming microcontrollers Video cards DIY Electronics for beginners
+115
68.6k 166
Comments 107
Middle Backend developer (Credit Cards)
from 200,000 to 250,000 ₽ОТП БанкМоскваRemote job
Системный Аналитик (команда Credit Cards)
from 230,000 to 250,000 ₽ОТП БанкМосква
Senior JavaScript Developer (CyberSecurity, Video)
from 250,000 ₽DINSСанкт-Петербург
Hyperscale - Performance Engineer
from 150,000 to 350,000 ₽Rubrain.comRemote job
Middle+ / Senior Node.js developer
from 3,500 to 5,000 $CodemotionRemote job