204 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Формирование цветного tv сигнала на ардуино. Установка ТВ библиотеки

Что можно приготовить из кальмаров: быстро и вкусно

Небольшой урок в котором вы узнаете, как подключить Arduino к телевизору (ТВ) для отображения текста, информации и графики.

Ардуино может быть подключена ко многим устройствам, включая датчики, электромеханические детали и даже простые дисплеи. Но представьте, что вы можете подключить Arduino к телевизору и использовать его для отображения текста, информации и даже грубой графики.

По традиции начинаем с деталей, которые нам нужны будут для проекта:

  • 1x – 470 Ом резистор
  • 1x – 1 кОм резистор
  • 1x – ТВ с композитным видеовходом
  • 1x – Композитный видеокабель (разъем RCA)

Схема подключения Ардуино к ТВ

Принципиальная схема довольно простая, которую вы можете увидеть на рисунке ниже. Не забывайте, что на резисторах есть перпендикулярные полоски, которые говорят о величине сопротивления резистора.

Как это работает?

Теперь поговорим о том, как работают композитные телевизионные сигналы.

Композитные телевизионные сигналы довольно сложны и запутанны, поэтому мы рассмотрим только основы. Следует также отметить, что мы будем рассматривать только PAL, а не NTSC, поскольку у них несколько разные тайминги, и мы большей частью живем в Европе, которая использует PAL.

Скорость, с которой телевизоры показывают серию изображений для формирования движущегося изображения, называется кадрами в секунду (также известными как FPS). Поскольку каждый кадр является неподвижным изображением, и эти изображения на телевизоре рисуются по строкам, изображения отправляются на телевизор последовательно, каждый пиксель отправляется по одному за раз. Но если линия изображения является последовательными данными, как определяется яркость? В отличие от цифрового последовательного соединения сигналы PAL являются аналоговыми, а напряжение на последовательной линии определяет, насколько ярким является пиксель. На приведенном ниже графике показан график PAL и значения разных напряжений.

Если входной сигнал равен 0 В, телевизор видит это как сигнал синхронизации. В зависимости от того, как выполняется синхронный сигнал, его можно использовать для передачи ТВ одной из двух вещей:

  • Горизонтальная синхронизация – готовность отобразить следующую строку на нашей картинке
  • Вертикальная синхронизация – готовность к совершенно новому изображению

Напряжение между 0,3 В и 1 В – это пиксели изображения, где 0,3 В представляет черный пиксель, 1 В представляет белый пиксель, а напряжения между ними являются серыми. Цветные пиксели не будут покрываться, так как цвет очень сложный, используя сигналы фазового сдвига и цветовой синхронизации. Итак, как мы можем достичь этих уровней напряжения, если у нас нет аналогового выхода на Arduino Uno? Вот зачем наши два внешних резистора!

Arduino Uno при использовании в сочетании с библиотекой TV Out имеет два контакта: видео и синхронизацию. Вывод видеосигнала используется для передачи видеоданных (отдельные пиксели), а синхросигнал используется для синхронизации телевизора. Эти два контакта соединены вместе через R1 и R2, которые образуют простой делитель потенциалов, который дает следующие уровни напряжения.

Установка ТВ библиотеки

Начните с загрузки , затем нажмите:

Sketch → Include Library → Manage Libraries
(Эскиз → Включить библиотеку → Управление библиотеками)

В открывшемся окне библиотеки выберите строку поиска и введите «TV Text».

Когда поиск будет завершен, выберите библиотеку ТВ-текста «TV Text» и нажмите «установить» (англ. – install).

Последний шаг будет включать в себя открытие встроенного примера, чтобы мы могли проверить его. Нажмите:

File → Examples → TV Out → Demo PAL
(Файл → Примеры → TV Out → Demo PAL)

Сборка устройства

Этот проект использует макет, чтобы помочь подключить Arduino Uno к двум резисторам и композитному видеокабелю. Ардуино подключен к компьютеру для легкого программирования, а также для обеспечения питания, и как только настройка будет выполнена (как показано ниже), вы можете запрограммировать Arduino и включить телевизор.

Если все идет по плану, у вас должно быть что-то похожее на экране телевизора, показанном ниже:

