О видео сигнале.
Чтобы понять каким образом формируется видеосигнал в
реальном времени, необходимо хорошо, в деталях, понимать каким образом
получается видеоизображение. Поэтому прежде чем разбирать какой либо код
поговорим сначала об этом.
Как работает стандартный телевизор.
В стандартном телевизоре используется вакуумная труба,
которая имеет экран, покрытый слоем люминофора и электронную пушку, которая
излучает электроны в направлении экрана. В момент удара электрона об экран и в
течении некоторого времени после удара в месте удара люминофорный слой излучает
свет. Траекторию электронного потока, излучаемого пушкой, можно изменить с
помощью магнитного поля и тогда электроны будут ударяться в другую точку
экрана. Используя такое управление можно рисовать горизонтальные линии по всему
экрану. При изменении интенсивности электронного луча изменяется яркость
свечения, таким образом можно получить на экране изображение. В системе PAL
экран перерисовывается 25 раз в секунду. Чтобы уменьшить мерцание экрана при
обновлении картинки, сначала рисуются все нечетные, а потом все четные линии.
Поэтому картинка практически обновляется 50 раз в секунду. Для того чтобы
получить цветное изображение, необходимо чтобы каждая точка экрана состояла из
трех цветов: красного, зеленого и синего. Здесь мы будим рассматривать только
черно-белое телевидение, так как только его можно получить в реальном времени с
помощью ATMega8.
Электронный луч рисует изображение.
Различные телевизионные стандарты.
Существуют три основных телевизионных стандарта: NTSC, SECAM и PAL. NTSC ( National Television System Committe
) – это американский стандарт. Он имеет 525 строк и частоту обновления кадров
30 Гц. SECAM ( Sequentil Color And Memory ) - французский
стандарт и PAL ( Phase Alternating Lines ) имеют 625 строк в
кадре при частоте кадров 25 Гц. Кроме различия кадровой и строчной частот эти
стандарты отличаются способом кодирования цветного сигнала. Далее мы будим
рассматривать стандарт PAL.
Информация в видеосигнале.
Точки разной яркости образуют на экране изображение. Когда
электронный луч проходит по экрану, его интенсивность изменяется за счет
изменения уровня видеосигнала. Но в этом сигнале нет информации о том, в какой
части экрана находится в настоящее время луч. Для решения этой проблемы
используется синхроимпульс, который передается в начале каждой строки.
Синхроимпульс говорит телеприемнику, что текущая строка закончилась и
необходимо перевести луч вниз, в начало следующей строки ( это похоже на
нажатие кнопки 'Enter'
на клавиатуре когда Вы набираете текст на компьютере ). Телеприемник должен
также знать, когда начинается новый кадр. Об этом сообщает специальная
комбинация синхроимпульсов ( как функция 'Новый документ' при написании текста
с помощью компьютера ). При обновлении кадра 25 раз в секунду изображение будит
заметно мерцать, поэтому сначала рисуются все нечетные, а потом все четные
линии. За счет этого число кадров в секунду увеличивается до 50, и изображение
становится более качественным. Информация о четности/нечетности строки
передается в комбинации вертикальных синхроимпульсов. Амплитуда видеосигнала
изменяется в пределах от 0 до 1В. Уровень 0,3В соответствует черному цвету, а
1В – белому ( яркость серого изменяется между этими значениями ). Уровень 0В
соответствует синхроимпульсу.
Строка видеосигнала.
Изображение разделено на строки. Каждая строка имеет
длительность 64 мкс. В первые 4 мкс передается строчный синхроимпульс. Это
производится переводом уровня сигнала в 0 для того, чтобы сказать
телеприемнику, что началась новая строка. Старые телевизоры были очень
медленными, после получения синхроимпульса им требовалось 8 мкс для перевода
электронного луча в начало следующей строки. В течении этого времени сигнал
поддерживается на уровне черного. В оставшиеся 52 мкс передаются данные
изображения. Изображение рисуется слева направо с яркостью, соответствующей
уровню видеосигнала. Черный цвет соответствует уровню 0,3В, и с увеличением
уровня видеосигнала увеличивается яркость. Максимум яркости достигается при
уровне видеосигнала 1В ( белый цвет ). На рисунке показана осциллограмма строки
видеосигнала.
Осциллограмма строки видеосигнала
Схемное решение.
Для генерации видеосигнала необходима некая схема, способная
создавать сигналы с амплитудой напряжения от 0 до 1В. Чтобы создать изображение
Вам необходимо как минимум три уровня сигнала. Телевизор должен получать
уровень черного и уровень синхросигнала для того, чтобы синхронизировать
изображение. Если Вы хотите большего, чем просто черный экран, Вам понадобится
некоторый уровень серого или белого. Для получения трех необходимых уровней
аналогового сигнала требуется два бита данных цифрового сигнала. Стандартное
входное сопротивление видеовхода телевизора – 75 Ом. Используя два резистора и
два выхода порта микроконтроллера можно создать требуемые уровни напряжения.
При соединении обоих выходов D0 и D1 с землей, напряжение на видеовходе телевизора будит равно 0, что соответствует синхроуровню.
Выход D1
соединен с землей, а выход D0
- с +5В. В этом случае резистор 450 Ом включен параллельно 75 Ом-ному
сопротивлению видеовхода телевизора, а резистор 900 Ом подключен к этой цепи
последовательно. Этот делитель напряжения позволяет получить на видеовходе
уровень 0,33В, что очень близко к уровню черного. (Истинный уровень черного
0,3В.)
Выход D0
соединен с землей, а выход D1
- с +5В. В этом случае резистор 900 Ом включен параллельно 75 Ом-ному
сопротивлению видеовхода телевизора, а резистор 450 Ом подключен к этой цепи
последовательно. Этот делитель напряжения позволяет получить на видеовходе
уровень 0,67В. Это уровень серого.
Оба выхода D0
и D1 соединены с +5В. В
этом случае резисторы 900 Ом и 450 Ом включены параллельно, а 75 Ом-ное
сопротивление видеовхода телевизора, подключено к этой цепи последовательно.
Этот делитель напряжения позволяет получить на видеовходе уровень 1В. Это
уровень белого.
Эта схема позволяет получить четыре уровня напряжения. На
рисунках представлены эквивалентные схемы четырех различных уровней напряжения
и показано, каким образом они получаются. Номинал резисторов не критичен. Вы
можете использовать большие, стандартные значения: 470 Ом и 1 кОм вместо 450 Ом
и 900 Ом. Схема будит работать, просто немного изменится яркость изображения.
Итак, мы можем создать синхроуровень, уровни черного, серого
и белого. Этого достаточно чтобы создать простое изображение, как в играх Pong и Tetris. Возможно создание и большего
числа уровней яркости если использовать большее число бит выходного порта. Но в
этом случае Вы не сможете с помощью них выполнять другие функции.
Программно и аппаратно генерируемый сигнал.
В стандартных видеосистемах, таких, как видеокарта в ПК,
информация о том, что выводить на экран берется из видеопамяти. Это
осуществляется автоматически на аппаратном уровне. Синхроимпульсы формируются
так же автоматически железом. Все, что требуется от программы - это записывать
в видеопамять то изображение, которое аппаратная часть должна вывести на экран.
Это требует мощной аппаратной части и много памяти. Видеокарта в ПК имеет
обычно несколько МБайт видеопамяти. У PIC16F84
есть 68 Байт памяти, и эта память должна хранить не только изображение, но и
другую информацию, например переменные. Невозможно держать в памяти всю
картинку, как это происходит в видеокарте. Видеоданные должны формироваться
непосредственно в момент вывода изображения на экран. Создать изображение
программным способом с помощью такого простого процессора достаточно трудно,
это может быть только очень простое изображение. Зато этот способ очень дешев.
Строка, формирующая вертикальные полосы.
Первый тест, который я сделал, когда начал
экспериментировать с программной генерацией видео – это получение вертикальных
полос на экране. Надо создать строку, в которой информация о цвете изменяется в
такой последовательности: серый – черный – белый – черный – серый. Повторяя эту
строку непрерывно, получим на черном фоне экрана изображение трех полос: две
серые по краям и одна белая по центру экрана. Сигнал включает горизонтальный
синхроимпульс, последующую задержку и информацию о яркости. Телевизионное изображение
будит устойчиво по горизонтали, а по вертикали может плавать или дрожать, так
как вертикальные синхроимпульсы отсутствует. На рисунке показано как это
примерно выглядит.
Осциллограмма сигнала, генерируемого кодом,
который приведен ниже. Низкие импульсы -
это серые полосы, высокий импульс в середине
- белая полоса.
Так
выглядит видеосигнал на экране
телевизора. Две серых и одна белая полосы.
Материал немного был отредактирован.
|