Слово от переводчика: когда-то, когда страна и деревья были большими, а воображение просто безграничным, была у меня мечта – возможность выводить изображение с моего программируемого микрокалькулятора Электроника МК-61 (ну, там графики всякие, кривые, картинки) на экран телевизора. Времена были дикие позднесовковые, и не то что игровая приставка и очень персональный МИКРОкомпьютер («Правец 8Д» или «Специалист» или «Сикнклер»), но и видеомагнитофоны были в диковинку. В общем, народ требовал зрелищ и те, кто помнит цикл учебно – развлекательных публикаций для программируемых калькуляторов под общим названием «Путь к Земле» (журнал «Техника – Молодежи») меня поймут.
Если кратко, то в виде научно-фантастического романа с неплохим сюжетом описывалось путешествие двух идиотов случайных знакомых – профессионального космонавта и мажора кибернетика с Луны на Землю. Отдельной остроты всему сюжету придавало то, что путешествовали они на т.н. «Лунолете», то есть малом космическом судне с химическим двигателем, предназначенным для передвижения в условиях прямой видимости над лунами и прочими небесными телами похожими на биллиардный шар с простым рельефом. В каждом выпуске цикла присутствовало упрощенное правда, но вполне обоснованное математическое описание каждого маневра как в условиях сильной (относительно) гравитации близкого небесного тела, так и при влиянии на небесный снаряд героев гравитаций Земли и Луны, а также программа для расчета очередного этапа полета. В общем, глядеть на циферки на экране калькулятора не то чтоб доставало, но хотелось красивых кривых на экран (как в ЦУПе).
Вот здесь можно выкачать архив с отрывками текста романа.
С другой стороны, не будем забывать что даже примитивные микроконтроллеры семейства Arduino на порядок превосходят по производительности не только микропроцессоры тогдашних флагманов – МК-52 и МК-61, но и вычислительные возможности некоторых 8-битовых игровых приставок поздних времен (Atary 2600 и прочих Рембо так точно).
В общем, вступление вышло слегка затянутым, так что перейдем к теме сегодняшнего занятия – выводе видеоизображения с Arduino на экран телевизора.
К сожалению, конструктивные особенности Arduino позволяют выводить только монохромное (черно – белые) изображения, хотя и это может быть полезным в некоторых проектах, а ЧСВ поднимет у нубов так точно...
Шаг первый. Детали и ПО
Вам понадобятся:
Детали и агрегаты:
- Микроконтроллер Arduino
- Телевизор (без него точно никуда)
- Макетная плата или шилд для Arduino
- 2 резистора номиналом 470 Ом и 1 Ком
- 2 двухпиновых монтажных переходника папа-папа
- Экранированный телевизионный кабель с тюльпаном на конце
Программное обеспечение:
- Среда разработки/прошивки Arduino. Официальная ссылка
- Библиотека для обработки вывода ТВ – изображения.
Шаг второй. Сборка
От имени автора прошу прощение за пахабное низкое качество изображения готового ТВ – переходника. Поясняется это тем, что при написании инструкций, сначала надо их писать, а потом уже приступать к сборке с тщательным фотофиксированием всех этапов. В нашем же случае, получилось все с точностью до наоборот, так что из мутного изображения готового переходника понять что-либо просто невозможно.
Гораздо лучше, что куда и как паять, поясняет принципиальная схема, к тому же состоящая всего из нескольких деталей.
Распиновка:
Sync - цифровой вывод 9 микроконтроллера
Video - цифровой вывод 8 микроконтроллера
GND - вывод GND микроконтроллера
Шаг третий. Программирование
Самая веселая часть – программирование.
В принципе, уже вышла новая версия ТВ – библиотеки, однако она еще более глючна нестабильна чем R5.91, которую использует автор, так что лучше качайте библиотеку по приведенной выше ссылке.
Текс программы для ленивых тех, кому лень перенабирать код с копии экрана:
Предполагается, что базовые принципы работы и программирования Arduino – подобных микроконтроллеров вам известны, так что автор решил не растекаться мыслью по древу, порекомендовав ознакомится с командами библиотеки ниже:
- begin(mode) Начало вывода информации на экран. Разешение стандартное - 128х96
- begin(mode,x,y) Начало вывода информации на экран. Разешение определяется пользователем аргументами x,y
- end() Очистка видеобуфера
- force_vscale(sfactor) Force the number of times to display each line.
- force_outstart(time) Force the time to start outputting on an active line.
- force_linestart(line) Force line to start outputting on.
- set_vbi_hook(func) Set the function to be called once per vertical blanking period.
- set_hbi_hook(func) Set the function to be called once per horizontal blanking period.
- hres() Команда возвращает значение горизонтального разрешения,
- vres() Команда возвращает значение вертикального разрешения,
- char_line() Команда возвращает значение количества символов, которые поместятся в строку.
- set_pixel(x,y,color) Установка цвета пикселя по заданным координатам
- get_pixel(x,y) Установка пикселя с заданными координатами в качестве точки отсчета.
- fill(color) Заливка экрана заданным цветом.
- clear_screen() Очистка экрана.
- invert() Инвертирование изображение на экране.
- shift(distance,direction) Прокрутка экрана на заданную дистанцию в любом из 6 направлений.
- draw_line(x0,y0,x1,y1,color) Создание прямой с координат (x0,y0) до координат (x1,y1).
- draw_row(row,x0,x1,color) Заполнение строки с координатами от x0 to x1 заданным цветом.
- draw_column(column,y0,y1,color) Заполнение столбца с координатами от у0 до у1 заданным цветом.
- draw_rect(x,y,w,h,color,fillcolor) Отображение прямоугольника с началом в координатах (x,y) с размерами(h,w), и заполнение заданным цветом.
- draw_rect(x,y,w,h,color) Отображение прямоугольника с началом в координатах (x,y) с размерами(h,w).
- draw_circle(x,y,radius,color,fillcolor) Отображение окружности с центором в координатах (x,y) с радиусом (RADIUS) и его заполнение заданным цветом
- draw_circle(x,y,radius,color) Отображение окружности с центором в координатах (x,y) с радиусом (RADIUS).
- bitmap(x,y,bmp,i,width,height) Отображение заданного изображения в координатах..
- print_char(x,y,c) Печать символа в координатах (x,y).
- set_cursor(x,y) Установка позиции для вывода слеующего символа.
- select_font(font) Установка шрифт для вывода текста.
- print() Вывод текста.
- println() Вывод пстой строки.
- printPGM() Вывод строки с текстом из памяти программы.
- tone(frequency) Тональный сигнал с заданной частостой.
- tone(frequency,duration) Тональный сигнал заданной частоты и длительности.
- noTone() Прикращение вывода тонового сигнала.
Шаг четверый. Завершение
Или все же старт? Возможностей и способов использования ТВ – вывода Arduino на самом дела масса, не говоря уже про простое использование Arduino в качестве игровой приставки.
Пример:
http://www.youtube.com/watch?feature=player_embedded&v=g9Krcyl2VTk
И еще один:
http://www.youtube.com/watch?feature=player_embedded&v=OA1RYbmyQwA
#TV-Out-with-Arduino/">(A-Z )