leoniv.diod.club

Тестер кода RC-5 с помехоустойчивым декодером

Дистанционное управление (ДУ) уже давно стало необходимым атрибутом для разной электронной техники. Чаще всего используется дистанционное управление на ИК-лучах. Одним из распространенных способов кодирования ИК-посылки является код RC-5, разработанный фирмой «Philips». Применение этого кода значительно упрощает реализацию ДУ, так как широко распространены пульты, работающие в этом стандарте, а также микросхемы передатчиков. Практически любой готовый пульт можно приспособить для своего устройства, сменив номер системы RC-5 и изготовив новую наклейку с необходимыми подписями кнопок. Интегральные приемники ИК ДУ также достаточно распространены. Остается только декодировать код RC-5, что обычно делается программно на микроконтроллере. Ниже описан один из вариантов декодера, который расходует мало ресурсов микроконтроллера и обладает хорошей помехоустойчивостью.

Существует довольно много реализаций декодеров RC-5, одна из них даже приведена в Application Note 410 от фирмы «Atmel». Однако чаще всего используется программный опрос (поллинг) выхода ИК-приемника. Учитывая относительно большую длительность посылки RC-5, это приводит к довольно большой загрузке процессора, что может помешать выполнению других задач реального времени. Предлагаемый декодер не использует программный опрос, а работает по прерываниям. Обработчики прерываний очень короткие, в результате загрузка процессора получается очень небольшой. Кроме того, для повышения помехоустойчивости в декодере реализована многократная проверка состояния выхода ИК-приемника внутри одного передаваемого интервала, истинное значение вычисляется по мажоритарному принципу. Моменты выборок формирует таймер, количество выборок может быть задано любым нечетным и задается на этапе компиляции. На практике вполне достаточно 3-х выборок. При желании можно работать и с 1-й выборкой, задав соответствующее значение константы, это еще более снизит загрузку процессора. Дополнительно производится проверка правильности кода "Манчестер", который использован в стандарте RC-5. Декодер написан на языке Си и работает на микроконтроллерах семейства AVR.

Рис. 1. Структура посылки RC-5 и сигнал на выходе фотоприемника.

Структура посылки RC-5 приведена на рис. 1а. Посылка включает в себя 2 стартовых бита, 1 управляющий бит, 5 битов номера системы и 6 битов кода команды. Стартовые биты предназначены для установки АРУ в микросхеме ИК-приемника. Управляющий бит является признаком нового нажатия кнопки, он меняет своё состояние при каждом новом нажатии. Номер системы может принимать значения 0…31, каждое значение соответствует своему классу аппаратуры. Например, 0 – это телевизор, 5 – это видеомагнитофон и т.д. Многие номера системы не используются никакой стандартной аппаратурой и их можно задействовать для управления своим оборудованием. Код команды может принимать значения 0…63, каждая кнопка пульта дистанционного управления имеет свой код команды. Некоторые коды команд стандартизованы, что делает совместимыми пульты дистанционного управления разных производителей. При использовании кода RC-5 для управления уникальным оборудованием эта стандартизация не имеет значения, нужно лишь задать номер системы, который не используется другой аппаратурой. В пультах, построенных на микросхеме SAA3010, это делается с помощью перемычки (см. ниже).

Позже для увеличения количества команд в стандарт RC-5 был введен дополнительный бит кода команды (бит F), который в посылке занимает место второго стартового бита. Это удваивает число возможных команд.

Для передачи данных в коде RC-5 используется двухфазное кодирование (код Манчестер). Длительность одного такта составляет 1.778 мс. Пока кнопка остается нажатой, посылка передается с интервалом 64 такта, т.е. 113.778 мс. При передаче используется модуляция несущей частотой 36 кГц. Демодуляцию выполняет микросхема ИК-приемника, на выход поступают двоичные данные без модуляции. Нужно иметь в виду, что микросхемы ИК-приемников имеют в своем составе полосовой фильтр, настроенный на частоту несущей. Поэтому для приема посылки RC-5 подойдут лишь те микросхемы, которые имеют центральную частоту фильтра 36 кГц. Как правило, микросхемы ИК-приемников (SFH506, TFMS5360, TSOP1836 и другие) имеют инверсный выход данных. Пример сигнала на выходе микросхемы ИК-приемника с учетом инверсии приведен на рис. 1б.

