МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход

ИК приемник

ИК пультиков сейчас производят превеликое множество и с их помощью можно управлять практически всем, и даже кошками. Smile

CatRC_1

Мы тоже не остались в стороне, и установили на нашей платке Марсоход разъем для ИК приемника, чтобы платкой можно было удаленно управлять.

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

Для наших тестов мы взяли приемник ILMS5360:

 

Еще мы взяли восемь пультиков от разных устройств - телевизоров SAMSUNG, VESTEL, CARTV, плеера BBK, спутникового ресивера DRE-5000, компьютерного тюнера, проектора SANYO и фоторамки TEXET:

P2180052

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

st1

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

Табл.1
пульт префикс импульс биты on/off повтор 
sanyo 320/160 18/58 32 0CF300FF *
BBK RC-15 325/160 17/55 32 926DE01F -
DRE 328/158 17/56 32 000800FF -
SAMSUNG 160/160 19/60 32 E0E040BF +
TV-Station 323/161 19/58 32 40BF00FF -
TEXET 325/159 17/57 32 84FBC03F -
CARTV 326/158 16/56 32 00FD28D7 -
VESTEL ---------- 28/60 11 00000004 +

Для наших экспериментов мы использовали ИК приемник на 36кГц, поэтому временные параметры префикса и информационного импульса мы измеряли в периодах этой частоты. Далее в нашей таблице количество бит в пакете и код клавиши on/off или STANDBY.
Отдельно следует остановиться на параметре "повтор".
Большинство наших пультиков при нажатии и удержании кнопки посылали полный код только один раз (отмечены "-"), затем они посылали короткий пакет, который судя по всему означает повтор последней нажатой кнопки.
Некоторые пультики все время повторяют полный код ("+"). Исключением стал пульт SANYO ("*"), который на on/off повторял полный код всего два раза ,а на остальные - один раз полный код, далее короткий пакет.
Еще одним исключением из всех общих правил стал пульт от старого советского телевизора VESTEL.

st2

Пакет от этого пультика не содержит префикса, более короткий и информативными в нем являются не только положительные, но и отрицательные импульсы. Наш проект различает не все кнопки от этого пульта, но мы не будем на этом заморачиваться.

Теперь о проекте. Его можно взять здесь: 

IR приемник ( 52149 bytes )
.

Часть схемы для приема пакета от ИК приемника мы оформили в виде отдельного компонента IR-receiver для того чтобы иметь возможность использовать его в других проектах.

Работает он следующим образом. Первыми триггерами схемы из входного потока выделяется два события - фронт и спад. По фронту начинается подсчет количества периодов 36кГц, по спаду это количество сравнивается с пороговым и в зависимости от этого в регистр сдвига заносится 0 или 1.
Исходя из результатов наших изысканий (табл.1) мы выбрали пороговое значение - 37. Если длинна импульса превышает 256, то мы считаем что это конец пакета и вырабатываем сигнал data_ready.
Далее, уже в основном  проекте, в момент data_ready, можно сравнить принятый код с ожидаемым и предпринять какие-либо действия. В нашем случае мы разрешаем изменить состояние триггера, выход которого выведен на светодиод led0.

Даже такой простой проект может найти практическое применение. Например на пультике
от телевизора (или еще чего-нибудь) можно найти неиспользуемую кнопку и использовать ее для включения/выключения освещения (или еще чего нибудь). Есть только пара нюансов:

  1. Как узнать код нужной нам кнопки? Для этого мы добавили в проект возможность просмотра принятого кода на светодиодах. При нажатии на key0 на них будут высвечиваться младшие восемь бит кода, при нажатии на key1 следующие восемь и так далее.
  2. В случае если при удержании клавиши пульт повторяет полный код, то пользоваться предложенной нами логикой меняющего состояние триггера будет невозможно, поскольку при достаточно длительном удержании кнопки он переключится несколько раз. Чтобы выйти из этой ситуации нужно узнать посылает ли пульт код повтора или код целиком. Для этого мы добавили в проект сравнение принятого кода с кодом повтора (у нас это 00000001) и если при удержании кнопки он есть - загорается led1.

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

Вот так мы устанавливаем ИР приемник на плату Марсоход:

P2200061

Вот небольшое видео, которое показывает как нажатие на пульте кнопки зажигает или гасит светодиод на платке. Это просто демо, но на самом деле часть этого проекта может быть использована в управляемых игрушках.

Smile 

и восемь пультиков от разных устройств - телевизоров SAMSUNG, VESTEL, CARTV, плеера BBK, спутникового ресивера DRE-5000, компьютерного тюнера, прожектора SANYO и фоторамки TEXET.

Комментарии  

+1 #5 Ю р и й 17.04.2013 03:43
Цитирую utk:
Как посмотреть данные осцилогграммы? Это в самой Altera Quartus или вы просто взяли осциллограф?

В самой Altera Quartus есть программа "SignalTap" , эти картинки как-раз из нее. Но она может работать только с FPGA (марсоход2). Если у вас CPLD , то прийдется искать осцилограф :-|
+1 #4 utk 16.04.2013 19:57
Как посмотреть данные осцилогграммы? Это в самой Altera Quartus или вы просто взяли осциллограф?
+1 #3 ю р и й 17.03.2011 17:31
Цитирую dolkons:
А не, с этим вопросом я разобрался ))))
Но у меня другой вопрос появился. В вашем проекте сразу после компонента ir_receiever стоит компаратор, сравнивающий данные от ir_receiver с константой. У вас в значении константы написано число "16591063" - это код кнопки on/off на пульте?

Это "00FD28D7", к сожалению в константах можно
использовать только десятичные цифры.
+1 #2 dolkons 17.03.2011 17:25
А не, с этим вопросом я разобрался ))))
Но у меня другой вопрос появился. В вашем проекте сразу после компонента ir_receiever стоит компаратор, сравнивающий данные от ir_receiver с константой. У вас в значении константы написано число "16591063" - это код кнопки on/off на пульте?
+1 #1 dolkons 17.03.2011 17:04
Здравствуйте. Не совсем понял следующую вещь. У вас написано: " Далее, уже в основном проекте, в момент data_ready, можно сравнить принятый код с ожидаемым и предпринять какие-либо действия. В нашем случае мы разрешаем изменить состояние триггера, выход которого выведен на светодиод led0." Но в проекте, насколько я понял, вывод data_ready соединен с триггером, выход которого соединен с выводами f[9:0]. А светодиоды подключены к устройству, показывающее код кнопки.

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter