Views: 1983
Переработано с сайта с обновлением http://svetomuzyka.narod.ru/project/RC5_remote_control.html
RC-5 Protocol Philips – протокол дистанционного управления. Многообразие недорогих пультов дистанционного управления с кодировкой RC-5, выпускаемых разнообразными производителями, делает его привлекательным для управления бытовыми приборами.
Описание алгоритма.
Код RC-5 использует манчестерское кодирование. В середине бита всегда присутствует перепад изменения уровня сигнала, который используется для начала синхронизации, при определения длительности. Этот принцип кодирования удобен для синхронизации декодирующего устройства. В этом случае можно применять тактирование без кварцевой стабилизации частоты, что очень удобно для простых устройств.
Передача бита в RC-5 имеет следующие характеристики:
Передача “0” представляет собой смену в момент синхронизации с высокого уровня на низкий. Для декодирования можно анализировать уровень после прихода синхроимпульса.
Передача логической “1” представляет собой смену в момент синхронизации с низкого уровня на высокий.
Для декодирования необходимо определять значение уровней сигнала в момент прихода синхроимпульса. Длительность одного бита соответствует 1778 мкс. Длительность «пакета» передачи составляет 14 бит. И имеет следующий вид:
Рисунок приведен после сигнала фотоприемника для упрощения понимания процесса декодирования.
Обратите внимание, что контроллер «увидит» начала передачи, только начиная с середины первого бита, это есть «линия» синхросигнала. В Манчестерском кодировании всегда будет присутствовать изменение уровня сигнала в середине бита. Это свойство используется для синхронизации таймера измерения длительности импульса. Декодирование заключается в том, что запустив таймер во время синхроимпульса нам необходимо каждый раз в момент прерывания по фронту, изменять полярность контроля фронта сигнала на противоположный. При получении очередного прерывания по фронту, сравнить полученную длительность по таймеру со значением приблизительно с уровнем длительности ~1331 мск. Если полученное значение меньше, значит это начало байта, если больше это синхроимпульс, и в этом месте можно по уровню судить о значении передаваемого бита.
Посылка передатчика, пульта управления, имеет следующий вид:
Внизу рисунка приведены нумерация битов. Назначение битов следующая:
01,02 – это синхробиты, и всегда имеют “одну и тоже форму”.
03 – бит смены нажатия клавиши, для приемника это служит “сигналом”, что на пульте повторно нажимается клавиша с тем же кодом. Т.е. если приемник получает один и тот же код, но при этом значение бита три меняется, это значит оператор нажимает одну и туже клавишу.
04,05,06 – три бита – код устройства (например, телевизор, радио.. или другое устройство).
07-14 – код нажатой клавиши или сочетание клавиш, значение от 0 до 255.
Сигнал на выходе приемника TSOP4836.
Настройка Saleae Logic для декодирования RC-5 сода.
Описание работы программы декодирования.
Для декодирования 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...Декодирование RC-5 Protocol Philips v2.1 19.67 KB 655 downloads
Демонстрация работы декодирования RC-5. Использования...Декодирование 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 ...Декодирование RC-5 Protocol Philips версия 2.4 3.44 KB 392 downloads
Декодирование RC-5 Protocol Philips версия 2.4. для управления...Это может быть интересно
- Development board based on MCU PIC18F47Q84Views: 1212 PIC18F47Q84 Microcontroller Family with CAN Flexible Data Status: In Production.
- Бегущие огни на WS2812BViews: 4869 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …
- Счетчики посетителейViews: 1270 Вас сосчитали!? или счетчики посетителей. Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
- Цифровой тахометр для автомобиля CH-С3300Views: 1903 Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика …
- Customs codes for exportViews: 157 Митні коди (HS Code) для надсилання посилок за кордон. Для відправки товару за кордон на сьогодні необхідно зазначати митні коди. Часто визначення коду займає багато часу. Для …
- ESP8266 процедура получение данных даты и времени от серверов точного времени.Views: 5884 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени, если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …
- Стабилизатор тока для светодиодов SN3350Views: 2601 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V драйвер светодиодов с внутренним ключом SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
- Часы-кухонный таймерViews: 4064 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …
- MCC – K42 – настройка модуля DMAViews: 772 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …
- My libraries for Altium DesignerViews: 3962 Attention, this version of the database is outdated today. See updates in articles https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure and https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure-v23-2/ My libraries for Altium designer (Updated V – 29/05/2022) (c) 2021 …