Схема и программа модуля приема ИК-команд
Первый вопрос - зачем нам нужно что-либо, имеющее отношение к инфракрасным кодам?
Домашняя аппаратура - телевизоры, музыкальные центры и т. п. - управляется с помощью пультов дистанционного управления, излучающих команды в ИК-диапазоне Чтобы управлять аппаратурой с компьютера (программно), нам потребуется излучатель ИК-кодов - модуль, который по команде компьютера будет излучать необходимые ИК-команды. Для работы этого модуля нам потребуется еще и считыватель ИК-кодов. Кроме того, пора подумать об устройствах управления в системе, причем хотелось бы иметь нечто достаточно дешевое.
Одним из устройств управления, как мы решили, станет компьютер. Можно подумать о создании устройства управления с использованием клавиатуры: нажатие клавиши отправляет в системную сеть команду управления.
Но и у компьютера, и у клавишного модуля есть небольшой недостаток: их удобно держать на стене или на столе, но не на кресле, где мы проводим достаточно много времени. Вопрос о клавишном модуле управления пока отложим и рассмотрим возможность управления с помощью старого пульта от видеомагнитофона или телевизора, которые давно отправились бы на свалку, если бы не завалялись на полке. В этом случае нам нужен модуль приема инфракрасных кодов.
Что собой представляют инфракрасные коды, излучаемые пультами управления?
Не вдаваясь в теоретические тонкости, можно сказать так: когда на пульте управления, положим, телевизором нажимается клавиша, установленный в нем светодиод (ИК-диапазо - на) начинает мигать. При этом он воспроизводит последовательность вспышек с некоторой частотой (от 20 до 400 кГц) и пауз, которые в совокупности и есть код управления. Каждая клавиша имеет свой набор вспышек и пауз. Клавиши разных пультов излучают разные коды управления, частота
(несущая частота) вспышек также может различаться. В качестве примера приведу структуру кодов управления фирмы Sony:
Technical Info
Code length (длина кода): 12 bits (15 bits для некоторых функций видеокамеры) Carrier (несущая): 40kHz
Header (Заголовок): I + +—+..
TOC o "1-3" h z _ 4Т_____ Т
+------- +
1 кодируется: I I + +—+..
_ 2T_____ T
+—+
О кодируется: I.. I +..+—+.. _Т_Т
T = 55Ous приблизительно Пауза между данными: 25ms data: hhhhxxxxxxyyyyyy
А А
MSB LSB
Хххххх command (команда) уууууу address (номер аппарата)
Таким образом, сначала идет заголовок длиной в 2,75 мс (инфракрасный свет мигает с частотой 40 кГц), затем пауза в 0,55 мс и код, в качестве которого для простоты рассмотрим последовательность 1001. Он будет соответствовать вспышке в 1,1 мс, паузе в 0,55 мс, вспышке в 0,55 мс, паузе в 0,55 мс, вспышке в 0,55 мс, паузе в 0,55 мс, вспышке в 1,1 мс, паузе в 0,55 мс, паузе в 25 мс. Уф!
Как будут выглядеть коды других производителей? Скорее всего, иначе. Есть несколько рекомендаций по применению
ИК-кодов, а производители вольны придерживаться их или нет. Кодирование логической единицы может производиться переходом (фронтом) от паузы к вспышке, логического нуля обратным переходом. Заголовок может отсутствовать и т. д.
Многие универсальные пульты управления, запоминающие ИК-коды, фиксируют длительность посылок и пауз, ждут длинной паузы между посылками, означающей завершение команды, а затем сохраняют значения в формате собственного времени, которое зависит от тактовой частоты синхрогенератора. Если при воспроизведении кода они могут менять несущую частоту, то записывают служебную информацию, ее определяющую.
Как и в предыдущем проекте, вначале приведу схему (рис. 1.45) и программу.
В табл. 1.4 перечислены все необходимые элементы.
Таблица 1.4. Спецификация модуля приема инфракрасных кодов
|
Для обращения к модулю с запросом принята новая ИК - команда - Cxx$0S (аналогично команде запроса статуса релейного модуля).
Х1 "7 |
DD1 |
8 |
СTJT 1І7 |
7 |
МАХ 1483 |
||
6 |
4 8 |
||
2 |
3 6 |
||
І |
DD2 |
IE |
PIC16F628A |
+12 В ■х |
R1-R3 С2 |
R4-R7 |
14 |
■ СЗ |
DD4 |
17 |
TSOP1737 |
-ь |
С4 RB4 |
S1 |
Ю- |
Х |
11 |
RB5 |
12 |
RB6 |
13 |
VO |
RB7
Рис. 1.45. Принципиальная схема модуля приема инфракрасных кодов
Ответ модуля - Сххккк, если команда пришла, и Cxx#ff, если новая ИК-команда не приходила.
Здесь хх, как и ранее, - двухбайтовый адрес модуля, kkk - три байта символов номера команды от 001 до 255, f f подтверждает отсутствие изменений за время опроса.