Декодування сигналів протоколу RC5 - Мікроконтролери та Технології
Команда згідно з протоколом RC5 показана на рис. 1. Кодова послідовність (червоний колір) складається з 14 тактових інтервалів тривалістю по 1,78 мс (64 періоди частоти 36 кГц), у кожному з яких передають один розряд двійкового коду. Лог. 1 відповідає позитивний перепад рівня в середині тактового інтервалу, балка. 0 - негативний.

Малюнок 1
У шести розрядах С5-С0 записаний власне код команди, у разі 0x35 (00110101), "Відтворення".
Коди команд для деяких функцій наведені нижче: Про - 9 - Цифрові величини 0 - 9; 12 - Черговий режим; 15 - Дисплей; 13 - Пауза; 16 - Гучність" +"; 17 - Гучність 30 - Пошук вперед; 31 - Пошукназад; 45 - Викид; 48 - Пауза; 50 - Перемотування назад; 51 - Перемотування вперед; 53 - Відтворення; 54 - Стоп; 55 - Запис ;
Протокол RC5 дозволяє за допомогою одного пульта подавати по 64 команди незалежно на 32 різних пристрої. Якщо цього недостатньо, використовують "розширений" протокол RC5, згідно з яким ще один розряд команди (С6) займає місце другого стартового (St2). Таким чином, кількість можливих команд зростає до 128.
При передачі команд ІЧ каналу зв'язку сформованої кодової послідовністю RC5 модулюють несучу частоту 36 кГц, в результаті чого ПДУ випромінює пачки ІЧ імпульсів цієї частоти (чорний колір). Для їх прийому зазвичай застосовують спеціалізовані фотоприймачі, імпульсна послідовність на виході яких (зелений колір) інверсна вихідної.
Закріпимо теоретичні знання практикою. Зберемо декодер сигналу RC5. Прилад прийматиме команди з пульта дистанційного керування та декодуватиме їх, виводячи їх коди в десятковій системі на семисегментний.індикатор. Як завжди використовуємо мікроконтролер Atmega8, який тактуватиметься від внутрішнього генератора частотою 8МГц. Індикатор дворозрядний із загальним анодом. Схема приладу показано малюнку 2.

Малюнок 2
Сигнал, прийнятий і демодульований ІЧ приймачем IC2, надходить на висновок 4 (PD2) мікроконтролера IC1, сконфігурований як вхід з внутрішнім резистором, що "підтягує". Не завадить і зовнішній резистор, що підтягує. Блокувальний конденсатор С1 повинен бути розташований якомога ближче до висновків живлення ІЧ приймача.
Щоб декодувати посилку необхідно вимірювати ширину імпульсів. Так як мікроконтролер, відповідальний за декодування зазвичай виконує ще безліч інших функцій то після приходу будь-яких імпульсів з ІЧ приймача він повинен перериватися на обробку посилки. Тому доцільніше підключити вихід фотоприймача до входу апаратного переривання контролера і налаштувати переривання так, щоб воно відбувалося при будь-якій зміні рівня на вході. І тут алгоритм декодування виходить дуже простий.
Перше, що потрібно зробити в процедурі обробки переривання - запам'ятати показання таймера, обнулити таймер і запустити його знову. Так, як переривання у нас перше, просто обнуляємо і запускаємо таймер. Зчитуємо рівень на вході та запам'ятовуємо його в нульовому біті змінної. Зрушуємо змінну вліво. Встановлюємо ознаку того, що відбувся запис та збільшуємо на 1 лічильник прийнятих біт. Після приходу другого переривання так само запам'ятовуємо показання таймера, перезапускаємо його і дивимося, скільки часу пройшло. Якщо інтервал вийшов довжиною в період, то імпульс був "довгий" . А це означає, що в будь-якому випадку ми перервалися в середині періоду і треба робити записрівня на вході в змінну, знову зрушувати її вліво і знову збільшувати лічильник.
Якщо інтервал вийшов довжиною півперіоду, то імпульс був"коротким". А це означає, що ми могли перерватися як у середині, так і на межі періоду. Тоді перевіряємо ознаку запису.
Якщо за минулим перериванням запис відбувався, то ми на межі періоду і запис у змінну не проводимо. Скидаємо ознаку запису та чекаємо наступного переривання.
Якщо ознака запису встановлено, ми перервалися у середині періоду. Виробляємо запис, зрушуємо змінну, встановлюємо ознаку запису та збільшуємо лічильник біт на 1.
Таким чином приймаємо всі 14 біт, зупиняємо таймер, скидаємо лічильник біт та ознаку запису. Переходимо до процедури опрацювання прийнятого слова.
Також необхідно передбачити переривання від вимірювального таймера, якщо часовий інтервал перевищить півтора періоду. За цим перериванням слід скинути всі змінні і лічильники, бо сталася помилка при прийомі команди. начення часу для "довгого" та "короткого" інтервалів слід взяти із запасом плюс-мінус 20%, т.к. не у всіх пультах дистанційного керування генератор стабілізований кварцовим резонатором. Іноді він виконується на RC ланцюжку і частота його стабільна. Вихідний код повністю представлений нижче:
Демонстрація роботи декодера RC5