Привет! Сегодня расскажем более подробно о одной из функции gm328a, а именно о декодировании и кодировании ИК сигнала пульта дистанционного управления(ПДУ). Это дополнение к основной нашей статье о gm328a.
Данная функция позволяет считать код пульта дистанционного управления при помощи ИК приёмника, а так же передать аналогичный код при помощи ИК диода.
Начнём с считывания кода. Для этого мы взяли ИК приёмник от телевизора.
Помимо ИК приёмника на плате от тв имеются контакты светодиодов G-green и R-red, они нам не понадобятся, не обращаем на них внимания. Для подключения нам нужны 3 провода GND, IR, 5V. Включаем gm328a, заходим в меню и выбираем IR_Decoder.
На экране появится информация о подключении ИК приёмника, подключаемся к ним соответственно:
Надпись «standing by. » говорит нам о готовности, т.е. прибор ожидает сигнал. Когда подключили ИК приёмник, нажимаем на ПДУ ту кнопку, код которой мы хотим получить. Мы выбрали кнопку уменьшения громкости на ТВ приставке. Нажимаем.
Инфракрасный сигнал SIRCS от пульта ДУ от телевизора
Получаем код на дисплее, он обозначен как All 32bit и выглядит так: 36C986A5 .
Разберём по порядку:
- uPD6121 — это протокол
- user code1= A5 и user code2= 86 — это код ПДУ
- data= C9 и ~data= 36 — это код кнопки ПДУ.
Код считан. Запоминаем его или записываем в блокноте.
Теперь попробуем передать код на устройство. Заходим в меню, выбираем пункт IR_Encoder.
Далее необходимо ввести данные кода в соответствующие поля:
- Выбираем протокол: uPD6121
- user code1=A5
- user code2=86
- data=C9
- ~data=36 выставляется автоматически
Перемещаемся по пунктам при помощи нажатия на энкодер, изменяем код вращением энкодера.
Берем ИК диод, можно взять от старого пульта.
Подключаем его к разъёму генератора и ШИМ.
На дисплее выбираем пункт » emit:» и поворачиваем энкодер по часовой стрелке.
Код отправляется на устройство через ИК диод и срабатывает функция выбранной кнопки (уменьшение громкости). Т.к. сигнал очень слабый, всего 6mA, диод нужно подносить к устройству довольно близко, мы проверяли на расстоянии 10см от устройства приёма.
Gm328a поддерживает только два протокола uPD6121 и TC9012. Поэтому не все пульты распознаются устройством, например ПДУ от телевизора Sony и Panasonic не были прочитаны. А пульты от телевизора Hyundai и ТВ приставки одного из популярных провайдеров, считались без проблем.
Источник: dzen.ru
Распознавание ИК команд с помощью UART на AVR
Введение О распознавании команд с инфракрасного пульта написано много статей. В-основном, речь идёт о протоколе RC5 от пультов Philips [1]. Этот протокол не единственный и не самый распространённый. Хорошее описание других форматов на русском языке можно найти в документе [2].
Настроики пульта на IDTV
Во всех найденных мною статьях распознавание производится чтением состояния датчика TSOP в строго определённые моменты времени ( в обработчике прерывания от таймера или в основном цикле программы ). Однако в моём последнем проекте мне нужно общаться с внешним устройством со строгими временными задержками, из-за чего приходится запрещать прерывания на периоды до 2мс. Этот факт делает невозможным опрос состояния датчика TSOP с требуемой точностью ( раз в 560мкс +-100мкс ). Так родилась идея использовать UART как “хитрый” сдвиговый регистр.
В полученной реализации при декодировании NEC-подобного протокола необходимо неспешно опрашивать состояние датчика лишь раз в 4мс, при этом сам микроконтроллер может находиться в idle mode или даже в power down mode! ИК протоколы Не вижу смысла повторять описание протоколов ИК пультов — они описаны достаточно хорошо в статье [2].
Обозначу лишь основные моменты: ИК-посылка на примере протокола NEC состоит из Mark pulse(9мс), Space pulse(4.5мс) и последовательности импульсов данных.
В разных протоколах биты данных кодируются по-разному, но длина импульса одной полярности всегда равна или кратна длине импульса противоположной полярности (разницу в несколько микросекунд можно игнорировать, так как накопленная ошибка в течении посылки не мешает декодированию.Важно, что в середине импульса можно получить значение бита). Следует отметить, что на выходе датчика TSOP показанный сигнал будет инвертирован:
Для декодирования команды необходимо синхронизироваться с фронтом первого импульса данных, подождать его середины (280мкс), и продолжить опрос состояния датчика каждые 560мкс: Моменты опроса датчика должны быть соблюдены достаточно точно (не более +-100мкс).Если временнЫе промежутки соблюсти невозможно, то программное декодирование работать не будет. Нужно искать какое-то другое решение. Решением “в лоб” было бы использовать второй микроконтроллер, или специализированную микросхему-декодер.
Однако стоит вспомнить, что “на борту” у AVR есть масса устройств, которые можно попробовать применить не по назначению 🙂 UART протокол UART использует простой последовательный протокол [3]:
При простое линия держится в стоянии “1”. Начало передачи определяется спадающим фронтом “стартового” бита (0).Далее следуют биты данных, далее — бит четности (может не использоваться ), далее — один или два стоповых бита (1) . То есть после передачи байта линия возвращается в состояние 1, и цикл передачи начинается снова. Длины всех битов одинаковы и равны 1/Baud rate. Протокол UART не совместим с ИК протоколами.
Однако, если забыть о UART протоколе и рассматривать приёмник UART как сдвиговый регистр с таймером и синхронизацией по спадающему фронту, то окажется, что он подходит для распознавания (почти) любых последовательностей. О том, как именно работает приёмник UART , можно прочесть в даташите на AT90USB162[4].
После определения спадающего фронта приёмник делает паузу длинной ½ бита, после чего проверяет, что линия всё еще в “0” ( valid start bit detection). После этого начинается цикл приёма битов данных, без всяких проверок, через промежутки, равные длине бита.
Биты данных “заезжают” в сдвиговый регистр приёмника, а первый стоповый бит — в флаг FE в инвертированном виде. Если описать весь этот процесс упрощенно, то в режиме 7N1 приемник ждёт спадающего фронта, после чего читает вход 8 раз через равные промежутки времени. Но именно так и работает программное декодирование ИК протокола, описанное выше!
Распознавание ИК команд с помощью UART Давайте посмотрим что будет, если “скормить” сигнал с ИК приёмника в UART. Мой пульт использует протокол с временнЫми промежутками как в протоколе NEC[2], хотя сам формат команды отличается. Настроим UART в режим 7N1 ( 7 бит данных, без битов чётности, 1 стоповый бит).
Baud rate установим в 1.000.000 / 560мкс = 1786 бод. Импульс Mark длиной 9мс (“0” на выходе датчика TSOP ) будет принят приёмником как 0000000b с ошибочным стоповым битом: После этого приёмник будет ждать следующего спадающего фронта (пропустит до конца Mark и весь Space ). С началом ИК посылки приёмник синхронизируется на середину бита (560мкс / 2 = 280 мкс ) и прочитает 7 бит данных + стоповый бит: После приёма 7+1 бит, UART будет ждать следующего спадающего фронта, причём если последний бит был “0”, то линия должна сначала вернуться в “1”.
В этот момент у нас происходит некий “пробел” в приёме, что делает невозможным точное декодирование ИК протоколов, в которых биты кодируются длиной импульсов. Но даже в этом случае уникальный пакет будет формировать уникальные данные в приёмнике UART.
Поскольку задачей является не декодирование содержания команды, а распознавание посылки, такая ситуация нас полностью устраивает. Реализация Пример написан на Codevision AVR 2.05 для ATMega8A, кварцевый резонатор 8МГц. Основной цикл программы опрашивает состояние UART каждые 4мс и записывает полученные данные в циклический буфер длиной 12 байт.
Длина буфера выбирается исходя из длины ИК посылки. У моего пульта посылка имеет длину 54мс. 54000 / 560 = 96 бит или 12 полных байт. Выбираем 11 байт и +1 для стартового нулевого (разбирать всю посылку не обязательно, но очень важно, чтобы посылка привела к зацикливанию буфера).
Для пультов, у которых длина посылки отличается в зависимости от кнопки, алгоритм будет чуть сложнее ( здесь обсуждаться не будет). После приёма очередного байта проверяется, является ли следующий байт в циклическом буфере нулевым. Нулевой байт означает, что мы получили уже 11 байт посылки, и пора реагировать на команду. Пример выводит на терминал( 9600N1 ) CRC32 полученной команды, байты команды и символьное представление посылки:
После получения кодов можно уменьшить ложные срабатывания, раскомментировав секцию:
( readCMDBuffer( s_cmdBufferIndex ) == 0 ) ( readCMDBuffer( s_cmdBufferIndex + 1 ) == 0x95 ) ( readCMDBuffer( s_cmdBufferIndex + 2 ) == 0x95 ) ( readCMDBuffer( s_cmdBufferIndex + 3 ) == 0xB7 ) ( readCMDBuffer( s_cmdBufferIndex + 4 ) == 0xB7 ) ( readCMDBuffer( s_cmdBufferIndex + 5 ) == 0xB7 )
(выше вставить заголовок кодов своего пульта) Под “ложными срабатываниями” здесь подразумевается определение помех как команды с каким-то кодом, а не ложное срабатывание правильной кнопки. Улучшения 1. Если использовать UART в режиме 9 бит данных, 1 паритет и 1 стоп, то период опроса можно ещё увеличить.
2. Приведённый алгоритм не проверяет время, прошедшее между приёмом байтов. Проверяя, можно уменьшить ложные срабатывания. 3. Во время ожидания команды микроконтроллер может находиться в idle mode и просыпаться по прерыванию от UART. 4. В Power down mode UART не работает. Но если соединить RX с INT0, то это даст возможность выводить микроконтроллер в нормальный режим для приёма команды.
Заключение Алгоритм опробован в реальном устройстве и показал отличные результаты. Материалы 1. RC-5
2. Инфракрасное дистанционное управление (PDF)
3. UART
4. AT90USB162 datasheet (PDF)
- IRDecoderUART.rar (17 Кб)
Источник: cxem.net
Как считать сигнал с пульта телевизора
+7 958 756 81 76
+7 831 213 80 88
КАК ЗАКАЗАТЬ
Click to order
Обращаем Ваше внимание, что на сайте представлены розничные цены!
Если Вы хотите сделать оптовый заказ (от 10 шт.) — обратитесь к менеджерам нашей компании
ПУЛЬТЫ ДЛЯ ШЛАГБАУМОВ И ВОРОТ
ПУЛЬТЫ ДЛЯ АВТО
СИСТЕМА КРИПТ КЕЙ
ДЛЯ САМОСТОЯТЕЛЬНОГО ИЗГОТОВЛЕНИЯ ПУЛЬТОВ
ДЛЯ СИСТЕМЫ HOMELINK И CAR2U
ВНЕШНИЕ ПРИЁМНИКИ
АВТОМАТИКА ДЛЯ РОЛЛЕТ
ДОПОЛНИТЕЛЬНОЕ ОБОРУДОВАНИЕ
АКСЕССУАРЫ
САЙТ ТЕХПОДДЕРЖКИ
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
ПРАЙМ СКУД
ВЫБЕРИТЕ НУЖНЫЙ РАЗДЕЛ
ВЫБЕРИТЕ НУЖНЫЙ РАЗДЕЛ
ВЫБЕРИТЕ НУЖНЫЙ РАЗДЕЛ
Руководство по работе с модулем PultDumper
ОГЛАВЛЕНИЕ:
I. Установка программного обеспечения
1. Скачайте программу для модуля PultDumper (только для Windows) ДЛЯ РАБОТЫ НУЖЕН ИНТЕРНЕТ!
2. Разархивируйте скачанный архив с программой в любое удобное место на компьютере
3. Подключите модуль PultDumper к компьютеру в любой удобный разъём USB при помощи USB-кабеля из комплекта с модулем
4. Если модуль PultDumper подключаете к компьютеру впервые, то запустите файл ch341ser (Driver).exe из папки «PultDumper», которую Вы разархивировали
5. Программа может запросить разрешения запуска от имени администратора, нажмите «Да»
6. В открывшемся окне нажмите кнопку «Install» и дождитесь сообщения «Driver install success!», нажмите кнопку «ОК», и закройте окно установки
II. Запуск, настройка и работа с программой
1. Подключите модуль PultDumper к компьютеру в любой удобный разъём USB при помощи USB-кабеля из комплекта с модулем
2. Запустите программу PultDumper.exe из папки «PultDumper», которую Вы разархивировали
- 315 МГц
- 433,92 МГц
- 434,42 МГц
- 868,35 МГц
- Нажимаем кнопку «Считать дамп», должно появиться сообщение «Приём включен, ждём код. «
- Подносим к модулю пульт, сигнал которого хотите считать и нажимаете с удержанием на нём нужную кнопку
- Считанный радиосигнал отобразиться в виде дампа — кодировка в текстовом формате в поле после пункта «Источник». Также данное поле, при успешном считывании сигнала с пульта будет подсвечено зелёным цветом.
- «Не останавливать считывание» — включение данной функции позволяет перевести модуль PultDumper в режим постоянного считывания сигналов с пульта(-ов). Для этого достаточно активировать данный флажок и нажать кнопку «Считать дамп». Чтобы остановить постоянно считывание, снова нажмите кнопку «Считать дамп» и деактивируйте данный флажок.
- «Автоматически записывать в базу» — включение данной функции позволяет записывать в «Базу сигналов» (в правой части программы) считанные сигналы с пультов автоматически.
7. Считанный сигнал также можно сохранить в отдельный файл, нажав кнопку «Сохранить в файл» в левой части программы. А чтобы открыть ранее сохраненный в отдельный файл сигнал нужно нажать кнопку «Открыть файл» чуть ниже кнопки «Считать дамп» в левой части программы.
Также, считанный сигнал можно просто скопировать при помощи кнопки «Скопировать в буфер обмена». А чтобы вставить его в поле дампа. необходимо нажать кнопку «Вставить из буфера» чуть ниже кнопки «Считать дамп» в левой части программы.
Помимо прочего, там же, чуть ниже кнопки «Считать дамп», есть кнопка «Очистить». Нажатие на неё приведёт в очистке поля с дампом.
8. Кнопка «Распознать OnLine» может распознать считанный сигнал пульта. Например, если к Вам обратился клиент, с неизвестным Вам пультом, то считав его сигнал с помощью модуля PultDumper и нажав кнопку «Распознать OnLine», можно определить принадлежность пульта какой-то конкретной системе. Информационную составляющую сигнала и его принадлежность конкретной системе можно найти в строках «Результат» и «Система» соответственно.
Рядом с кнопкой «Распознать OnLine» есть флажок «Автоматически распознавать после считывания» — активация данной функции позволяет автоматически распознавать принадлежность сигнала считанного пульта конкретной системе, без нажатия на кнопку «Распознать OnLine».
- Нажатие на кнопку «OnLine справка» откроет в браузере страницу, где будут отображены все пульты аналоги и копировщики производства ПРАЙМ ПУЛЬТ, которыми можно заменить исходный пульт или на которые можно его скопировать. Это очень удобно, если Вы не знаете чем заменить или на что копировать пульт, сигнал которого был считан на модуле PultDumper.
- Кнопка «Ресинтез» — данная кнопка может и не появиться после нажатия кнопки «Распознать OnLine», т.к. она появляется, если сигнал, с пульта, с которого производилось считывание определился как недостаточно чистый или был считан с помехами. Нажатие на данную кнопку откроет окно ресинтеза сигнала, где нужно будет нажать кнопку «Синтезировать» — сигнал автоматически почистится от помех или сгенерирует полноценный чистый сигнал исходного пульта. После ресинтеза, ещё раз нажмите кнопку «Распознать OnLine», если сигнал чистый, то кнопка «Ресинтез» будет отсутствовать.
- Переводите пульт-копировщик в режим копирования по инструкции к нему
- Прикладываете его корпусом вплотную к модулю
- Нажимаете кнопку «Воспроизвести дамп»
- Смотрите на индикацию пульта-копировщика. Успешная запись на пультах-копировщиках ПРАЙМ ПУЛЬТ сопровождается длинной вспышкой на 1 секунду, если иное не указано в инструкции к самому пульту.
- «Очистить всё» — полностью очищает базу ото всех сохраненных дампов
- «Удалить строку» — удаляет из базы выделенную строку
- «Сохранить в файл» — сохраняет базу в указанном месте на компьютере
- «Открыть файл» — если у Вас сохранено несколько различных баз сигналов, то Вы можете открыть ранее сохраненную базу нажав на эту кнопку
10. Считанный сигнал или сигнал из «Базы сигналов» можно в любой момент воспроизвести при помощи модуля PultDumper, даже не имея на руках исходный пульт. Но прежде чем, воспроизводить сигнал, нужно настроить его воспроизведение в программе. Рядом с кнопкой «Воспроизвести дамп» есть выпадающий список с выбором радиочастоты, точно такой же, как рядом с кнопкой «Считать дамп». В этом списке необходимо выбрать ту частоту, на которой происходило считывание сигнала.
Затем, есть ещё один выпадающий список, где по умолчанию выбрано значение «2 раза» — это количество посылок от модуля к пульту-копировщику, на который Вы планируете выполнить запись считанного сигнала с помощью модуля PultDumper. Рекомендуется, для наибольшей эффективности при воспроизведении сигнала, в этом списке всегда ставить максимальное значение — «10 раз».
3. В открывшейся программе, в поле «Связь с модулем» из выпадающего списка напротив «Порт», выберите USB-порт, в который у Вас подключен модуль PultProg. Если порт выбран правильно, то появится сообщение: «Найден модуль PultDumper v1». Если Вы не знаете какой конкретно порт используется в Вашем компьютере, то выбирайте поочерёдно все доступные порты, пока не увидите сообщение «Найден модуль PultDumper v1»
Важно: выполняйте действия в порядке, описанном выше, т.к. если Вы сначала запустите программу, а затем подключите модуль, то в списке портов, порта с подключенным модулем не будет.
Источник: prime-pult.ru