Декодиране на сигнали по протокол RC5 - Микроконтролери и технологии

Командата по протокола RC5 е показана на фиг. 1. Кодовата последователност (червена) се състои от 14 тактови интервала с продължителност 1,78 ms (64 периода при честота 36 kHz), всеки от които предава един бит от двоичен код. Дневник. 1 съответства на положителен спад на нивото в средата на тактовия интервал, log. 0 е отрицателно.

протокол

Снимка 1

Шестте цифри C5-C0 съдържат самия код на командата, в този случай 0x35 (00110101), "Възпроизвеждане".

Кодовете на командите за някои функции са дадени по-долу: 0 - 9 - Числени стойности 0 - 9; 12 - Режим на готовност; 15 - Дисплей; 13 - Пауза; 16 - Сила на звука"+"; 17 - Сила на звука 30 - Търсене напред; 31 - Търсене назад; 45 - Изваждане; 48 - Пауза; 50 - Превъртане назад; 51 - Бързо напред; 53 - Възпроизвеждане; 54 - Стоп; 55 - Запис;

Протоколът RC5 позволява с едно дистанционно управление да подадете 64 команди независимо до 32 различни устройства.Ако това не е достатъчно, използвайте "разширения" протокол RC5, според който още един команден бит (C6) заема мястото на втория старт (St2). Така броят на възможните команди се увеличава до 128.

При предаване на команди по IR комуникационния канал, носещата честота от 36 kHz се модулира от генерираната кодова последователност RC5, в резултат на което дистанционното управление излъчва пакети от IR импулси с тази честота (черен цвят). За приемането им обикновено се използват специализирани фотодетектори, импулсната последователност на изхода на които (зелен цвят) е обратна на оригиналната.

Нека консолидираме теоретичните знания с практиката. Нека сглобим декодера на сигнала RC5. Устройството ще получава команди от дистанционното управление и ще ги декодира, показвайки техните кодове в десетична система на седемсегментениндикатор. Както винаги, ние използваме микроконтролера Atmega8, който ще бъде тактован от вътрешен 8 MHz осцилатор. Индикаторът е двуцифрен с общ анод. Схемата на устройството е показана на фигура 2.

протокол

Снимка 2

Сигналът, получен и демодулиран от IR приемника IC2, се подава към пин 4 (PD2) на микроконтролера IC1, конфигуриран като вход с вътрешен издърпващ резистор. Външен издърпващ резистор също ще помогне. Блокиращият кондензатор C1 трябва да бъде разположен възможно най-близо до клемите за захранване на инфрачервения приемник.

За да се декодира съобщението, е необходимо да се измери ширината на импулсите. Тъй като микроконтролерът, отговорен за декодирането, като правило изпълнява много други функции, при пристигането на импулси от IR приемника, той трябва да бъде прекъснат, за да обработи съобщението. Въз основа на това е най-целесъобразно да свържете изхода на фотодетектора към входа на хардуерното прекъсване на контролера и да конфигурирате прекъсването така, че да се появи при всяка промяна в нивото на входа. В този случай алгоритъмът за декодиране е доста прост.

Първото нещо, което трябва да направите в процедурата за прекъсване, е да запомните таймера, да нулирате таймера и да го стартирате отново. Тъй като имаме първото прекъсване, ние просто го нулираме и стартираме таймера. Ние четем нивото на входа и го съхраняваме в нулевия бит на променливата. Преместете променливата наляво. Поставяме знака, че е настъпил запис и увеличаваме брояча на получените битове с 1. При пристигането на второто прекъсване ние също помним показанията на таймера, рестартираме го и виждаме колко време е минало. Ако интервалът се окаже дълъг период, тогава импулсът е бил"дълъг". А това означава, че във всеки случай сме прекъснали по средата на периода и трябва да записвамениво на входа на променливата, преместете го отново наляво и отново увеличете брояча.

Ако интервалът се окаже дълъг половин период, тогава импулсът е"къс". А това означава, че можем да прекъсваме както в средата, така и на границата на периода. След това проверяваме знака на записа.

Ако е имало запис при предишното прекъсване, тогава сме на границата на периода и не записваме в променливата. Нулираме знака на записа и чакаме следващото прекъсване.

Ако знакът на рекорда не е поставен, тогава сме прекъснати в средата на периода. Пишем, изместваме променливата, задаваме знака на записа и увеличаваме битовия брояч с 1.

Така приемаме всичките 14 бита, спираме таймера, нулираме брояча на битовете и знака за запис. Пристъпваме към процедурата за обработка на получената дума.

Също така е необходимо да се осигури прекъсване от измервателния таймер, ако интервалът от време надвишава период и половина. Това прекъсване трябва да нулира всички променливи и броячи, тъй като е възникнала грешка при получаване на командата. времевите стойности за "дълги" и "къси" интервали трябва да се вземат с марж от плюс или минус 20%, т.к. не всички дистанционни управления имат главен осцилатор, стабилизиран от кварцов резонатор. Понякога се извършва на RC верига и честотата му не е стабилна. Изходният код е представен изцяло по-долу:

Демонстрация на RC5 декодер