РадиоКот :: Удлинитель ИК пульта с подменой команд
Например TDA7294

РадиоКот >Конкурсы >Поздравь Кота по-человечески 2017! >

Теги статьи: Добавить тег

Удлинитель ИК пульта с подменой команд

Автор: boka1733, pvv17@mail.ru
Опубликовано 11.09.2017
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2017!"

Когда заканчиваешь ремонт на кухне, только тогда и понимаешь, с чего надо было начинать...


Пол, стены, мебель - с этим все впорядке, а вот расположение телевизора на кухне существенно поменялось.
Он перекочевал с холодильника, где планировался (слишком высоко) в угол над рабочим столом (под шкафчик). 19" LCD там удачно поместился.

Ну, перенесли, и что такого?

А то, что ТВ на кухне сейчас обязательный предмет, поэтому планировали и заложили провода в стены ещё на нулевом цикле ремонта, но, оказалось, проложили совсем не туда.
У меня ТВ самый обычный, не smart, модели MYSTERY. Картинка на него идет с приставки проводного ТВ Ростелеком.
Т.е. это просто монитор, ВЧ вход не используется.
Тут и возникает проблема.
ТВ на кухне - это "вторая точка потребления контента".
Первым (и основным) местом для произнесения фразы "опять нечего смотреть" является диван в комнате, где стоит большой ТВ, в тумбочке под ним стоит та самая приставка Ростелекома,
Wi-Fi роутер, медиаплеер, спутниковый ресивер... в общем - домашний центр всего медийного.
Кухня - за стенкой (не капитальная - гипс). Если в ней сделать дырку и проложить кабель... дальше можно не продолжать, так как супруга на слова "взять дрель и просверлить новые обои"
одарила таким теплым взглядом ... А дырка нужна большая. Кабель HDMI требуемой длины (4 метра) найти можно, но они весьма толстые и жесткие, и разъемы не маленькие.
Проложить незаметно и красиво не получиться.
Без сверления стены кабель HDMI мне не проложить впринципе (например, внутри плинтуса с коробом по периметру комнаты), и длина "в обход" получается 8 метров.
Было принято решение использовать второй, "добрый, теплый" НЧ выход приставки. Да, длина для НЧ сигнала тоже великовата - 8м, но другого выхода небыло.
Варианты из простого ТВ сделать "смарт", путем добавления приставки на Андроиде с WiFi и "гнать контент по сети" не рассматривался по идейным соображениям -
главная хозяйка на кухне супруга, а она все эти ГАД-жеты на дух не переносит.
Её мечта - телевизор с одной (!) кнопкой "включить", а об остальном эта железяка должна сама догадаться :)

Я взял провод с хорошим экраном (на метраж), гибкий, и просунул его по плинтусу, за шкафчиками, за холодильником - прошел через все потайные места и только потом распаял на концах разъемы.
В результате, получилось как с сусликом - его не видно, но он там есть! И обои не пострадали :) Ушло 8м по длине провода.
По качеству картинки - да, есть ухудшение, небольшие "тянучки" за текстом на контрастном фоне, но в динамике их незаметно.
Изображение всех устроило и на процесс приготовления/усвоения пищи не повлияло.

Первую проблему решил.
Возникает вторая, про которую собственно и статья - как управлять приставкой в комнате (переключать каналы), находясь на кухне?
Элементарно, скажет умудренный опытом радиокот - на рынке полно ИК удлинителей, покупай - всего делов.
Ну,во-первых, "покупай" - это не наш метод решения проблем. К тому-же, готовые удлинители идут с проводом метра полтора- два, а мне надо 8 метров.
На концах этих готовых проводов уже заделаны методом литья ИК приемники,передатчики, разъемы, которые не позволят просунуть провод в маленькое сечение короба плинтуса -
придеться отрезать, прокладывать, удлинять, паять.
Зная качество нынешних проводов (наушники, зарядки...) надо сразу весь провод менять на нормальный, а разъем не разборный, значит надо и разъем новый...
В общем, покупную вещь придется капитально "раздербанить".
И это ещё не все.


Пульт.

Как я уже говорил - "на диване" центр управления всем, где живет несколько пультов от разных устройств, и "релакс" иногда превращается в жонглирование этими коробочками.
Здесь выручает универсальный пульт - 4 в одном или 6 в одном. Запрограммировал все в один, родные пульты убрал в тумбочку, и красота - легким нажатием кнопки (в полудреме) каналы переключаются...
Как быть с кухней?
Если представить, что уже стоит ИК удлинитель, для переключения каналов на приставке (которая в комнате) таскать на кухню и обратно пульт?Неудобно, он будет "вечно" забыт не там, где нужен сейчас.