Это был первый урок из серии взаимодействия Ардуино и ТВ. Если мы получим хорошую обратную связь мы продолжим публикации уроков в данном направлении. Все отличных проектов.

Если вы когда-нибудь почувствуете, что вашему Arduino-проекту стало тесно на алфавитно-цифровом дисплее 1602, обязательно обратите внимание на проект TellyMate Shield . Он позволяет выводить ту же алфавитно-цифровую информацию на обычный телевизор, через видео-вход.

При определенном везении можно заполучить весьма внушительных размеров дисплей (если телевизор имеет прилично дюймов в диагонали), работающий в режиме телетайпа 38 x 25 знакомест. Впрочем, бросив первый взгляд на схему, ловишь себя на мысли о розыгрыше. В самом деле:

Обычный ATmega8 на тактовой частоте 16 МГц формирует два компонента видеосигнала, которые смешиваются нехитрой схемой из двух резисторов и двух диодов. Группой переключателей S1 устанавливаются режимы работы; согласующий резистор 75 Ом подключается через перемычку и добавлен, скорее, для универсальности (думаю, в большинстве случаев не понадобится).

Arduino выводит информацию для отображения через последовательный порт – пины RX/TX. Если вас смущает, что по ним же происходит загузка скетча и во время этого процесса на экране появляется некая “ерунда”, можно уйти на любой пин с помощью библиотеки SoftwareSerial. Поддерживаются разные скорости, а также есть возможность автоопределения. Простейший скетч выглядит так:

Serial . begin (57600 ); //57k6 baud Serial . println (“Hello, world!” );

К сожалению, изображение формируется исключительно черно-белое. Зато внутри имеем полноценный знакогенератор кодовой страницы 437, в котором есть псевдографика:

Вы, наверное, заметили, что для вывода видео использован аудио-разъем 3,5мм. На самом деле, это не казус, а вполне осознанный выбор, ограничивающий высоту элементов и делающий возможным стекирование шилдов:

Кроме вывода обычных символов, поддерживаются так называемые ESCAPE-последовательности, которые управляют курсором, удваивавают высоту и/или ширину символов и даже переключают банки шрифтов и переопределяют символы (что, впрочем, возможно только на ATmega328P, где памяти гораздо больше, чем у ATmega8). Таким же образом можно получить версию прошивки и прочую диагностическую информацию.

Поскольку все материалы доступны и открыты для доработки, мы решили немного поэкспериментировать и создать на базе этого шилда русифицированный вариант. Имя “TellyMate”, подобно Arduino, является торговой маркой – поэтому пришлось назвать наш вариант Freeduino Teleсhat :

Все детали – PTH, поскольку шилд задумывался изначально в формате кита для самостоятельной сборки – и что может быть лучше, чем собрать всё самостоятельно? 😉 Пины RX/TX имеют перемычки под пайку с обратной стороны платы, так что при желании их можно перерезать и подпаять к любым другим пинам. Аналогичным способом отключается и кнопка сброса – если не хотите, чтобы МК шилда сбрасывался синхронно со скетчем Arduino.

Краткое руководство по сборке шилда:

Русифицированный шрифт мы разместили точно таким же способом, что и автор – в виде ссылки на документ в GDocs, копию которого при необходимости можно сохранить у себя. В открытом документе надо зайти на последнюю закладку, генерирующую hex, и скопировать ее содержимое в файл fontbank0.c , подменив его в исходниках (можно скачать со страницы проекта). После компиляции получите прошивку c поддержкой кодовой страницы 866. Именно она и зашивается в ATmega8, входящие в комплект наборов Freeduino TeleChat.

Для вывода русского текста потребуется еще кое-что сделать. Как известно, ArduinoIDE хранит все символы в кодировке UTF-8, и для нормальной работы потребуется их транслировать в кодировку 866. Делать это в оригинальной прошивке нам показалось святотатством – авторы очень скрупулезно рассчитали все задержки в коде. Предлагаем самый простой вариант перекодирующей функции:

