Например TDA7294

РадиоКот > Статьи

Некоторые протоколы ИК-пультов. Часть первая

Автор - Aheir, aheir@radiokot.ru

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

Долго ли, коротко ли, но собралось у меня такое вот разнообразие ИК-пультов и зачесались лапы приспособить их к делу:

Пульты

Скажу сразу, что до конкретных применений мы в этот раз не доберемся, но вот что это вообще за звери такие выясним. Сильно в теорию вдаваться не буду, скажу лишь, что как правило информация передается пультом в виде модулированной прямоугольными импульсами разной длительности несущей частоты, которая обычно равна 36кГц. В качестве приемника такого сигнала можно применить фотодиод с необходимыми цепями усиления и фильтрации, а можно пойти по пути для ленивых и использовать интегральный фотоприемник типа TSOP17xx, где хх – и есть та самая несущая частота, который имеет цифровой выход и выдает непосредственно огибающую несущей частоты, те самые заветные нолики и единички. Именно так я и поступил, поэтому все дальнейшее будет происходить при непосредственном живейшем участии приемника TSOP1736:

Интегральный фотоприемник TSOP1736

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

Я, естественно, начал с поиска информации в Сети, но, к своему глубочайшему удивлению, ничего кроме нескольких вариантов исходников для кода RC-5 (один из существующих протоколов) не нашел. Сгоряча зашив пару вариантов этих прошивок в отладочную ATMega16 и убедившись в их неработоспособности, я взялся за осциллограф. Как оказалось, очень правильно. Дело в том, что ни один из имеющихся у меня пультов по протоколу RC-5 не работал.

Очень много полезной информации по этому поводу представлено на сайте http://www.sbprojects.com, которым я и руководствовался в своих дальнейших изысканиях.

После снятия осциллограмм и сравнения их с найденными на уже названном сайте образцами стало ясно, что из пультов один работает по протоколу Sony SIRC (как ни странно, это был пульт о муз.центра Sony), а все остальные - по протоколу NEC.

В частности, для протокола NEC:

Общий вид посылки

Общий вид посылки

Временная диаграмма и способ кодирования 0 и 1

Временная диаграмма и способ кодирования 0 и 1

Посылка при удержании кнопки пульта

Посылка при удержании кнопки пульта

Код повтора

Временная диаграмма для кода повтора (удержание кнопки)

А для протокола SIRC:

Общий вид посылки

Общий вид посылки

Временная диаграмма и способ кодирования 0 и 1

Временная диаграмма и способ кодирования 0 и 1

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

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

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

Замечу, что фотоприемник имеет инверсный выход, т.е. в момент присутствия ИК-излучения на его выходе 0, поэтому прерывание будем настраивать по спаду. Таким образом, в плане аппаратной реализации нам достаточно подсоединить выход фотоприемника к ножке свободного внешнего прерывания микроконтроллера, сконфигурированной как вход с «подтяжкой» (не лишним будет также поставить и внешний подтягивающий резистор килоом на 10 кОм плюсу питания).

Именно по этому приблизительному алгоритму я и написал программы обработки этих протоколов с помощью восьмибитного таймера-счетчика и внешнего прерывания МК ATMega16. NEC протокол чуть сложнее в реализации в силу большего количества возможных условий (добавляется специфичный импульс повтора), но принцип остается тем же.

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

Исходники достаточно подробно прокомментированы, а их более подробное обсуждение предлагаю продолжить на форуме.

P.S.
По большому счету, применение у ИК-пультов одно - управление. А вот уж многообразие устройств для управления ограничено только вашей фантазией. Это могут быть исполнительные устройства прообраза "умного дома" (свет, шторы/жалюзи и т.п.), усилители, игрушки и т.д., и т.п...

Вопросы, как обычно, складываем тут.

Файлы:
Исходники одним архивом
Для NEC-протокола
Для Sony-протокола
Подборка материалов по протоколам с сайта www.sbprojects.com


ID: 18

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

18
1 1
Подробно