Слово от переводчика: когда-то, когда страна и деревья были большими, а воображение просто безграничным, была у меня мечта – возможность выводить изображение с моего программируемого микрокалькулятора Электроника МК-61 (ну, там графики всякие, кривые, картинки ) на экран телевизора. Времена были дикие позднесовковые, и не то что игровая приставка и очень персональный МИКРОкомпьютер («Правец 8Д» или «Специалист» или «Сикнклер»), но и видеомагнитофоны были в диковинку. В общем, народ требовал зрелищ и те, кто помнит цикл учебно – развлекательных публикаций для программируемых калькуляторов под общим названием «Путь к Земле» (журнал «Техника – Молодежи») меня поймут.
Если кратко, то в виде научно-фантастического романа с неплохим сюжетом описывалось путешествие двух идиотов случайных знакомых – профессионального космонавта и мажора кибернетика с Луны на Землю. Отдельной остроты всему сюжету придавало то, что путешествовали они на т.н. «Лунолете», то есть малом космическом судне с химическим двигателем, предназначенным для передвижения в условиях прямой видимости над лунами и прочими небесными телами похожими на биллиардный шар с простым рельефом. В каждом выпуске цикла присутствовало упрощенное правда, но вполне обоснованное математическое описание каждого маневра как в условиях сильной (относительно) гравитации близкого небесного тела, так и при влиянии на небесный снаряд героев гравитаций Земли и Луны, а также программа для расчета очередного этапа полета. В общем, глядеть на циферки на экране калькулятора не то чтоб доставало, но хотелось красивых кривых на экран (как в ЦУПе).
TVOut + Video Experimenter concept on Arduino DUE!
С другой стороны, не будем забывать что даже примитивные микроконтроллеры семейства Arduino на порядок превосходят по производительности не только микропроцессоры тогдашних флагманов – МК-52 и МК-61, но и вычислительные возможности некоторых 8-битовых игровых приставок поздних времен (Atary 2600 и прочих Рембо так точно).
В общем, вступление вышло слегка затянутым, так что перейдем к теме сегодняшнего занятия – выводе видеоизображения с Arduino на экран телевизора.
К сожалению, конструктивные особенности Arduino позволяют выводить только монохромное (черно – белые) изображения, хотя и это может быть полезным в некоторых проектах, а ЧСВ поднимет у нубов так точно…
Шаг первый. Детали и ПО
Вам понадобятся:
Детали и агрегаты:
- Микроконтроллер Arduino
- Телевизор (без него точно никуда)
- Макетная плата или шилд для Arduino
- 2 резистора номиналом 470 Ом и 1 Ком
- 2 двухпиновых монтажных переходника папа-папа
- Экранированный телевизионный кабель с тюльпаном на конце
Программное обеспечение:
- Среда разработки/прошивки Arduino. Официальная ссылка
Шаг второй. Сборка
How to embed a Bitmap on TV with Arduino using TVout Library
От имени автора прошу прощение за пахабное низкое качество изображения готового ТВ – переходника. Поясняется это тем, что при написании инструкций, сначала надо их писать, а потом уже приступать к сборке с тщательным фотофиксированием всех этапов. В нашем же случае, получилось все с точностью до наоборот, так что из мутного изображения готового переходника понять что-либо просто невозможно.
Гораздо лучше, что куда и как паять, поясняет принципиальная схема, к тому же состоящая всего из нескольких деталей.
Sync — цифровой вывод 9 микроконтроллера
Video — цифровой вывод 8 микроконтроллера
GND — вывод GND микроконтроллера
Шаг третий. Программирование
Самая веселая часть – программирование.
В принципе, уже вышла новая версия ТВ – библиотеки, однако она еще более глючна нестабильна чем R5.91, которую использует автор, так что лучше качайте библиотеку по приведенной выше ссылке.
Текс программы для ленивых тех, кому лень перенабирать код с копии экрана:
#include 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() Прикращение вывода тонового сигнала.
Шаг четверый. Завершение
Если вы когда-нибудь почувствуете, что вашему 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. Делать это в оригинальной прошивке нам показалось святотатством — авторы очень скрупулезно рассчитали все задержки в коде. Предлагаем самый простой вариант перекодирующей функции:
Небольшой урок в котором вы узнаете, как подключить 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 и включить телевизор.
Если все идет по плану, у вас должно быть что-то похожее на экране телевизора, показанном ниже:
Это был первый урок из серии взаимодействия Ардуино и ТВ. Если мы получим хорошую обратную связь мы продолжим публикации уроков в данном направлении. Все отличных проектов.
Свежие записи
- Защита беспроводной сети Wi-Fi
- Ноутбук не видит аккумулятор Компьютер не видит батарею
- Как полностью удалить Internet Explorer
- Прошивка iPhone или как восстановить iOS через iTunes
- Что за папка SoftwareDistribution и можно ли её удалить?
- Как посмотреть покупки, бронирования и подписки
- Продвижение Facebook: руководство для начинающих
- Что такое data science и как это работает?
Источник: olegshein.ru
Подключение I2C экрана к Arduino
Пошаговая инструкция по подключению I2C экрана к Arduino.
Получил от китайцев два 20х4 экрана с I2C контроллерами — буду подключать к Arduino.
Для справки скажу, что такие экраны подключаются к Arduino всего по 4-м проводам.
Подключение I2C экрана к Arduino
Сам экран имеет 4 вывода:
- GND экрана подключаем к GND Arduino
- VCC экрана подключаем к +5V Arduino
- SDA экрана подключаем к 4 аналоговому пину Arduino Uno
- SCL экрана подключаем к 5 аналоговому пину Arduino Uno
В результате выглядеть будет так:
Теперь можно подключить Arduino к компьютеру и перейти к программной части.
LiquidCrystal_I2C — библиотека для работы с I2C экраном
Для написания кода нам понадобится библиотека LiquidCrystal_I2C. Скачиваем ее и распаковываем содержимое архива в папку arduino-1.0.Xlibraries.
liquidcrystal_i2c.zip (8,4 KiB, 21 176 hits)
Проверочный скетч
Для проверки, загрузим в Arduino следующий код:
#include
#includeLiquidCrystal_I2C lcd(0x27, 20, 4); // Для экрана 20х4 (четырехстрочный)
//LiquidCrystal_I2C lcd(0x27, 16, 2); // Для экрана 16х2 (двухстрочный)void setup()
lcd.begin();
lcd.setCursor(0, 0); // 1 строка
lcd.print(«LCD I2C Test — 20×4»);
lcd.setCursor(0, 1); // 2 строка
lcd.print(«01234567899876543210»);
lcd.setCursor(0, 2); // 3 строка
lcd.print(«01234567899876543210»);
lcd.setCursor(0, 3); // 4 строка
lcd.print(» geekelectronics.org»);
>void loop()
>
Код хорошо прокомментирован. Думаю, вопросов не возникнет.
P.S. Возможно, что после загрузки кода экран останется пустым.
В этом случае надо покрутить регулятор контрастности на плате I2C.
keyboard_arrow_downПодключение I2C экрана к Arduino
Источник: geekelectronics.org
Выбор программ на телевизоре arduino. Установка ТВ библиотеки
Слово от переводчика: когда-то, когда страна и деревья были большими, а воображение просто безграничным, была у меня мечта – возможность выводить изображение с моего программируемого микрокалькулятора Электроника МК-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, которую использует автор, так что лучше качайте библиотеку по приведенной выше ссылке.
Текс программы для ленивых тех, кому лень перенабирать код с копии экрана:
#include 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() Прикращение вывода тонового сигнала.
Шаг четверый. Завершение
Если вы когда-нибудь почувствуете, что вашему 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. Делать это в оригинальной прошивке нам показалось святотатством — авторы очень скрупулезно рассчитали все задержки в коде. Предлагаем самый простой вариант перекодирующей функции:
Небольшой урок в котором вы узнаете, как подключить 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 и включить телевизор.
Если все идет по плану, у вас должно быть что-то похожее на экране телевизора, показанном ниже:
Это был первый урок из серии взаимодействия Ардуино и ТВ. Если мы получим хорошую обратную связь мы продолжим публикации уроков в данном направлении. Все отличных проектов.
Источник: cammeteo.ru