byte c1 = 0; void tele_print_char(char cd) < byte c = cd; if (c >= 0x80) < // UTF-8 handling if (!c1) < c1 = c; >else < if (c1 == 0xd0) < if (c == 0x81) Serial .print (char (0xf0)); // Ё else Serial .print ((char ) (c – 0x10)); > if (c1 == 0xd1) < if (c == 0x91) Serial .print (char (0xf1)); // ё else Serial .print ((char ) (c + 0x60)); > c1 = 0; > > else Serial .print (cd); > void tele_print_str(char *s) < for (int i=0;i TVout TV; unsigned char x, y; void setup () < TV.start_render(_NTSC); >void loop ()

Предполагается, что базовые принципы работы и программирования 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() Прикращение вывода тонового сигнала.
Читать еще:  Программа прошивки для копии смартфонов z3 sony. Перепрошиваем Sony Xperia с помощью программы Flashtool. Процесс прошивки Sony Xperia с помощью FlashTool

Arduino и TV

Слово от переводчика: когда-то, когда страна и деревья были большими, а воображение просто безграничным, была у меня мечта – возможность выводить изображение с моего программируемого микрокалькулятора Электроника МК-61 (ну, там графики всякие, кривые, картинки ) на экран телевизора. Времена были дикие позднесовковые, и не то что игровая приставка и очень персональный МИКРОкомпьютер («Правец 8Д» или «Специалист» или «Сикнклер»), но и видеомагнитофоны были в диковинку. В общем, народ требовал зрелищ и те, кто помнит цикл учебно – развлекательных публикаций для программируемых калькуляторов под общим названием «Путь к Земле» (журнал «Техника – Молодежи») меня поймут.

Если кратко, то в виде научно-фантастического романа с неплохим сюжетом описывалось путешествие двух идиотов случайных знакомых – профессионального космонавта и мажора кибернетика с Луны на Землю. Отдельной остроты всему сюжету придавало то, что путешествовали они на т.н. «Лунолете», то есть малом космическом судне с химическим двигателем, предназначенным для передвижения в условиях прямой видимости над лунами и прочими небесными телами похожими на биллиардный шар с простым рельефом. В каждом выпуске цикла присутствовало упрощенное правда, но вполне обоснованное математическое описание каждого маневра как в условиях сильной (относительно) гравитации близкого небесного тела, так и при влиянии на небесный снаряд героев гравитаций Земли и Луны, а также программа для расчета очередного этапа полета. В общем, глядеть на циферки на экране калькулятора не то чтоб доставало, но хотелось красивых кривых на экран (как в ЦУПе).

С другой стороны, не будем забывать что даже примитивные микроконтроллеры семейства Arduino на порядок превосходят по производительности не только микропроцессоры тогдашних флагманов – МК-52 и МК-61, но и вычислительные возможности некоторых 8-битовых игровых приставок поздних времен (Atary 2600 и прочих Рембо так точно).

В общем, вступление вышло слегка затянутым, так что перейдем к теме сегодняшнего занятия – выводе видеоизображения с Arduino на экран телевизора.

К сожалению, конструктивные особенности Arduino позволяют выводить только монохромное (черно – белые) изображения, хотя и это может быть полезным в некоторых проектах, а ЧСВ поднимет у нубов так точно…

Шаг первый. Детали и ПО

Вам понадобятся:

Детали и агрегаты:

  1. Микроконтроллер Arduino
  2. Телевизор (без него точно никуда)
  3. Макетная плата или шилд для Arduino
  4. 2 резистора номиналом 470 Ом и 1 Ком
  5. 2 двухпиновых монтажных переходника папа-папа
  6. Экранированный телевизионный кабель с тюльпаном на конце

Программное обеспечение:

Шаг второй. Сборка

От имени автора прошу прощение за пахабное низкое качество изображения готового ТВ – переходника. Поясняется это тем, что при написании инструкций, сначала надо их писать, а потом уже приступать к сборке с тщательным фотофиксированием всех этапов. В нашем же случае, получилось все с точностью до наоборот, так что из мутного изображения готового переходника понять что-либо просто невозможно.

Гораздо лучше, что куда и как паять, поясняет принципиальная схема, к тому же состоящая всего из нескольких деталей.

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 в качестве игровой приставки.

MRETV – набор библиотек для Arduino, реализующий видеовыход, вывод стереозвука и работу с устройствами ввода