Для точного измерения интервалов времени на микроконтроллерах семейства AVR обычно используется схема захвата 16-разрядного таймера. В данном случае в этом нет необходимости, так как передача данных в посылке RC-5 идет на небольшой скорости, к тому же, при декодировании допускается отклонение длительности интервалов до 25%. Поэтому достаточно использовать внешнее прерывание и 8-разрядный таймер, а «дефицитный» 16-разрядный таймер со схемой захвата оставить свободным для других применений.

Декодер работает сделующим образом: сигнал с выхода ИК-приемника поступает на вход внешнего прерывания микроконтроллера. После того, как обнаружен стартовый бит (переход из единицы в ноль на входе прерывания), в обработчике внешнего прерывания разрешается прерывание таймера 0 и загружается интервал до первой выборки T_SAMPLE. В прерывании таймера 0 делаются выборки для каждой половинки бита. Подсчет выборок ведется в переменной SampCnt. Количество выборок задается константой SAMPLE_COUNT. Логический уровень для каждой половинки бита вычисляется по мажоритарному принципу. Для этого вычисляется сумма выборок в переменной SampVal. Если на входе обнаруживается ВЫСОКИЙ уровень, то к этой переменной добавляется единица, если НИЗКИЙ – вычитается. Значение суммы не может быть равно нулю, так как общее количество выборок всегда задается нечетным. По первой половине текущего бита принимается решение о значении принятого бита. Для проверки корректности кода Манчестер этот уровень сравнивается со значением второй половины предыдущего бита, которое сохраняется в переменной PreVal. Если значения совпадают, значит, была ошибка, и прием начинается с начала. То же самое происходит, если очередной переход на выходе ИК-приемника не обнаружен через время T_SAMPLE * 2 после последней выборки (ошибка таймаута). Принятые биты вдвигаются в переменную Rc5Code. Подсчет принятых битов осуществляется в переменной BitCounter. Когда принято RC5_LENGTH битов, прием считается завершенным, номер системы копируется в переменную SysVar, а код команды – в переменную ComVar. В переменную ComVar добавляется и дополнительный бит кода команды (бит F).

Функция RC5_Init() осуществляет инициализацию внутренних переменных декодера и настройку оборудования. Эту функцию нужно вызвать один раз перед использованием декодера.

Передатчик RC-5 тоже можно построить на микроконтроллере, но в большинстве случаев в этом нет необходимости. Выпускаются специализированные микросхемы передатчиков RC-5, самой распространенной из них является SAA3010. Эта микросхема специально предназначена для построения пультов дистанционного управления. Она допускает напряжение питания 2…7 В, потребляемый ток в ждущем режиме не превышает 10 мкА. Микросхема способна сканировать матрицу из 64 кнопок и может передавать номер любой из 32 систем кода RC-5. Обычно SAA3010 используется в режиме одиночной системы, для этого на вывод SSM подается ВЫСОКИЙ логический уровень. В этом режиме все команды передаются с фиксированным номером системы. Номер системы задается перемычкой между выводами Zi и DRj и вычисляется по следующей формуле: SYS = 8i + j. Код команды, который будет передаваться при нажатии кнопки, которая замыкает линию Xi с линией DRj, вычисляется по следующей формуле: COM = 8i + j. Пример схемы пульта ИК ДУ на основе микросхемы SAA3010 приведен на рис. 2.

Рис. 2. Схема пульта ДУ на основе микросхемы SAA3010.

На приведенной схеме задан номер системы 0 (используется телевизором), для чего установлена перемычка между выводами Z0 и DR0. Чтобы изменить номер системы, нужно убрать эту перемычку и установить новую между другими выводами Z и DR.

