071-Преобразователь IR-сигналов от пультов в UART.

Автор: | 09.05.2011

Пришло время обкатать новую универсальную плату для IR устройств.  Для начала соберем что-то несложное. Решил сделать преобразователь IR сигналов от бытовых пультов в UART команды — давно обещал. Это устройство показательно для блога – это именно готовое решение для Вашего проекта, поэтому постараюсь сделать его максимально полезным.

Как должно работать это устройство?
Да очень просто! Устройство принимает команду от бытового IR пульта и после обработки выдает ее код через UART. Вроде не на чем заморочиться, но давайте сделаем устройство более гибким, чем просто преобразователь RC5 в UART или NEC в UART. Не вижу смысла в создании устройства, под которое потом нужно еще и пульт подбирать! А почему не сделать устройство, работающее с любыми пультами, которые равномерно засеивают наши квартиры? Именно такое устройство мы и сделаем!

Идея заключается не в распознании определенных IR протоколов, а в распознании любой IR посылки. Как это не странно звучит, но алгоритм универсального приемника намного проще, чем алгоритм приема одного определенного IR-протокола.

Программа универсального IR-приемника работает следующим образом:
— программа делает замеры периодов импульсов пришедших от TSOP;
— в начале посылки создается «шаблон» по одному из периодов;
— далее все периоды сравниваются с этим шаблоном и получают или 0 или 1 в результате сравнения.

Достоинства очевидны:
— устройство видит все пульты;
— получаемый код нажатой клавиши будет одного формата для разных пультов (легче с ним потом будет работать);
— код алгоритма не требователен к ресурсам — нужен только один восьми битный таймер и ножка с прерыванием.

Не очевидные недостатки:
— так как нет привязки к какому либо IR-протоколу, то невозможно проверить сообщение на ошибки – свой код будут выдавать даже явно сбойные посылки (об этом придется позаботиться Вам в программах работающими с этим устройством);
— устройство не знает когда заканчивается посылка – оно судит об окончании по длительной паузе, а значит будет некоторая задержка передачи кода команды по UART (порядка 20мС);

Сборка преобразователя.
Наш преобразователь будет работать на универсальной плате для IR устройств. Вот ее схема:

Схема IR driver

Сборку этой платы я описывал ранее – не буду повторяться.
Если нужно собрать — перечитываем страничку драйвера.

Нужные нам сигналы будут располагаться на следующих выводах:

Пинаут платы IR драйвера

Для создания преобразователя нам необходимо лишь запрограммировать микроконтроллер. После программирования подаем 5В на схему и устройство готово к работе!

Параметры UART:
— скорость 9600;
— размер посылки 8бит;
— 1 стоп бит;
— без бита четности.

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

Для устранения этого недостатка я сделал второй вариант прошивки — она выдает на каждую нажатую клавишу двух байтовый код (слово). Причем, перед каждым кодом посылается символ «*» — это должно помочь при приеме сообщения на принимающей стороне. Общий вид сообщения передаваемого по UART при приеме очередного кода будет следующим: «*хх», где хх-двухбайтовый код нажатой клавиши.

Обе прошивки при подаче питания на устройство выдают по UART строку «OK!» и мерцают светодиодом. При приеме IR сигнала (любого) светодиод мерцает.

Простой вариант прошивки — однобайтовый:
071-T13-IR-to-UART-1B.hex - Преобразователь IR посылок в UART (1 байт)
071-T13-IR-to-UART-FuseBits.png - Фьюз биты преобразователя IR to UART
Как правильно прошить AVR фьюзы

Для однобайтового варианта сделал небольшой апдейт. Изменения коснулись алгоритма получения байта IR-посылки. В данном варианте вычисляется хэш-сумма со всей посылки, а в старом варианте просто берется последние 8 бит IR-посылки. Поэтому если есть у Вас есть какие проблемы со старой прошивкой — попробуйте новую (или наоборот).
071-T13-IR-to-UART-1B-Hash.hex - Преобразователь IR посылок в UART (1 байт хэш-вариант)
071-T13-IR-to-UART-FuseBits.png - Фьюз биты преобразователя IR to UART
Как правильно прошить AVR фьюзы

Расширенный вариант прошивки – двухбайтовый («*хх»):
071-T13-IR-to-UART-3B.hex - Преобразователь IR посылок в UART (2 байта)
071-T13-IR-to-UART-FuseBits.png - Фьюз биты преобразователя IR to UART
Как правильно прошить AVR фьюзы

 

Файлы:
071-source-T13-IR-to-UART-1B.zip - Исходник преобразователя IR to UART 1байт
071-source-T13-IR-to-UART-3B.zip - Исходник преобразователя IR to UART 2байта
071-source-IR-to-UART-1B-Hash.zip - Исходник преобразователя IR to UART хэш-вариант

Ссылки:
069-Универсальная плата-IR Driver на ATtiny13.

 

Вариант программы на CVAVR.
Автор Сергей Петров (svgr) Admin*ggbest.ru (* — сами знаете на что заменить).

Сергей проделал большую работу — реализовал алгоритм преобразователя на СИ (CVAVR).
UniIR_CVAVR - Преобразователь IR посылок в UART (2 байта) CVAVR

От автора:
Прошивка соответствует представленной схеме. Может быть зашита в плату без каких-либо изменений. Единственной «особенностью» в данном случаи будет инверсия светодиода из-за транзистора (он будет всё время гореть, гаснуть только во время приёма IR-посылок. при желании, исправляется в коде). Ножка PB4, аналогично, является выходом программного UART, скорость передачи, аналогично, 9600 бод (может быть изменена в исходнике — см. config.h). Основная работа происходит в файле stx_demo.c. Там обрабатываются прерывания с TSOP, производятся сравнения длительности первой «информационной» посылки с остальными посылками в пакете. Прочитанный код посылается по UART в формате, аналогичном 2-байтовой прошивке: * + 2 байта кода нажатой клавиши. Остальные пины микроконтроллера не используются и могут быть применены на усмотрение пользователей. Прошивка рассчитана на частоту 9,6МГц (внутренний RC-генератор).

(Visited 2 022 times, 7 visits today)

There are 72 comments

Комментарии подгрузятся после небольшой паузы.