Второй универсальный пульт на кухню?

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

И тут я задумался: а что, собственно, надо от пульта на кухне для управления приставкой?

Команда "канал +" и команда "канал -" - ВСЕ!

Регулировка громкости есть на самом ТВ. Питание приставки никогда не выключается.
Никаких других действий - ходить по меню, настройки, медиаконтент ... делать в подавляющем большинстве случаев не нужно!
Это все прекрасно делается в комнате, а на кухне достаточно нажать MUTE при рекламе таблеток от диареи (пардон) когда вкушаешь утренний чай, да переключить на следующий/предыдущий канал.
И ради этого заводить новый пульт?
На современных ИК пультах очень много кнопок, большая часть из которых "ненужные", или нужны один раз.
Некоторые работают только когда зайдешь в меню или включишь специальный режим.
Вот я и решил задействовать кнопки "вправо - влево" на пульте моего ТВ MYSTERY для преключения каналов на приставке ростелекома.
Штатно, эти кнопки должны переключать эфирные каналы ТВ, а в режиме "НЧ вход" (основное и единственное состояние моего ТВ на кухне) они не воспринимаются ТВ как команды.

Остается только принять эти команды дополнительным приемником, ПЕРЕКОДИРОВАТЬ в команды пульта приставки ростелекома, передать по проводам на ИК передатчик,
светодиод которого расположен рядом с мордочкой приставки и "поморгать" команду.

Передаваться по проводам будет именно код команды.
Вычислительных ресурсов AVR хватает на прием и на передачу, ещё и остается, НО - тянуть на 8 метров сигнал 38кГц (модуляция посылки) от ноги контроллера нереально.
Поэтому применено два микроконтроллера - первый принимает сигнал, передает по проводам код команды, второй микроконтроллер принимает этот код и моргает ИК диодом.

На рисунке изобразил структурную схему всего устройства.


Вскрытие пульта MYSTERY показало, что там применена микросхема TT6221. Её кодовая посылка состоит из импульса СТАРТ и 32 бит информации.
В прилагаемом к статье архиве я положил pdf по этой микросхеме.

На логическом анализаторе команда выглядит так:


это уже с выхода интегрального ИК приемника SM3374, коих существует превеликое множество.
Внимательный радиокот заметит, что на приведенной мной картинке стартовый импульс начинается с перепада 0->1,
а в коде программы я настраиваю прерывание Falling, т.е. на перепад 1->0, как же так?
Все просто - картинку пакета импульсов я снимал в другой схеме, где сигнал инверсный, да и выглядит такой сигнал "понятнее" - обычно импульсом называют то, что "выскочило" снизу вверх.
Так нагляднее для понимания.
В рабочей-же схеме все наоборот - на выходе интегрального ИК приемника постоянно висит логическая 1 и препад в 0 начинает весь процесс.
Соответственно, инвертируются все H и L состояния по рисунку.
Двойное слово (32 бита) команды делится на два поля Adr и Data - так по pdf.
Если копнуть глубже и внимательно почитать pdf, то эти 32 бита предаются таким образом:


В программе я "ловлю" бит ноль по длительности состояния линии в низком (L) и высоком (H) состоянии, вот кусочек проверки

if ((tCountL>=4) && (tCountH<=6)) //проверка длительности L и H на линии -> принят bit=0

иначе - считаю, что пришла единица (без контроля).
С точки зрения "академической" это может быть и не верно - а вдруг помеха... тогда этот неверный бит (с помехой) хоть и пройдет дальше, но не будет воспринята команда приемником -
у него своих проверок много, и эта искаженная команда проигнорируется.
Пользователь просто нажимает кнопку на пульте второй раз, если ожидание исполнения слишком долгое.
Тогда зачем мне делать "проверку" перед "проверкой"? Идем по простому пути!

Вскрывать пульт приставки ростелекома я не стал - принял команду на логический анализатор, и о чудо, там оказалась такая-же последовательность из 32 бит со стартовым импульсом.
Систем кодирования для пультов существует много, и они разные.
Отличие, что естесственно, состоит только в разном наборе бит для полей Adr и Data для разных устройств и разных команд.

В итоге, задача сводится к такому алгоритму:
принимаем двойное слово команды с пульта, вида 0xABCDABCD
если это 0x00FBE01F (кнопка вправо на пульте MYSTERY) то заменить на 0x00BF18E7 (канал + на приставке ростелекома)
иначе - передать команду без изменений

