Опять внеплановые уроки. На этот раз 3 урока об очень интересном способе вывода текстовой и графической информации на монитор со стандартным аналоговым видеовходом.
Предыдущий урок Список уроков Следующий урок
Мне заказали работу, в которой используется OSD-генератор MAX7456. Тема оказалась настолько интересной, что я забросил все и “на одном дыхании” написал эти уроки.
О чем идет речь.
OSD это сокращение от On Screen Display, перевод – “на экране дисплея”.
OSD, OSD-меню, OSD-текст, OSD-информация это текстовая или графическая информация, отображаемая поверх основного изображения, поступающего на дисплей, как правило, от видеокамеры. При желании можно придумать и другие источники видеосигнала, на которые необходимо наложить дополнительную информацию.
Типичным примером OSD-меню является меню любого современного телевизора. Глупо для установок параметров телевизора использовать отдельный дисплей, когда есть громадный экран.
Широко используется OSD-информация в системах видеонаблюдения, цифровых фотоаппаратах, сотовых и стационарных телефонах… Практически во всех устройствах, у которых есть дисплей.
В общем случае система выглядит так. На OSD-контроллер подается исходный (фоновый) аналоговый видеосигнал, а на выходе контроллера формируется видеосигнал с дополнительной текстовой и графической информацией.
Вот пример, в котором я наложил надписи на видеосигнал камеры, направленной на коробку с конфетами.
Существует достаточно простой и дешевый способ реализации OSD-контроллера. Это использование OSD-генератора - микросхемы MAX7456.
Эта микросхема позволяет наложить на стандартный видеосигнал текстовую и графическую информацию. В случае отсутствия видеосигнала, микросхема сама сформирует его. Т.е. MAX7456 может использоваться, как генератор видеосигнала, служить своеобразной видеокартой.
Стоимость микросхемы на Али Экспресс составляет немногим более 100 руб.
OSD-генератор MAX7456. Основные возможности.
Подробную информацию о микросхеме MAX7456 можно посмотреть в технической документации фирмы-производителя Maxim Integrated (MAX7456.pdf).
Я приведу только часть информации, необходимой для практического использования микросхемы, понимания ее возможностей и работы с ней.
MAX7456 это OSD-генератор. Микросхема позволяет:
- Наложить на стандартный NTSC или PAL видеосигнал текстовую информацию. С учетом того, что знакогенератор микросхемы оперативно перегружается, можно говорить о выводе и графической информации (скорее псевдографической).
- Сформировать видеосигнал с текстовой и псевдографической информацией. Т.е. реализовать функции видеокарты.
Для нас это означает, что MAX7456 может быть использована в Ардуино-системах как для формирования OSD-меню, так и в качестве видеокарты со стандартным видеовыходом.
MAX7456 формирует монохромную информацию, которая накладывается на цветной видеосигнал. Т.е. на цветном изображении, например от видеокамеры, отображаются монохромные символы.
Информация отображается в виде 16 строк по 30 символов в каждой. Каждый символ или знакоместо представляет собой матрицу разрешения 12 x 18 пикселей.
Каждый пиксель знакоместа может иметь состояния, определяемые при программировании знакогенератора:
- черный;
- белый;
- прозрачный при наличии входного видеосигнала и серый при его отсутствии.
Каждый символ имеет собственные атрибуты, которыми может быть задан:
- инверсный режим отображения;
- мигающий режим;
- черный или серый фон.
Для каждой строки может быть задана своя яркость.
Входной видеосигнал и OSD-информация могут быть отключены программно.
Могут быть заданы:
- яркость фона;
- временные параметры мигания символов;
- смещение информации по вертикали и горизонтали.
Принцип работы и организация MAX7456.
Как любой видеоконтроллер, MAX7456 содержит экранную память и знакогенератор.
Экранная память хранит коды символов для каждого знакоместа экрана. Ее содержимое определяет информацию на экране.
Экранная память может быть оперативно загружена по интерфейсу SPI. Когда нам надо вывести какие-то символы на экран, мы должны загрузить их коды в экранную память. Адреса, по которым мы записываем коды, определяют места отображения символов на экране.
Для формирования видеосигнала из экранной памяти под управлением внутренней логики микросхемы в цикле считываются коды символов. Считываются они последовательно, синхронно с синхроимпульсами входного видеосигнала и поступают на знакогенератор.
Знакогенератор это тоже память, но она определяет соответствие кода символа графическому изображению символа. Т.е. в знакогенератор мы должны загрузить пиксельные карты символов.
Уже с выхода знакогенератора конкретные пиксели поступают в видеосигнал. У обычных видеокарт выходной поток пикселей знакогенератора управляет яркостью и цветом видеосигнала.
В отличие от обычных видеоконтроллеров выходной поток пикселей знакогенератора MAX7456 управляет мультиплексором, который коммутирует входной видеосигнал фонового изображения. Т.е. может быть задана не только яркость элемента видеосигнала, но и передано фоновое изображение для этого пикселя.
Все процессы происходят синхронно с синхроимпульсами фонового видеосигнала. В случае его отсутствия вырабатываются свои синхроимпульсы. В этом случае MAX7456 становится автономным генератором видеосигнала.
Структурная схема микросхемы MAX7456 выглядит так.
Экранная память.
В экранную память мы загружаем коды символов, которые желаем увидеть на экране.
Экранная память – это ОЗУ. При выключении питания вся информация теряется.
Разрешение экрана 16 строк по 30 символов. Значит, экранная память должна содержать информацию для 480 символов.
В следующих уроках мы будем разрабатывать программы для работы с OSD-дисплеем. Под адресом символа на экране будем понимать адреса от 0 до 479 согласно этой схеме.
Каждый адрес символа содержит 2 байта.
Код символа (адрес знакогенератора) |
Атрибуты символа | ||||||||||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | LBC | BLK | INV | - | - | - | - | - |
- Код символа определяет, какой символ будет выведен в этом месте экрана.
- Атрибуты символа могут менять режим отображения для конкретного места экрана.
- LBC – признак определяет выводить для фона символа фоновое изображение (изображение входного видеосигнала) или использовать заданный фон. Т.е. символ будет со своим фоном или накладываться на изображение входного видеосигнала.
- BLK – признак включает режим мигания.
- INV – признак задает инверсный режим отображения символа. Черный пиксель знакогенератора становится белым и наоборот.
В первоисточнике формат экранной памяти показан так.
Загрузка информации в экранную память происходит по интерфейсу SPI. В момент записи может быть нарушена регенерация информации на экране. Чтобы этого не происходило можно выбрать режим загрузки экранной памяти в короткие отрезки времени гашения синхронно с синхроимпульсами вертикальной синхронизации VSYNC.
Память знакогенератора.
Память знакогенератора определяет изображение символов. Это EEPROM, т.е. память, которая сохраняет информацию при выключении питания.
Память знакогенератора в любой момент может быть перепрограммирована пользователем. Пользователь может сам задавать изображение символов.
Память знакогенератора содержит битовые карты для 256 символов. Ее формат 256 ячеек по 64 байта.
Символ имеет размерность 12 x 18 пикселей.
Каждый пиксель определяется 2 битами.
Атрибуты пикселя | Режим отображения |
00 | Непрозрачный черный |
01 | Непрозрачный белый |
10 | Прозрачный, при наличии входного видеосигнала и серый при его отсутствии |
11 | Прозрачный, при наличии входного видеосигнала и серый при его отсутствии |
Получается, что байт содержит атрибуты для 4 пикселей. Всего для знакоместа используется 54 байта.
В памяти знакогенератора для каждого символа отведено 64 байта. Используются первые 54.
Вот подробный формат распределения атрибутов каждого пикселя знакоместа.
Программирование EEPROM знакогенератора происходит через интерфейс SPI.
Разработчики микросхемы гарантируют не менее 100 000 циклов записи EEPROM знакогенератора и хранение информации в этой память не менее 100 лет.
Более подробно все режимы отображения информации и форматы данных рассмотрим при описании Ардуино-библиотеки MAX7456.h.
Подключение микросхемы MAX7456.
Микросхема выпускается в 28 выводном корпусе 28 TSSOP-EP.
Имеет следующее назначение выводов.
Номер вывода |
Название | Функциональное назначение |
1, 2, 13-16, 27, 28 | N.C. | Не используются. Ни к чему не подключены. |
3 | DVDD | Цифровое питание. Необходимо установить блокировочный конденсатор 0,1 мкФ между этим выводом и общим проводом (DGND). |
4 | DGND | Цифровая земля. |
5 | CLKIN | Используется для непосредственного подключения кварцевого резонатора частотой 27 мГц или для подачи частоты внешнего генератора. |
6 | XFB | Используется для непосредственного подключения кварцевого резонатора частотой 27 мГц. |
7 | CLKOUT | Выход внутреннего генератора 27 мГц. |
8 | CS | Выбор кристалла, активный уровень низкий. |
9 | SDIN | Сигнал входных данных интерфейса SPI. |
10 | SCLK | Сигнал тактирования интерфейса SPI. |
11 | SDOUT | Сигнал выходных данных интерфейса SPI. |
12 | LOS | Сигнал потери синхронизации. Переходит в высокий уровень, если во входном видеосигнале микросхема не находит 32 импульса синхронизации подряд. Переходит в низкий уровень, если получено 32 синхроимпульса. Выход типа “открытый коллектор”. Необходимо подключить его через резистор 1 кОм к питанию 5 В. Высокий уровень означает потерю синхронизации. |
17 | VSYNC | Импульсы вертикальной синхронизации. Выход типа “открытый коллектор”. Необходимо подключить его через резистор 1 кОм к питанию 5 В. |
18 | HSYNC | Импульсы горизонтальной синхронизации. Выход типа “открытый коллектор”. Необходимо подключить его через резистор 1 кОм к питанию 5 В. |
19 | RESET | Сброс микросхемы. Активный уровень – низкий. Длительность импульса не мене 50 мс. |
20 | AGND | Аналоговая земля |
21 | AVDD | Аналоговое питание. Необходимо установить блокировочный конденсатор 0,1 мкФ между этим выводом и аналоговой землей (AGND). |
22 | VIN | Входной видеосигнал. |
23 | PGND | Земля драйвера выходного видеосигнала. С аналоговой землей (AGND) должен быть соединен только в одной точке. |
24 | PVDD | Питание драйвера выходного видеосигнала. Необходимо установить блокировочный конденсатор 0,1 мкФ между этим выводом и сигналом PGND. |
25 | SAG | Сигнал коррекции выходного видеосигнала. Если коррекция не используется, должен быть соединен с сигналом VOUT. |
26 | VOUT | Выходной видеосигнал. |
Из электрических характеристик для нас самое важное:
- Напряжение питания микросхемы (выводы DVDD, AVDD, PVDD) – 5 В.
- Потребляемый ток:
- DVDD до 30 мА;
- AVDD до 35 мА;
- PVDD до 80 мА.
- Цифровые сигналы имеют TTL уровни ( 0 / 5 В ).
Разработчики микросхемы рекомендуют следующую схему подключения.
Заказчик работы по OSD-контроллеру, Игорь из Москвы, изготовил по этой схеме модуль. В качестве Csag он использовал танталовый электролитический конденсатор емкостью 100 мкФ (2 конденсатора по 47 мкФ).
К плате Ардуино я подключил модуль согласно таблице.
Плата Arduino Nano | Модуль MAX7456 |
PIN 10 | CS |
PIN 11 | SDIN |
PIN 13 | SCLK |
PIN 12 | SDOUT |
+ 5 V | + 5 V |
GND | GND |
Кому-то удобнее будет схема.
Собранное все вместе у меня выглядит так.
Моя система состоит из платы Arduino Nano, модуля MAX7456, автомобильного монитора, камеры, блока питания 12 В.
Плата Ардуино питается от USB компьютера, OSD-модуль питается от платы. Монитор и камера запитаны от блока питания 12 В.
В следующем уроке будем изучать Ардуино-библиотеку для управления OSD-генератором.
А есть ли готовые платы?
Да, тоже интересует готовая плата, или хотя бы макет для печати.