Декодирование RC-5 Protocol Philips

Views: 1983


Переработано с сайта с обновлением http://svetomuzyka.narod.ru/project/RC5_remote_control.html

RC-5 Protocol Philips – протокол дистанционного управления. Многообразие недорогих пультов дистанционного управления с кодировкой RC-5, выпускаемых разнообразными производителями, делает его привлекательным для управления бытовыми приборами.

Описание алгоритма.

Код RC-5 использует манчестерское кодирование. В середине бита всегда присутствует перепад изменения уровня сигнала, который используется для начала синхронизации, при определения длительности. Этот принцип кодирования удобен для синхронизации декодирующего устройства. В этом случае можно применять тактирование без кварцевой стабилизации частоты, что очень удобно для простых устройств.

Передача бита в RC-5 имеет следующие характеристики:

rc5_01Передача “0” представляет собой смену в момент синхронизации с высокого уровня на низкий. Для декодирования можно анализировать уровень после прихода синхроимпульса.

rc5_02Передача логической “1” представляет собой смену в момент синхронизации с низкого уровня на высокий.

 Для декодирования необходимо определять значение уровней сигнала в момент прихода синхроимпульса. Длительность одного бита соответствует 1778 мкс. Длительность «пакета» передачи составляет 14 бит. И имеет следующий вид:

Рисунок приведен после сигнала фотоприемника для упрощения понимания процесса декодирования.

rc5_03

Обратите внимание, что контроллер «увидит» начала передачи, только начиная с середины первого бита, это есть «линия» синхросигнала. В Манчестерском кодировании всегда будет присутствовать изменение уровня сигнала в середине бита. Это свойство используется для синхронизации таймера измерения длительности импульса. Декодирование заключается в том, что запустив таймер во время синхроимпульса нам необходимо каждый раз в момент прерывания по фронту, изменять полярность контроля фронта сигнала на противоположный. При получении очередного прерывания по фронту, сравнить полученную длительность по таймеру со значением приблизительно с уровнем длительности ~1331 мск. Если полученное значение меньше, значит это начало байта, если больше это синхроимпульс, и в этом месте можно по уровню судить о значении передаваемого бита.


Посылка передатчика, пульта управления, имеет следующий вид:

rc5_04Внизу рисунка приведены нумерация битов. Назначение битов следующая:

01,02 – это синхробиты, и всегда имеют “одну и тоже форму”.

03 – бит смены нажатия клавиши, для приемника это служит “сигналом”, что на пульте повторно нажимается клавиша с тем же кодом. Т.е. если приемник получает один и тот же код, но при этом значение бита три меняется, это значит оператор нажимает одну и туже клавишу.

04,05,06 – три бита – код устройства (например, телевизор, радио.. или другое устройство).

07-14 – код нажатой клавиши или сочетание клавиш, значение от 0 до 255.

Сигнал на выходе приемника TSOP4836.

Catcatcat_TSOP4836_14

Настройка Saleae Logic для декодирования RC-5 сода.

ik_du08


Описание работы программы декодирования.

Для декодирования RC-5 необходимо использовать возможность PIC-контроллера формирования прерываний по изменению уровня сигнала на входе и один таймер, чтобы измерять длительность сигнала. Сразу хочу предупредить, что данный вид декодирования не является помехозащищенным, что это значит? Если в помещении будут присутствовать другие источники ИК-излучения, то это может влиять на качество приема. Вариант помехозащищенного декодирования смотрите на сайте ОпенВорон в статье http://open.e-voron.dp.ua/indikator-koda-rc-5-protocol-philips/.

Подключение библиотеки.

Для подключения библиотеки необходимо выполнить следующее:

1. Определить вход подключения фотоприемника (вход INT), выберем RB0, это стандарный вход практически на всех PIC-контроллерах который имеет возможность использовать внешние прерывания по изменению сигнала на входе и можно определять произошло прерывание по фронту или по спаду.

#define IKDU RB0        //порт, к которому подключен фотоприёмник.

2. Настроим RB0 на вход.

3. Задать тактовую частоту в герцах (например, 20 мГц) которую использует контроллер.

#define _XTAL_FREQ 20000000       // Наша тактовая 20 Mh

4. Настроить вход INT, прерывания по переходу с высокого уровня на низкий (это для начала)

INTEDG=0;        // Interrupt on falling edge of RB0/INT pin

5. Включить прерывания

TMR1IE=1;       // разрешить прерывания от TMR1

INTCON=0b11010000;       // разрешить прерывания от входа RB0/INT external interrupt

6. Настроить работу таймера. Порог длительности контроля для RC-5 кода – 889+(889/2)=1331 мкс.

Используем таймер TMR1, установим предделитель на 1:1, для контроля длительности мы используем значение счетчика TMR1H.

7. В прерывания необходимо вставить функцию IR_RC5 ();

void interrupt my_isr(void) //
 {
     //---------------------------------------------------------
     IR_RC5 (); // декодер RC5 кода.
     //---------------------------------------------------------
 }

8. Значение команды получаем в переменной command.

Примечание: Окончание передачи мы контролируем по переполнению таймера.


Функции библиотеки.

IR_RC5 (); // декодер RC5 кода, необходимо поместить в функцию прерывания.


