Печать

Инфракрасное дистанционное управление - Протокол SONY (SIRC)

Опубликовано . Опубликовано в Справочник

Рейтинг:   / 8
ПлохоОтлично 

Протокол SONY (SIRC).

Существуют три версии данного протокола использующие соответственно 12, 15 и 20 информационных бит. Наиболее распространен 12-битный протокол, который состоит из 5 бит адреса и 7 бит команды, передающихся методом ШИМ, и предшествующей им преамбуле..


При непрерывном нажатии на кнопку, передаются одинаковые посылки с периодом 50-мс.

Протокол RCA.

Кодирование - ШИМ, 4 бита адреса и 8 бит команды передаются в каждой посылке дважды, в прямом и инверсном виде. Это позволяет иметь неизменную общую длительность посылки.

При длительном нажатии - повторяется та же посылка с периодом 60мс.

Протокол Panasonic (REC80, JAP).

Очень «длинный» протокол - информационная длина 48 бит, из которых первые 32 бита являются постоянными для конкретного пульта, т.е. адресом. И только младшие 8 бит зависят от нажатой кнопки, т.е. являются командой.

При длительном нажатии кнопки, повторяются одинаковые посылки через 70-80мс.

Протокол Philips RECS-80.

Хотя этот протокол и был разработан Филипсом, он не использует манчестерское кодирование:


В целом, протокол довольно сложный, и имеет "обычный" и "расширенный" варианты. В обычном варианте передаются стартовый бит, "toggle bit", 3 бита адреса и 6 бит команды. Расширенный режим отличается наличием двух стартовых бит и четырех бит адреса.

Филипс как всегда отличился оригинальностью, и ввел почти во все свои протоколы т.н. "toggle bit". Этот бит меняется каждый раз, когда кнопка была отпущена и снова нажата. При непрерывном нажатии кнопки - постоянно передается один и тот же код. Это позволяет легко отличить длительное нажатие от подряд идущих кратковременных. Даже если была нажата одна и та же кнопка. Способ безусловно неплохой, но как видим - все остальные прекрасно обходятся и без этого.

Протокол Philips RC5.

Один из самых распространенных протоколов в мире, Филипс RC5 использует уже знакомое нам бифазное (манчестерское) кодирование информационных битов.

Протокол содержит 5 бит адреса и 6 бит команды, предваряется стартовым битом и битом "toggle".

При длительном нажатии передаются одинаковые посылки, при отпускании кнопки - в следующей посылке инвертируется и бит toggle.

Протокол Philips RC6.

Немного более сложный чем RC5 - филипсовский протокол RC6. Он использует преамбулу из длинного импульса и короткой паузы, за которой следуют информационные биты. Которые в свою очередь, могут быть одинарной или двойной длительности:


Каждая посылка состоит из четырех частей - заголовка, адреса, команды паузы. Заголовок начинается с преамбулы, за которой следует стартовый бит и три бита режима работы (все биты кроме преамбулы, перелаются одинарной длительностью, т.е. 444мкс.). Завершается преамбула битом "toggle", который передается удвоенной длительности (890мкс.). Далее следую восемь бит адреса и восемь бит команды. Завершается каждая посылка обязательной паузой, длительностью 2.7мс.


Программное декодирование.

Существуют много способов обработки сигнала с фотоприемника микроконтроллером или компьютером. Проще всего декодировать протоколы с кодированием длительностью - нужно измерить длительность единицы и нуля, после чего можно однозначно сделать вывод о передаваемом бите - единица это или ноль.
Аналогичным способом декодируется и стартовый бит (преамбула). В отличие от манчестерского кодирования, нам точно известно начало каждого передаваемого бита, и известно что должно быть изменение сигнала где-то между ними.


При манчестерском кодировании - обязательно только изменение состояния в середине бита, а вот на границе битов перехода может и не быть - если передаются разные биты:

Существует много алгоритмов декодирования манчестерского код, например алгоритм со «стейт-машиной» , можно и другими способами - суть от этого сильно не меняется. Я применил следующий алгоритм: считать длительности нуля и единицы, но запоминать при этом что было в прошлый раз, середина бита или граница между битами. И смотреть какой был предыдущий импульс - длинный (2Т) или короткий (Т). Мы совершенно точно знаем, что переход из 0 в 1 соответствует передаваемой единице, а переход из 1 в 0 -передаваемому нулю. Но это если он был в середине бита. Если же это переход на границе битов - его следует просто проигнорировать. Для определения где же был этот переход достаточно посмотреть на длительность импульса, а также помнить что детектировалось в последний раз -середина или граница.. Если импульс был длинный - мы однозначно находимся посередине бита (тут можно проверить - перед этим могла быть тоже только середина, иначе это ошибка!), и направление перехода указывает на передаваемый бит. Если импульс был короткий, а перед этим была середина - значит мы однозначно на границе битов и игнорируем переход (но запоминаем что он был на границе!). Если же импульс был короткий а перед этим была граница - значит мы на середине.


Для удобства реализации любых алгоритмов декодирования на микроконтроллерах (MCU), сигнал с фотоприемника нужно завести на вход внешнего прерывания и использовать таймер, присутствующим с большинстве MCU, для подсчета времени между фронтами. В одних MCU прерывание вызывается по любому фронту сигнала - в этом случае нужно в процедуре обработки прерывания прочитать состояние входа прерывания, чтобы определить направление фронта (из 0 в 1 или из 1 в 0).