Универсальная программа для работы с пультом
 
Однажды передо мной встала задача добавить в устройство возможность работы с пультом дистанционного управления(ПДУ). Причем, одна и таже программа должна была работать как с ПДУ на инфракраных лучах(ИК ПДУ), так и по радиоканалу(т.е. с обычным радиобрелком). Выбор типа ПДУ осуществлялся непосредственно на этапе сборки: надо ИК - воткнули ИК приемник, надо радиобрелок - припаяли радиомодуль.
Анализ осциллограм сигналов с радиобрелка и ИК пульта показали абсолютную их несхожесть:
Осциллограмма демодулированного сигнала с выхода приемника 433 МГц
 
 Примерная осциллограмма кодировки RC5 на выходе ИК-примника
 
Было принято следующее решение: не расшифровывать принятые биты, а по каждому фронту записывать в оперативную память длительность и лог. уровень импульса, затем сравнивать их с образцовыми параметрами из ПЗУ. Т.о. появляется возможность работы с  наибольшим количеством пультов и радиобрелков.
 
Как определить начало, конец пакета и общее число битов? Очень просто! Обратимся к следующему рисунку:

При нажатии кнопки начинает циклически передаваться пакет битов, идентифицирующий эту команду. Между пакетами есть большая и вполне определенная пауза: >10мс для радиобрелка и еще больше для ИК пульта. Т.о. надо поймать паузу и затем сам пакет битов, а последующая пауза однозначно укажет на окончание пакета.

Код программы был написан под контроллер Atmega8 с тактовым генератором 8МГц(в моем случае внутр. RC генератор) и использует следующие аппаратные возможности:
1. Прерывание по переполнению 8-битного таймера 2. Период переполнения примерно 8 мс;
2. Канал внешнего прерывания INT1, срабатывающий по изменению уровня(т.е. по любому лог. уровню). К нему подключен выход радио- или ИК-приемника.

Как все это работает(алгоритм):
1. Прерывание TIM2_OVF:
    -если в нормальном режиме приемный буфер содержит команду, то она сравнивается с образцовыми командами с временным с допуском +/- 25%. Временное "окно" в 25% необходимо потому, что тактовая частота контроллера и пульта задается малостабильным RC генератором.   Если команда полностью совпала, то в переменную выводится номер нажатой кнопки;
    -если находится в режиме записи команды(режим обучения), то принятая команда из приемного буфера копируется в буфер образцовой команды. Далее может быть вызвана подпрограмма записи образцовой команды в ПЗУ;
    -выставляет флаг переполнения(была пауза), обнуляет счетчик принятых бит команды.

2. Прерывание EXT_INT1:
    -фильтрует шум, если длительность импульсов слишком мала(<250мкс)
    -разрешает прием пакета битов, если до этого был выставлен флаг переполения(паузы) от TIM2_OVF;
    -захватывает длительность(значение TCNT2) и лог.уровень импульса если прием был разрешен;
    -сбрасывает счетный регистр TCNT2 чтобы: а)избежать прерывания TIM2_OVF во время приема битов; б)при приеме следующего импульса иметь действительное значение TCNT2.

Если используется радиобрелок, то программная фильтрация шума имеет большое значение. Особенно с дешевыми сверхрегенеративными приемными модулями. Следующая осциллограмма показывает эфирный шум на выходе такого приемника:

Восновном это цифровой шум от жизнедеятельности микроконтроллера и динамической светодиодной индикации. Однако, есть и достаточно сильные всплески при включении приборов в осветительную сеть. Если фильтрацию шума не сделать, то контроллер большую часть времени будет терять на бесполезную расшифровку этого шума. Когда же радиобрелок выходит в эфир, то шум практически исчезает.
ИК-канал более помехозащищеннный, на выходе оптического приемника нет такого шума. Поэтому если предполагается работа только с ИК ПДУ, то можно удалить часть кода, которая отвечает за фильтрацию коротких импульсов.
 

Устройство "Умная розетка", в котором трудится эта программа

     Скачать:

    Исходные коды проекта с достаточно подробными комментариями. В кодах есть только подпрограммы для работы с пультом. Вся лишняя информация, не касающаяся этой темы, была удалена.  

 
    Ссылки:

    1. Некоторые протоколы ИК-пультов. Часть первая
    http://radiokot.ru/articles/14/

    2. Некоторые протоколы ИК-пультов. Часть вторая
    http://radiokot.ru/articles/16/

    3. Использование пультов ДУ от бытовой техники (реализация без прерываний)
    http://arv.radioliga.com/content/view/219/43/

На главную

Hosted by uCoz