Автор текста: natim
Больше интересных фотографий и комментариев в оригинальном материале

Проблема и доступное решение
Разработчики устройств на микроконтроллерах часто сталкиваются с необходимостью вывода большого объема информации на крупный экран для удобства восприятия. Готовые графические ЖК-дисплеи с интерфейсом для МК обычно имеют небольшую диагональ и высокую стоимость, особенно цветные модели. В качестве экономичной альтернативы можно рассмотреть парк старых ЖК-мониторов с диагональю 15-19 дюймов и соотношением сторон 4:3. Их можно приобрести за символическую сумму в 200-500 рублей.
Такие мониторы достаточно надежны, хотя со временем яркость CCFL-ламп подсветки падает, и цветовой спектр смещается в красную область. Эту проблему можно решить, заменив лампы на светодиодную ленту, подключив ее к 12-вольтовому источнику питания дисплея. Однако для этого потребуется заблокировать цепи обратной связи от контроллера подсветки, иначе монитор воспримет это как неисправность и отключится. Придется пожертвовать функцией регулировки яркости, которой, впрочем, большинство пользователей практически не пользуется.
Автор успешно модифицировал таким способом 17-дюймовый монитор Samsung. Важно отметить, что причиной замены стал сломанный повышающий трансформатор, а не сама лампа. Для корректной работы подсветка была подключена через мощный npn-транзистор, управляемый контроллером монитора, чтобы избежать появления полос и мерцания при инициализации.
Помимо подсветки, второй распространенной неисправностью старых мониторов является выход из строя электролитических конденсаторов в блоке питания. После их замены и описанной модификации такие дисплеи могут прослужить еще не один десяток лет.
Интерфейс VGA как стандарт
Практически все старые мониторы оснащены разъемом VGA (D-Sub). Этот аналоговый интерфейс стал основой для проекта. Для формирования изображения достаточно управлять всего пятью сигналами: тремя цветовыми (R, G, B) и двумя синхронизирующими (HSync, VSync). Принципы генерации этих сигналов хорошо описаны в технической литературе.
Однако в большинстве известных решений для этой задачи используются дорогостоящие FPGA (ПЛИС). Автор поставил цель создать более простое и дешевое устройство, выбрав в качестве основы CPLD (Complex Programmable Logic Device) — программируемую логическую интегральную схему с меньшим количеством логических ячеек, но и более доступную по цене. Например, отладочную плату на базе Altera EPM240 (семейство MAX II) можно приобрести на AliExpress менее чем за 10 долларов, включая программатор.

Плата разработки MAX II Altera EPM240
Архитектура и компоненты
Был выбран текстовый режим отображения как наиболее простой для реализации и достаточно информативный для многих задач. Простую графику можно имитировать с помощью псевдографических символов, как это делалось в эпоху DOS. Графический режим потребовал бы передачи больших объемов данных и значительных вычислительных ресурсов микроконтроллера.

Первым шагом является отображение символа «2» на экране. Символ оказался зеркальным отражением. Без проблем
Встроенной флеш-памяти CPLD (8 Кбит) недостаточно для хранения качественного шрифта. Поэтому было решено использовать внешнюю микросхему ПЗУ, которую можно извлечь из старых материнских плат. Объем таких микросхем (от 256 КБ до 1 МБ) позволяет хранить несколько шрифтов высокого разрешения (8x16 пикселей).

Крупный план платы разработки Altera MAX II
Для хранения содержимого экрана также необходима оперативная память (ОЗУ). При разрешении 640x480 и шрифте 8x16 на экране помещается 80 символов в строке и 30 строк. Для хранения кодов символов нужно 2400 байт. Для эффективной адресации логичнее использовать объем, кратный степени двойки — 4096 байт (4 КБ). Аналогичный объем потребуется для страницы атрибутов (цвет, мигание, подчеркивание) и страницы цвета. Итого минимальный требуемый объем ОЗУ — 12 КБ. На практике удобно использовать статическую память (SRAM) объемом 32 КБ (например, D43256), также доступную из старых комплектующих.

Первый вариант схемы
Итоговая схема получилась компактной: CPLD, ПЗУ, ОЗУ, разъем VGA и несколько резисторов. Устройство общается с микроконтроллером через 8-битный параллельный интерфейс, похожий на интерфейс дисплеев на базе контроллера HD44780 (например, 1602), но с добавлением сигнала BUSY. Этот сигнал указывает, когда CPLD не обращается к ОЗУ и микроконтроллер может записывать в нее данные (во время обратного хода луча).