Разумеется, число сравнений равно числу команд, которые мы подменяем.
Я ещё заменил все цифровые кнопки, чтобы сразу набирать номер канала.

Как я узнал команды пульта? Очень просто - с помощью половины своей схемы.

Способ получения списка команд пульта такой:
Подключаем готовую плату приемника через переходник TTL-RS232-USB к компьютеру.
Запускаем любую терминалку, например PuTTY, на COM порт, который будет присвоен переходнику (скорость 19200 8N1).
И стреляем пультом в приемник. Принятые команды передаются в текстовом HEX формате, печатаются на экране.
Остается понажимать все кнопки пульта и записать их коды.
Для второго пульта, команды которого мы будем эмулировать, тоже надо составить такую таблицу.
И выбрать какой код кнопки на какой будем заменять.
Предварительно, надо удостовериться, что нет реакции на эту команду первого устройства (в моем случае телевизора), иначе будете переключать каналы на приставке,
а телевизор (допустим) уменьшает громкость.
Внизу пульта много всяких медийных кнопок, которые в ТВ работают только "заглубившись" куда-то в меню - вот из них и можно выбрать для переключения.
Например, медийная "перемотка вперед - назад" вполне может подойти как "канал +" и "канал -".
Для перекодирования в программе надо добавить/изменить в тексте программы строки вида

// перекодирование "кнопка >" в команду "канал +" для Ростелеком
if ((Adr.IRAdr==0x00FB) && (Data.IRData==0xE01F))
{ Adr.IRAdr=0x00BF;
Data.IRData=0x18E7;
}
после чего компилировать и прошивать готовый hex уже в AVR.
Если надо добавить-изменить команды, то придется заново перекомпилировать программу.
Неудобно?
Ну,допустим, для домохозяйки и неудобно, но мы ведь радиокоты и программатор типа AVR910 должен быть всегда на расстоянии вытянутой руки (я хотел сказать лапы).
Надо только на плату припаять 6 штырьков. Или поставить панельку и прошивать контроллер отдельно.
Да и эту процедуру (выбор кнопок и прошивка) надо сделать один раз. Так зачем городить огород сервисных команд?
Сервисные команды сначала надо оттестировать, учесть всевозможные ошибки юзера... это долго и муторно. Я не стал этого делать.

Хотя, не вижу ничего сложного в добавлении в приемник режима "Обучение" без перепрошивки, например, в таком виде:

- берем пустую ногу AVR и ставим для неё снимаемую перемычку на землю. Нет перемычки==1 работа, перемычка стоит==0  обучение.
- на ещё одну ногу сажаем светодиод - надо-же как-то сообщать юзеру информацию?
- добавляем проверку
_@_ если нога==0 (обучение) - зажигаем светодиод и ждем команду от пульта
- принятая команда запоминается в EEPROM (создать массив ПРИЕМ)
- гасим светодиод и ждем вторую команду от другого пульта, НА КОТОРУЮ нужно будет заменять первую
- принятая команда запоминается в EEPROM (создать массив ПЕРЕДАЧА)
- i++ счетчика команд. Oграничить i (число команд) разумным пределом (размером EEPROM)
- мигнуть светодиодом и повторить на метку _@_
- при снятой перемычке (1 - режим работа) принятые команды проверять по массиву.

Желающие поупражнятся в программировании могут это проделать самостоятельно.

Я загнал коды всех своих пультов в такую табличку в Excel

и храню её с целью своеобразного бэкапа.
Зачем?
Оказывается, с течением времени, пластик (резина?) кнопок пульта разлагается на какую-то мерзкую слизь (ненароком думал, что это лапы такие грязные, а оказалось - деградация материала),
графитовые пятаки плохо контачить начинают, короче, пульт погибает (или просто дети, кот, собака или попугай им поиграют).
Найти родной пульт, чтобы прошить его команды в универсальный для замены становится проблемой, особенно для старой аппаратуры.
А тут вот они, "все ходы записаны".
Для восстановления утраченного пульта берем половину моей сжхемы - передатчик. Подключаем его через переходник TTL-RS232-USB к компьютеру.
Запускаем терминалку PuTTY на 19200 и печатаем команду в формате .ABCDABCD
Импульсы с передатчика прошиваем в новый (универсальный программируемый) пульт.

Вернемся к ИК удлиннителю в его первоначально задуманном виде.