Обычно для получения от Arduino видеосигнала применяют либо внешнее аппаратное устройство TellyMate, либо библиотеку arduino-tvout. Во втором случае дополнительный микроконтроллер становится не нужен, но разрешающая способность изображения мала. Набор библиотек MRETV, о котором рассказывает автор Instructables под ником Mr. E, сочетает преимущества обоих способов: микроконтроллер один, как во втором случае, а разрешение – такое же, как в первом. Но и это ещё не всё: одновременно с решением в фоне каких-либо задач можно выводить не только изображение, но и стереозвук, а также работать с устройствами ввода.

Для подключения внешних устройств мастер собирает несложные схемы на резисторах, диодах и конденсаторах. Начинает он со схемы для снятия видеосигнала. Это простейший микшер, смешивающий сигналы яркости и синхронизации в определенной пропорции. Схемы для различных видов плат отличаются только номерами выводов для снятия этих сигналов.

Мастер собирает эту схему в вариантах для “тюльпана” и S-Video. Во втором случае вход для сигнала цветности по понятной причине не задействуется.






Чтобы проверить видеовыход в действии, мастер устанавливает библиотеки (архивы с ними и примерами лежат здесь, более новая версия – здесь) в Arduino IDE вручную, автоматическая установка не подойдёт. Для этого он закрывает все окна, относящиеся к IDE, после чего помещает библиотеки из архива в папку libraries этой среды программирования, а примеры – в её же папку Examples. И для начала запускает такой скетч:

Читать еще:  Фотосток — Источник Контента и Креатива для Инстаграм

Убедившись, что фраза “Hello world” на телевизор выводится, мастер экспериментирует с примерами:

SimpleDisplay.ino – интерфейс ввода-вывода к существующим проектам
TVText.ino – Arduino в качестве внешней видеокарты
TestPattern.ino – испытательная таблица
Bounce.ino – работа с движущимися и растровыми изображениями

Наступает очередь выхода стереозвука. Здесь смешивать сигналы не требуется, но если подключать динамические головки или наушники не непосредственно, а через усилитель, не обойтись без ФНЧ. И снова – схема в двух вариантах, в зависимости от того, на каком микроконтроллере выполнена плата:

Это устройство мастер тоже собирает:



И пробует примеры:

Arudion.ino – секвенсер
ScreenTool.ino – многофункциональная утилита, требует клавиатуры (см. далее) или эмулятора терминала на ПК
Ponguino.ino – клон Pong, со звуком, требует клавиатуры (также см. далее).

Следующая задача – подключить клавиатуру или мышь (но не то и другое одновременно) устаревшего стандарта PS/2. Их осталось ещё довольно много.

С этим мастер тоже справляется:









Примеры – в основном те же самые, но новая периферия открывает и новые возможности:

TVText.ino – теперь терминал позволяет не только выводить информацию, но и вводить её
ShootEmUp.ino – игра, управление клавишами со стрелками, только ATmega328 и 2560
Ponguino.ino – теперь можно и сыграть: нажать j, затем управлять клавишами WASD, потом, когда придёт пора подключать датчики, можно будет изготовить аналоговые контроллеры
KeyboardTool.ino – развитие утилита ScreenTool
Bounce.ino – подключив клавиатуру, можно попробовать больше эффектов
Arudion.ino – с клавиатурой можно попробовать больше функций, а также сыграть самому как на синтезаторе

Всё это замечательно, но после примеров хочется попробовать пользоваться функциями MRETV и в своих программах. Мастер рекомендует пользоваться не монитором последовательного порта Arduino IDE, а эмулятором терминала с более развитым набором функций. Далее показано, как обращаться к функциям библиотек из своих программ. Можно пользоваться всеми упомянутыми выше интерфейсами одновременно, по одному или в любых сочетаниях.

Работа с видеовыходом:

Работа с аудиовыходом:

Работа с клавиатурой или последовательным вводом:

Мастер пробует подключать к Arduino различные аналоговые датчики, также поддерживаемые MRETV. Например, переменный резистор, термистор, делитель для измерения напряжения, датчик влажности, диод в качестве термодатчика, фоторезистор:











Датчики должны быть такими, чтобы напряжение на входе попадало в диапазон от 0 до +1 В, при этом достигается наилучшая точность измерения. Примеры:

Ponguino.ino – теперь можно сыграть и аналоговым контроллером
KeyboardTool.ino – см. функцию считывания с аналоговых входов