Демонстрационная  программа показывает пример декодирования при тактовой 64 мГц, для переключения для работы на любой другой параметр тактовой частоты необходимо в файлах max7221_8.h и IR_RC5.h изменить параметр #define _XTAL_FREQ 64000000, где 64000000 тактовая частота в герцах с которой работает наш контроллер. А в файле main.c в функции void init(void) скорректировать в регистрах OSCTUNE (работа умножителя, выбор генератора), OSCCON (задание тактовой частоты) настройки тактового генератора.

Например, для 4 мГц, настройки следующие:

OSCTUNE = 0b00000000;
 //         ||+++++----TUN<5:0>: Frequency Tuning bits
 //         |+---------PLLEN: Frequency Multiplier 4xPLL 1 = PLL enabled
 //         +----------INTSRC: Internal Oscillator Low-Frequency
 OSCCON = 0b01010000;
 //         ||||||++---SCS<1:0>: тактовая частота берется с основного модуля
 //         |||||+-----HFIOFS: бит - Частота стабильна
 //         ||||+------OSTS: бит статуса (какой выбран генератор)
 //         |+++-------IRCF<2:0>: выбор частоты тактового генератора(16 MHz)
 //         +----------IDLEN: функция генератора в режиме сна

настройка _XTAL_FREQ должна выглядеть так

#define _XTAL_FREQ 4000000 // Наша тактовая 4 Mh

Для повышения помехозащищенности в программе вставлено условие на проверку трех битов 4/5/6 на значение <0>. В стандартных пультах это значение всегда равно <0>. Если при декодировании встречается единица, то считается, что это ошибочная передача. Если предполагается использовать пульты где биты 4/5/6 предназначены для выбора типа устройства, то необходимо внести изменения в этом месте программы.

if(!(bupri&0b0000011100000000)) //контроль на помехи
//если 4,5,6 биты установлены в единицу (хотя бы один), то это помеха
{
    IKDATA=1;      // установить флаг прием окончен
    command=bupri; // копировать данные в буфер
}

Демонстрационный проект выполнен на плате ILLISSI-4B-09-primum и ILLISSI-4С-secundo.


Добавлена версия библиотеки 2.4 в ней изменение по логике работы, для управления можно использовать любые выводы способные формировать прерывания по изменению сигналов на входе. Для неё подходят контроллеры нового поколения где есть в наличии регистры IOCAF, IOCAN, IOCAP. Это типа, в 16 серии PIC16F1xxx. т.е для 12/16 все которые имеют расширение 4 цифры после символа F.


Демонстрационный проект и библиотеки.

версия 2.0 от 16/08/12

Значок

Декодирование RC-5 Protocol Philips v2.0 21.97 KB 636 downloads

Проект + прошивка. Демопроект использует при программировании загрузчик AN1310...
версия 2.1 от 04/09/12 MPLAB® XC8 Compiler for PIC18
Значок

Декодирование RC-5 Protocol Philips v2.1 19.67 KB 655 downloads

Демонстрация работы декодирования RC-5. Использования...
версия 2.2 от 12/08/13 MPLAB® X IDE v1.85, MPLAB® XC8 Compiler for PIC16
Значок

Декодирование RC-5 Protocol Philips - V2.2 for MPLAB XC8 Compiler 2.71 KB 485 downloads

Декодирование RC-5 Protocol Philips - V2.2 for MPLAB XC8 Compiler ...
версия 2.4 от 26/11/13 MPLAB® X IDE v1.95,MPLAB® XC8 Compiler v1.21
Значок

Декодирование RC-5 Protocol Philips версия 2.4 3.44 KB 392 downloads

Декодирование RC-5 Protocol Philips версия 2.4. для управления...



Это может быть интересно


  • Контроллер управления светодиодным освещением с дистанционным управлениемКонтроллер управления светодиодным освещением с дистанционным управлением
    Views: 2017 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
  • LED модуль P10 (1R) V706ALED модуль P10 (1R) V706A
    Views: 7709 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа  R-красные, но не верьте паяют светики и зеленые и синие, в общем …
  • Altium Designer – подготовка документации для производства и сборки печатных платAltium Designer – подготовка документации для производства и сборки печатных плат
    Views: 3678 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
  • Проект с использованием MCC часть 01Проект с использованием MCC часть 01
    Views: 2544 Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид …
  • PIC32MZ – прерывания (заметки)PIC32MZ – прерывания (заметки)
    Views: 455 Виды формирования запоминая контекста при входе в прерывания. Компилятор представляет три варианта AUTO – когда запоминания места возврата из подпрограммы возложено на программу, т.е все создается программно. Этот …
  • MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМMCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ
    Views: 1129 Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые …
  • Проект с использованием MCC часть 13Проект с использованием MCC часть 13
    Views: 1073 Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать. Для начала откроем наш заголовочный файл в нем очень много букв: По …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Views: 1173 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • Простой цифровой вольтметр ch-c3200Простой цифровой вольтметр ch-c3200
    Views: 2518 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …
  • Customs codes for exportCustoms codes for export
    Views: 157   Митні коди (HS Code) для надсилання посилок за кордон. Для відправки товару за кордон на сьогодні необхідно зазначати митні коди. Часто визначення коду займає багато часу. Для …



Поделись этим!