Второй шаг — напечатать несколько символов генератора символов с разными цветами символов и фона
Описание интерфейса управления
DATA[7:0] – 8-битная шина данных (запись от МК в устройство).
CS – выбор микросхемы (Chip Select). Данные фиксируются по фронту сигнала.
AD – указывает тип передаваемых данных: адрес (1) или данные (0).
BUSY – сигнал занятости. Когда активен (логическая 1), запись в ОЗУ игнорируется.
RESET – сигнал сброса. При активации вывод изображения прекращается, но содержимое ОЗУ сохраняется.
Запись данных возможна только во время вертикального гасящего импульса (около 1.44 мс). Для медленных микроконтроллеров этого времени может не хватить для полного обновления экрана. В таком случае можно использовать сигнал RESET — он приостанавливает работу видеогенератора и предоставляет микроконтроллеру прямой доступ к ОЗУ.
Усовершенствование: 16 цветов и дополнительные атрибуты
После реализации базовой логики выяснилось, что ресурсы CPLD используются лишь наполовину. Это позволило добавить новые функции: увеличить количество цветов с 8 до 16, добавить мигание символов и фона, а также подчеркивание.

Второй вариант схемы
Для формирования 16-цветной палитры была выбрана классическая палитра стандарта EGA. В ней четвертый бит управляет яркостью, что дает два оттенка серого — темный и светлый. Для аппаратной реализации потребовалось две группы резисторов на выходах R, G, B: на 390 Ом (для 2/3 яркости) и на 750 Ом (для 1/3 яркости).

Палитра EGA

VGA-палитра
Временные диаграммы и организация доступа к памяти
Основная сложность — успеть за время отображения одного символа (320 нс) прочитать из ОЗУ его код, атрибуты и цвет, а затем по коду символа получить его растровую маску из ПЗУ. Циклы чтения выбранных микросхем памяти (100 нс для ОЗУ и 270 нс для ПЗУ) укладываются в этот интервал, но требуют тщательной синхронизации.
Решение — использовать два тактовых цикла для подготовки данных. Для этого область отображения была смещена, добавив по два невидимых символа в начале и конце каждой строки. Это не влияет на работу монитора, но дает дополнительное время для выборки данных.

Циклограмма доступа к ОЗУ и ПЗУ

Четвертый шаг – изображение полностью формируется микроконтроллером. Символы и фоны разных цветов, символы разных шрифтов. Некоторые нижние строчки мигают (на картинке этого не видно, поверьте мне на слово)
Формат данных и регистры
Данные в ОЗУ организованы в три страницы по 2400 байт каждая:
- Страница данных: хранит коды символов ASCII.
- Страница атрибутов: хранит 5-битный номер шрифта (до 32 шрифтов) и 3 бита атрибутов (мигание символа, мигание фона, подчеркивание).
- Цветовая страница: хранит 4-битный цвет символа и 4-битный цвет фона (из 16-цветной палитры).
Адресация упрощена: после записи начального адреса он автоматически инкрементируется, а при достижении конца строки или страницы происходит автоматическое переключение. Это экономит время и упрощает код микроконтроллера.

Пятый шаг – попытка отобразить графическое изображение (неудачная)
Графические возможности и итог
Используя ПЗУ достаточного объема, на экран можно выводить не только текст, но и простую графику. Для этого изображение разбивается на спрайты размером 8x16 пикселей, которые зашиваются в ПЗУ как дополнительные «шрифты». Ограничения: в одном спрайте можно использовать только два цвета из палитры, а общее количество уникальных спрайтов не должно превышать 256. Этот метод отлично подходит для отображения логотипов или простых иконок.

Кстати, удержать 256 спрайтов — задача непростая, поэтому изображение больше похоже на детский рисунок. В процессе сборки его пришлось несколько раз упрощать. Рисование спрайтами отлично подходит, например, при отображении логотипа компании на экране.
[мин]ЭлектроникаТехнологииЭлектрикаTimewebИнформативноеVGAМикроконтроллерыДлинный пост 5Больше интересных статей здесь: Гаджеты.
Источник статьи: Видеокарта VGA для микроконтроллера.