В итоге, у меня на кухне живет родной пульт от ТВ, который включат ТВ, MUTE на ТВ, а цифровые кнопки (0-9), кнопки "вправо влево", принимаются, перекодируются и передаются на ИК передатчик к приставке ростелекома моей маленькой коробочкой с AVR tiny2313, которая приклеена рядом с ТВ.
Если на кухню принести родной пульт от приставки, то все его команды будут ретранслироваться в комнату без изменений.

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

приемник : AVR tiny2313 в дип корпусе,8MHz RC внутренний, ИК приемник, стабилизатор питания на 5в.
                 Выход ИК приемника TSOP31238 идет на ногу 6 (PD2 в DIP) внешнего прерывания INT0, по спадающему (Falling) фронту.
передатчик:AVR tiny2313 в дип корпусе,кварц 16МГц, ИК светодиод, транзистор, резистор , стабилизатор питания на 5в.
                  программа "дрыгает" ногой PD6 порта D (11 нога в DIP) на базу транзистора, который управляет ИК светодиодом.
                  ноги порта RS232 приемника подключены соответственно на TX RX передатчика.

Почему применена AVR tiny2313? Просто лежали в коробочке две штуки в DIP корпусе, вот и пригодились.
Транзистор и ИК светодиод взял первые попавшиеся.Припоминаю, что транзистор был прямой проводимости(нет возможности "расковырять" и посмотреть уже работающее изделие, а сразу не записал) 

Работу ИК диода можно легко увидеть (для тех, кто не знал) через камеру телефона или вообще через любую видеокамеру. Стреляем в объектив и видим вспышки.

Если надо поменять полярность сигнала управления транзистором, на котором сидит ИК диод (например, транзистор другой полярности поставили),
то в программе передатчика надо изменить на 0 значение константы

#define PortOFF 1

Очевидно, что в покое светодиод не должен светиться, а мигать только при передаче пакета импульсов.
Эта константа задает какое состояние порта соответствует OFF - закрыт транзистор, управляющий ИК светодиодом.
Резистор, последовательно с ИК диодом влияет на яркость - тоже надо подобрать "по месту" установки передатчика.
Слишком яркие вспышки могут слепить приемник приставки, а на слабые не будет реакции.
У меня работает вообще без этого резистора -диод жив, уже год.

Конструктивно все сделано на двух маленьких макетных платах, которые закреплены на двух обычных телефонных розетках.
Фотографировать эти макетки не буду, дабы не травмировать эстетические чувства публики :).
В качестве линии связи применен плоский телефонный провод на 4 жилы -черный красный зеленый желтый,с обжатыми на концах RJ11, которые и вставляются в розетки.
В самих розетках провода уже под винты разделаны - удобно. Сначала просунул провод по коробу плинтуса, а потом обжал на концах RJ11. Ушло 8 метров.
Самое неудобное место при прокладывании проводов в плинтусах - прохождение углов. Провода с разъемами там не проходят.
Сетевой блок питания (220->12В) стоит возле передатчика (там были свободные розетки). В передатчике свой стабилизатор 5в на 78L05.
Эти-же 12в подаются по двум проводам (8 метров) на приемник, где стоит другой стабилизатор 78L05,
который делает из оставшегося от 12в напряжения (из-за падения на 8 метрах провода) 5в для работы схемы,ток там маленький.
По двум оставшимся проводам идет RS232 для передачи команд.
Кварц применен для стабильной работы по RS232 - при работе от внутреннего генератора связь не стабильна.
Можно поставить кварц и на первую плату (передатчик, напомню, прошит на внутренний RC генератор 8МГц), но и на RC заработало.
Программа написана для среды CodeVision. Так как код очень простой, то его легко можно перенести на любой другой компилятор.
Старался делать подробные коментарии в тексте программ.

Есть одно маленькое отличие в передаче команд через повторитель.
Когда на пульте зажимается и удерживается кнопка, то пульт передает команду один раз, а потом передает специальную команду "повтор", пока
удерживается кнопка. Я эту команду "повтор" реализовал в другом виде - передаю каждый цикл повтора последнюю команду полностью, а не команду повтора.
Так было проще реализовать, все работает нормально.

В "боевом" режиме поделка уже больше года, не выключается никогда - замечаний нет.
Была только одна неисправность - стреляю пультом - каналы не переключаются.... сразу 100500 версий,
оказалось - отклеился (от жары) двусторонний скотч, на котором держался ИК передатчик, и он упал за препятствие.

Вот и все!

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

Интересных и полезных проектов всем!

программа

pdf пульта


Файлы:
pdf
программа на С


Все вопросы в Форум.




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

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

15 22 5