Из шлейфа жёсткого диска с интерфейсом IDE мастер изготавливает “сенсорбаторий” – переходник для удобного подключения аналоговых датчиков:





Примеры для работы с ним:

KeyboardTool.ino – пользоваться так же, как при подключении датчиков без “сенсорбатория”
DiodeCalibration.ino – автоматическая калибровка при применении диодов в качестве точных термодатчиков

1. Подключить термистор к A0, резистор на 10 кОм к C0

2. Сделать делитель напряжения: резистор на 2 кОм ровно (можно из двух резисторов на 1 кОм) к A1, резистор на 10 кОм к C1

3. Подключить от одного до четырёх диодов в качестве датчиков температуры к A2 – A5, резисторы на 10 кОм к C2 – C5.

Теперь можно приступать к калибровке.

Файл MRETV.S написан на ассемблере, он будет компилироваться только при нахождении в папке для библиотек. Файл MRETV.extensions необходим для принятия решений о том, какие расширения задействовать при компиляции.

MRETV использует для генерации видео последовательный выход, при этом на монитор последовательного порта может поступать поток случайных данных. Переключатель позволяет выбирать между аппаратной и программной передачей данных. Во втором случае одновременно с генерацией видео реализуется полный дуплекс.



Название набора библиотек происходит от ника разработчика Mr. E, а также одновременно означает Master Raster (Extended) Transmission Vision.
Источник

Подключаем Ардуино к ТВ

Небольшой урок в котором вы узнаете, как подключить Arduino к телевизору (ТВ) для отображения текста, информации и графики.

Ардуино может быть подключена ко многим устройствам, включая датчики, электромеханические детали и даже простые дисплеи. Но представьте, что вы можете подключить Arduino к телевизору и использовать его для отображения текста, информации и даже грубой графики.

Комплектующие

По традиции начинаем с деталей, которые нам нужны будут для проекта:

  • 1x — Arduino Uno
  • 1x — 470 Ом резистор
  • 1x — 1 кОм резистор
  • 1x — ТВ с композитным видеовходом
  • 1x — Композитный видеокабель (разъем RCA)

Схема подключения Ардуино к ТВ

Принципиальная схема довольно простая, которую вы можете увидеть на рисунке ниже. Не забывайте, что на резисторах есть перпендикулярные полоски, которые говорят о величине сопротивления резистора.

Как это работает?

Теперь поговорим о том, как работают композитные телевизионные сигналы.

Композитные телевизионные сигналы довольно сложны и запутанны, поэтому мы рассмотрим только основы. Следует также отметить, что мы будем рассматривать только PAL, а не NTSC, поскольку у них несколько разные тайминги, и мы большей частью живем в Европе, которая использует PAL.

Скорость, с которой телевизоры показывают серию изображений для формирования движущегося изображения, называется кадрами в секунду (также известными как FPS). Поскольку каждый кадр является неподвижным изображением, и эти изображения на телевизоре рисуются по строкам, изображения отправляются на телевизор последовательно, каждый пиксель отправляется по одному за раз. Но если линия изображения является последовательными данными, как определяется яркость? В отличие от цифрового последовательного соединения сигналы PAL являются аналоговыми, а напряжение на последовательной линии определяет, насколько ярким является пиксель. На приведенном ниже графике показан график PAL и значения разных напряжений.

Если входной сигнал равен 0 В, телевизор видит это как сигнал синхронизации. В зависимости от того, как выполняется синхронный сигнал, его можно использовать для передачи ТВ одной из двух вещей:

  • Горизонтальная синхронизация — готовность отобразить следующую строку на нашей картинке
  • Вертикальная синхронизация — готовность к совершенно новому изображению

Напряжение между 0,3 В и 1 В — это пиксели изображения, где 0,3 В представляет черный пиксель, 1 В представляет белый пиксель, а напряжения между ними являются серыми. Цветные пиксели не будут покрываться, так как цвет очень сложный, используя сигналы фазового сдвига и цветовой синхронизации. Итак, как мы можем достичь этих уровней напряжения, если у нас нет аналогового выхода на Arduino Uno? Вот зачем наши два внешних резистора!