Вывод OSC представляет собой вход/выход 1-выводного генератора и предназначен для подключения керамического резонатора на частоту 432 кГц. Последовательно с резонатором рекомендуется включать резистор сопротивлением 6.8 кОм.

Тестовые входы TP1 и TP2 в нормальном режиме работы должны быть соединены с землей. При высоком логическом уровне на TP1 повышается частота сканирования, а при высоком уровне на TP2 – частота работы внутреннего сдвигового регистра.

В состоянии покоя выходы DATA и MDATA находятся в Z-состоянии. Генерируемая передатчиком на выходе MDATA последовательность импульсов имеет заполнение частотой 36 кГц (1/12 частоты тактового генератора) со скважностью 25%. На выходе DATA генерируется такая же последовательность, но без заполнения. Этот выход используется в том случае, когда микросхема передатчика выполняет функции контроллера встроенной клавиатуры. Сигнал на выходе DATA полностью идентичен сигналу на выходе микросхемы приемника дистанционного управления (но в отличие от приемника он не имеет инверсии). Оба этих сигнала могут обрабатываться одним и тем же декодером. Применение SAA3010 в качестве контроллера встроенной клавиатуры в некоторых случаях очень удобно, так как для опроса матрицы до 64 кнопок у микроконтроллера расходуется только один вход прерывания. При этом микросхема передатчика допускает питание напряжением как 3.3 В, так и 5 В.

В качестве примера использования описанного декодера, ниже приводится описание автономного тестера пультов ДУ на основе кода RC-5. Тестер имеет светодиодный индикатор, на который выводится номер системы (первый и второй разряды), код команды (второй и третий разряды) и значение управляющего бита (точка между вторым и третьим разрядами).

Рис. 3. Схема тестера RC-5.

Принципиальная схема тестера приведена на рис. 3. Тестер построен на основе микроконтроллера ATmega8, который тактируется от встроенного RC-генератора частотой 8 МГц. ИК-приемник U3 типа TSOP1836 подключен к входу прерывания INT0. Питание приемника дополнительно фильтруется цепочкой R1C4. Через токоограничивающие резисторы R4-R11 к микроконтроллеру подключен светодиодный индикатор HG1, динамическая индикация реализована программно. Для индикации наличия ИК-посылки служит светодиод VD1. Он загорается даже в том случае, если посылка корректно не декодирована (например, формат посылки не совпадает с RC-5). Разъем XP1 служит для внутрисхемного программирования микроконтроллера. Питается тестер от двух литиевых элементов BT1 и BT2 типа CR2032 суммарным напряжением 6 В. С помощью LDO-стабилизатора U1 типа LP2951 получается напряжение питания 5 В. Нужно отметить, что возможно непосредственное питание устройства от одного элемента напряжением 3 В, но для этого понадобится установить низковольтную микросхему ИК-приемника, например, TSOP1836SS3V.

Рис. 4. Расположение элементов на печатной плате тестера RC-5.

На рис. 4 показано расположение элементов на печатной плате тестера. Односторонняя плата не имеет ни одного отверстия. При разводке использованы перемычки J1-J4 в виде SMD-резисторов размера 0805 нулевого номинала. Выводы фотоприемника, индикатора, разъема программирования и выключателя питания загнуты под прямым углом, чтобы обеспечить монтаж этих элементов на поверхности. Держатель элементов питания изготовлен из латунной пластинки шириной 5 мм. Внешний вид собранного тестера показан рис. 5.

Рис. 5. Внешний вид тестера RC-5.

Downloads:
Tester_sch.pdf (68 kB) - принципиальная схема тестера.
Tester_pcb.pdf (49 kB) - рисунок печатной платы тестера.
Tester_top.pdf (123 kB) - расположение элементов на плате тестера.
Tester_source.zip (23 kB) - прошивка и исходник тестера (EWAVR).
RC-5_tx.zip (21 kB) - пример передатчика RC-5 на AVR (AVR Studio).
Ридико Леонид Иванович www.leoniv.diod.club e-mail: wubblick@yahoo.com