Dari0s

На Пикабу
120 рейтинг 0 подписчиков 0 подписок 1 пост 0 в горячем
Награды:
5 лет на Пикабу
20

Возвращаем пульт к "жизни"

Всем привет. История такова: в 2014 году купили телевизор, уже через 2 года пульт перестал работать. Разобрал, почистил, собрал - результата 0. Еще попробовал найти пульт в приложении Mi Remote, но увы - его там не было. Отложил до лучших времен - и вот, время настало. С помощью камеры смартфона увидел, что при нажатии любой кнопки пульта ИК светодиод загорается и горит все время. Решил проверить какие посылки отправляет пульт при этом. Результат удивил - команд куча, все разные, при чем даже адрес разный. Большинство пультов работает на NEC протоколе, как оказалось и этот тоже. Мне очень повезло(как я сперва подумал), так как на обратной стороне платы пульта были расписаны коды каждой кнопки (в шестнадцатеричном формате) и даже сам адрес - фото ниже.

Возвращаем пульт к "жизни" Пульт от телевизора, Дистанционное управление, Длиннопост

Нашел программу для смартфона, куда можно импортировать свои команды (irplus remote).
Затем нашел инструкцию как это сделать: https://irplus-remote.github.io/#learning
Нам понадобится пример LIRC файла с командами и временными интервалами отсюда: http://lirc.sourceforge.net/remotes/
Пример файла для пульта от телевизора LG:
name LG_AKB69680403

bits 16

flags SPACE_ENC|CONST_LENGTH

eps 30

aeps 100


header 9044 4436

one 606 1632

zero 606 517

ptrail 598

repeat 9029 2210

pre_data_bits 16

pre_data 0x20DF

gap 107878

toggle_bit_mask 0x0


begin codes

input 0xD02F

energy_saving 0xA956

KEY_POWER 0x10EF

tvradio 0x0FF0

av_mode 0x0CF3


pre_data - это адрес, для моего пульта он будет таким: 0x00BF (как я думал).
Затем переходим по ссылке, где расположен удобный конвертер, который преобразует LIRC в выходной xml файл для приложения: https://irplus-remote.github.io/converter/lirc.html
Команда включения - выключения на моем пульте имеет формат 03 в шестнадцатеричном виде (см. фото выше). Но как можно увидеть выше, количество битов, передающихся после адреса равно 16 (вторая строка примера LIRC файла). В описании NEC протокола указано, что после передачи команды (8 бит) за ней должна идти та же команда, но полностью инверсная, получаем команду вида 0x03FC. Выходит сначала передаем 16 бит адреса, затем 16 бит команды.
Попробовал прописать кнопку включения, конвертировал LIRC в xml, вот что получилось:


<irplus>

<device manufacturer="MANUFACTURER" model="MODEL" columns="12" format="WINLIRC_SPACEENC" bits="16" pre-bits="16" toggle-bit-pos="0" gap-pulse="598" gap-space="107878" one-pulse="606" one-space="1632" zero-pulse="606" zero-space="517" header-pulse="9044" header-space="4436">

<button label="&#xf011;" alt="POWER" span="4">0x00BF 0x03FC</button>

</device>

</irplus>


Сохранил на компьютере с расширением .xml , скормил файл приложению. Попробовал включить телевизор - но эффекта 0. Полез искать даташит на микруху, которая стоит на плате пульта. Нашел, но только на китайском. Нашел аналог моего пульта в интернет магазине, в описании была указана другая микруха, но адрес и команда включения совпадали. Нашел даташит на эту микруху, давай читать. Обратил внимание всего на одну строчку: Codes are transmitted from the LSB - передача начинается с МЛАДШЕГО бита. Значит нашу команду в двоичном виде нужно перевернуть вверх ногами. 03 - 00000011 в двоичном виде, первые 4 нуля - это старшие биты, то есть после переворачивания должно получится 11000000 - 0xC0. Добавим еще инверсную часть команды и получим 0xC03F. Данную процедуру проделываем для остальных команд аналогично. Тоже самое проделываем с адресом - получаем адрес 0x00FD.
После того, как все команды записаны, конвертируем LIRC в XML и кормим xml приложению. Проверил - все кнопки рабочие. Результат: 
Возвращаем пульт к "жизни" Пульт от телевизора, Дистанционное управление, Длиннопост
Возвращаем пульт к "жизни" Пульт от телевизора, Дистанционное управление, Длиннопост
Показать полностью 3
Отличная работа, все прочитано!