Arduino Uno при использовании в сочетании с библиотекой TV Out имеет два контакта: видео и синхронизацию. Вывод видеосигнала используется для передачи видеоданных (отдельные пиксели), а синхросигнал используется для синхронизации телевизора. Эти два контакта соединены вместе через R1 и R2, которые образуют простой делитель потенциалов, который дает следующие уровни напряжения.

Установка ТВ библиотеки

Начните с загрузки Arduino IDE, затем нажмите:

Sketch → Include Library → Manage Libraries
(Эскиз → Включить библиотеку → Управление библиотеками)

В открывшемся окне библиотеки выберите строку поиска и введите «TV Text».

Когда поиск будет завершен, выберите библиотеку ТВ-текста «TV Text» и нажмите «установить» (англ. — install).

Последний шаг будет включать в себя открытие встроенного примера, чтобы мы могли проверить его. Нажмите:

File → Examples → TV Out → Demo PAL
(Файл → Примеры → TV Out → Demo PAL)

Сборка устройства

Этот проект использует макет, чтобы помочь подключить Arduino Uno к двум резисторам и композитному видеокабелю. Ардуино подключен к компьютеру для легкого программирования, а также для обеспечения питания, и как только настройка будет выполнена (как показано ниже), вы можете запрограммировать Arduino и включить телевизор.

Если все идет по плану, у вас должно быть что-то похожее на экране телевизора, показанном ниже:

Это был первый урок из серии взаимодействия Ардуино и ТВ. Если мы получим хорошую обратную связь мы продолжим публикации уроков в данном направлении. Все отличных проектов.

Arduino и TV выход

В этом проекте Arduino будем использовать как TV выход для вывода изображения на телевизор, при помощи библиотеки TVout. Платформа Arduino способна выводить только черно-белую картинку. Этого может оказаться достаточно для некоторых проектов и в качестве знакомства с платформой Arduino.

Нам понадобится

  • Плата Arduino — 1шт.
  • Резистор 470 Ом — 1шт.
  • Резистор 1кОм -1шт.
  • AV-разъём (RCA) — 1шт.
  • Мини-макетка — 1шт.
Читать еще:  Zte af 3 прошивка. Прошиваем ZTE Blade: инструкции, прошивки, ссылки для скачивания. Получение root прав на ZTE Blade AF3

Принципиальная схема

Макет схемы TvOUT для Arduino

Как подключить Arduino к телевизору

Для начала сделаем RCA переходник для подключения к AV входу телевизора. Необходимо подключить 2 резистора 1 кОм и 470 Ом к центральному контакту коннектора.

Для сборки схемы я использовал мини-макетную плату, которая шла в наборе заказанного на Алиэкспресс. Рекомендую заказывать не отдельно компоненты а сразу наборы, никогда не знаешь, что может пригодится в следующем проекте.

После чего резистор 470 Ом подключить к 7 пину, чтобы подать сигнал Video. Резистор 1 кОм подключить к 9 пину Arduino, чтобы подать сигнал Sync.

Корпус коннектора «тюльпан» подключаем к пину GND на плате Arduino.

Я сделал небольшой удлинитель из проводов папа-мама.

Осталось залить скетч и подключить разъем RCA к входу AV телевизора.

Библиотека TVout для Arduino

Перед тем как писать код программы, необходимо скачать и подключить библиотеку TVout. Скачать ее можно с сайта code.google.com или в прикрепленных файлах ниже. Рекомендую скачивать последнюю библиотеку.

Перед тем как писать код, рекомендую ознакомится с библиотекой.

Описание библиотеки TVout для Arduino

Описание библиотеки TVout для Arduino

Функции установки режима

Функция begin() инициализирует вывод видеосигнала (разрешение экрана по умолчанию 128×96).
Синтаксис:
TVOut.begin(mode);
TVOut.begin(mode, x, y);

Параметры:
mode – стандарт видеосигнала:
_PAL – режим PAL;
_NTSC – режим NTSC.
Возвращаемое значение:
0 – в случае удачного соединения, 4 – в случае неудачи (недостаточно памяти для буфера вывода).

Функции задержки

Функция delay() осуществляет задержку выведенного изображения.
Синтаксис:

ms – задержка в мс с точностью: 20 мс для PAL и 16 мс для NTSC.

