Вывод видео на телевизор

В очередной раз захотелось странного (со мной бывает :o)). Я подумал: неужели я не заставлю AVR генерить видео... И вот результат.

Микроконтроллер практически без внешней обвязки выводит на телевизор 16 строк по 32 символа. Жаль фотография не очень резкая.

Генeральная идея - использовать SPI для быстрого последовательного вывода. К сожалению, оказалось, что SPI не умеет выводить биты непрерывно - между байтами существует разрыв (минимум полбита). Кроме того, SPI после передачи байта оставляет выход в последнем состоянии...

Для чистого алфавитно-цифрового дисплея - было бы ничего, но псевдографика выглядит просто ужасно! А хотелось :o))

Пришлось, как это было ни обидно, привесить-таки еще одну микросхему. Типа "Исключающее ИЛИ". Теперь можно было выводить четные байты через SPI, а нечетные - через простую ногу порта. А последний бит SPI компенсировать инвертированием этой ноги... Страшно неудобно, но...

Работает!

В результате плата выглядит так:

Прежде, чем посмотреть на схему, несколько замечаний к ней:

Здесь не нарисованы цепи питания, сброса и разъем для внутрисхемного программирования - они стандартные.

Процессор работает с увеличенной тактовой частотой (12 мегагерц). Я пробовал на трех микросхемах, и все они заводились стабильно (и даже внутрисхемно программировались). Хотя гарантий, конечно, нет никаких.

Микросхему "Исключающее ИЛИ" лучше брать импортную серии Fast с хорошим выходом. Тогда не будет "хвостов" и иголок в видеосигнале. На плате, которая на картинке, стоит КР555ЛП5 с эммитерным повторителем на выходе (иначе появлялись "хвосты"). Рядом с микросхемой и процессором повесить конденсаторы на питание.

Выходы "Video" и "Sound" я пихал в телевизор через стандартные входы типа "колокольчик". Кабель для видео лучше взять готовый экранированный.

А это схема:

Оставались мелочи... Оформить процедуру как одно прерывание, сделать чтобы файл линковался с проектами AVR-GCC, нарисовать и закодировать шрифт, добавить звук - все это отняло немало времени, но...

Но в результате получился готовый к использованию файл. То что вы видите на первой картинке - результат работы маленького примера. Пример компилировался AVR-GCC 3.3.

Исходники можно скачать в виде архива video.zip (32k).

Вы можете распространять их, копировать и изменять, но, пожалуйста, сохраняйте мой "копирайт".

И еще, я был бы рад получить сообщения об использовании кода в Ваших проектах. Спасибо!

Программа генерит видео с кадровой частотой 50 Гц, 312,5 строк в кадре. Это соответствует нашему (российскому) стандарту. Я не гарантирую, что любой телевизор может это показать, хотя, как правило, современные телевизоры понимают все распространенные стандарты.

И напоследок несколько замечаний по поводу программирования:

Весь PORTD занят (несмотря на то, что используется одна нога).

Не используйте другие прерывания - они могут заблокировать или задержать прерывание от таймера 1, которое делает видеосигнал.

Желаю успехов!