Функция delay_frame() осуществляет задержку выведенного изображения.
Синтаксис:

frames – количество кадров для задержки…
Функция полезна для сведения к минимуму или устранения на мерцание экрана, вызванные обновлением экрана.

Функции получения параметров

Функция hres() возвращает горизонтальное разрешение экрана.
Синтаксис:

нет.
Возвращаемое значение:

unsigned char – горизонтальное разрешение экрана.

Функция vres() возвращает вертикальное разрешение экрана.
Синтаксис:

нет.
Возвращаемое значение:

unsigned char – вертикальное разрешение экрана.

Функция char_line() возвращает максимально возможное количество символов в одной строке при выводе текстовой информации.
Синтаксис:

TVOut. char_line();
Параметры:

нет.
Возвращаемое значение:

unsigned char – количество символов.

Основные графические функции

Функция set_pixel() устанавливает цвет пикселя экрана в точке с заданными координатами.
Синтаксис:

x,y – координаты пикселя;
color – цвет пикселя:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция get_pixel() получает цвет пикселя экрана из точки с заданными координатами.
Синтаксис:

x,y – координаты пикселя.
Возвращаемое значение:

color – цвет пикселя:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция fill() заполняет экран заданным цветом.
Синтаксис:

color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция clear_screen() очищает экран, заполняя заданным цветом.
Синтаксис:

color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.

Функция invert() инвертирует содержимое экрана.
Синтаксис:

нет.
Функция shift_direction() сдвигает содержимое экрана.
Синтаксис:

TVOut.shift_direction(distance, direction);
Параметры:

distance – расстояние для сдвига содержимого экрана.
direction – направление сдвига:
UP=0 – вверх;
DOWN=1 – вниз;
LEFT=2 – влево;
RIGHT=3 – вправо.

Функция draw_line() соединяет на экране линией две точки.
Синтаксис:

x0,y0 – координаты первой точки;
x1,y1 – координаты второй точки;
color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_row() заполняет строку указанным цветом между двумя точками строки.
Синтаксис:

row – вертикальная координата строки;
x1,x2 – горизонтальный координаты точек строки;
color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_column() заполняет строку указанным цветом между двумя точками столбца.
Синтаксис:

column – горизонтальная координата столбца;
y1,y2 – вертикальные координаты точек столбца;
color – цвет заполнения:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_rect() рисует на экране прямоугольник.
Синтаксис:

TVOut.draw_rect(x,y,w,h,color);
TVOut.draw_rect(x,y,w,h,color,fillcolor);

Параметры:

x,y – координаты левой верхней точки;
w,h – ширина и высота рисуемого прямоугольника;
color – цвет границ прямоугольника:
0 – черный;
1 – белый;
2 – инвертировать цвет.
fillcolor – цвет заполнения прямоугольника:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция draw_circle() рисует на экране круг.
Синтаксис:

TVOut.draw_ circle(x,y,r,color);
TVOut.draw_ circle(x,y,r,color,fillcolor);

Параметры:

x,y – координаты центра круга;
r – радиус круга;
color – цвет границ круга:
0 – черный;
1 – белый;
2 – инвертировать цвет.
fillcolor – цвет заполнения круга:
0 – черный;
1 – белый;
2 – инвертировать цвет.
Функция bitmap() выводит на экран растровое изображение.
Синтаксис:

x,y – координаты левого верхнего угла точки вывода;
bmp – указатель на массив памяти, где хранится картинка;
w,h – ширина, высота выводимого изображения;
Ниже рассмотрим процесс создания кода выводимых растровых изображений.

Функции вывода текстовой информации

Для применения функций вывода текстовой информации требуетя подключение файлов с включенными в библиотеку или пользовательскими шрифтами. Для подключения пользовательского набора шрифтов необходимо в скетче подключить заголовочный файл:
#include
В состав библиотеки включены следующие наборы шрифтов:

font4x6;
font6x8;
font8x8;
font8x8ext.
Функция select_font() выбирает шрифт для вывода текстовой информации.
Синтаксис:

font – шрифт, подключенный в скетче.

Функция print_char() выводит символ на экран.
Синтаксис:

x,y – позиция на экране для вывода символа;
char – символ из текущего шрифта.

Функция set_cursor() устанавливает позицию курсора для вывода текстовой информации на экран.
Синтаксис:

x,y – координаты для курсора.
Функция print() выводит на экран строку, символ или число.
Синтаксис:

TVOut.print(x,y,string);
TVOut.print(x,y,char,base);
TVOut.print(x,y,int,base).

Параметры:

x,y – координаты курсора.
base – формат вывода:
BYTE = 0;
DEC = 10 (default);
HEX = 16.

Функция println() выводит на экран строку, символ или число и в конце символ перевода строки:
Синтаксис:

TVOut.println(x,y,string);
TVOut.println(x,y,char,base);
TVOut.println(x,y,int,base).

Параметры:

x,y – координаты курсора.
base – формат вывода:
BYTE = 0;
DEC = 10 (default);
HEX = 16.

Функции вывода аудио

Функции вывода звука позволяют отправлять на телевизор через аудиовыход сигнал определенной частоты.
Функция tone() выдает аудиосигнал определенной частоты.
Синтаксис:

TVOut.tone(frequency,duration);
TVOut.tone(frequency).

Параметры:

frequency – частота аудиосигнала;
duration – длительность сигнала.
Функция noTone() прекращает выдачу аудиосигнала.
Синтаксис:

Arduino и TV выход

Программа поддержки TV входит в библиотеку Arduino , написана Майлсом Метцером, для создания монохромного композитного видео с одним чипом AVR . Очень хорошо расписана здесь .

Все аппаратные проекты , основанные на TVout с открытым исходным кодом совместимы с библиотекой TVOUT поэтому я решил сделать простой проект по дизайну Hackvision . Моя версия использует одностороннюю печатную плату. В результате, она немного больше, чем версия Hackvision . Я должен был объединить две панели в одну с 6-штырьками. С самого начала, включен USB -последовательный преобразователь, чтобы легко можно было перепрограммировать, но схема по-прежнему включает в себя свой собственный регулятор 5 вольт вместо использования питания 5 Вольт устройства USB .

  • ATmega328 с Arduino Bootloader.
  • 1 х 28-контактный разъем IC.
  • ByVac BV 104 USB -последовательный преобразователь.
  • Пять 12мм х 12мм тактильные переключатели. Technobots .
  • Один 6 мм х 6 мм Тактильный переключатель.
  • 2 х 1N4148 диоды.
  • 1 х 1N4001 диод.
  • Регулятор напряжения 1 х 78 L 05 100мА.
  • 3 х 330 Ом 1/8 ватт резисторы.
  • 1 х 1 k 1 / 8 Вт резистор.
  • 1 х 10 K 1 / 8 Вт резистор.
  • 2 х 100nF керамических конденсатор а .
  • 2 х 22pF керамических конденсатор а .
  • 1 х 16МГц кристалл .
  • 1 х 100 uF 16 v электролитический конденсатор.
  • 1 х 47 UF 16 v электролитический конденсатор.
  • 2 х Гнезда.
  • 1 х 2,1 мм разъем питания постоянного тока.
  • 1 х 6- контактный разъем (разъем манипулятор).
  • 1 х 2-контактный разъем (дополнительный разъем Wii Nunchuk ).

Прошивка Hackvision использует Arduino digital Pin 12, чтобы определить, является ли стандартный телевизор NTSC или PAL . На схеме Hackvision этот вывод связан непосредственно на массу в PAL областях. Библиотека TVout имеет специфические функции программного обеспечения – начать (режим) и начать (режим, х, у) – установить NTSC или PAL , поэтому есть некоторая гибкость при использовании digital Pin 12. По этой причине, подсоединил вывод через 330оМ; резистор вместо того, чтобы привязать его непосредственно к земле. Это может избавить вывод от раннего выхода из строя. Аудио выход на digital Pin 11. Так же добавил 330ом; резистор последовательно с выходом..

330 ом; резистор последовательно с видеовыходом на digital Pin 7, чтобы сформировать делитель на75 оМ. Будет восприниматься как «белый». На digital Pin 9, резистор 1 K обеспечивает около 300 мВ от делителя, который идет к телевизору, как уровень «черный». А ‘низкий’ на этом выводе и на digitalPin 7 вместе (то есть 0 вольт) будет приниматься телевизором в качестве сигнала синхронизации.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: