Схема дистанционного управления устройствами. Три способа управления компьютером через любой ик пульт

15.08.2019

был сделан модуль управления роботом по ИК каналу. Вот о нём я бы и хотел написать поподробнее. Так как применений этому можно найти очень много.

Собственно, что такое ИК-управление - объяснять, думаю, не нужно. Сейчас более распространено управление по Wi-Fi, Bluetooth, ZigBee. Но если вам требуется простое устройство, которое можно собрать «на коленке» при минимальных затратах, то эта статья для вас. =)


Я не буду привязывать эту статью к определённому микроконтроллеру, а опишу общие принципы работы ИК прёмо-передатчика с AVR МК.

1. Что потребуется
При создании простого ИК-управления, негласным стандартом является использование приёмника от компании Vishay TSOPxxxx и диода TSALxxxx в качестве передатчика.

В обозначении приёмников TSOP последние две цифры означают частоту (в кГц) на которой воспринимается передаваемый сигнал. Сложностей в работе с этими компонентами особых нет. Можно писать свой протокол передачи, можно воспользоваться уже готовыми решениями. В моём случае я решил связать два микроконтроллера ИК-каналом, используя USART. Принцип такой же, как если бы мы соеденили два МК обычными проводами. Нюанс только в модулировании несущей частоты и в настройке таймера.

2. Схемки
Чтобы не городить огородов, воспользуемся схемой включения TSOP из его даташита:

Выход TSOPа нужно подключить напрямую к входу (RX) USART МК.

С подключением передатчика ситуация немного другая. Так как приёмник работает только на определённой частоте, то нужно задать эту же частоту на излучателе. Это сделать не сложно запрограммировав таймер. Для ATmega16 это будет выглядить вот так:
TCCR1A=0x40;
TCCR1B=0x09;
OCR1AH=0x00;
OCR1AL=0x84;

Нужную частоту можно выразить из формулы:

OCRn - будет искомое значение, которое нужно перевести в шестнадцатеричный формат и записать в регистр OCR1A (для случая с МК ATmega16).

Теперь TSOP будет принимать наш сигнал. Но чтобы можно было использовать USART, нужно промодулировать наш сигнал. Чтобы это можно было делать - подключим ИК-диод по схеме:

3. Немного кода
Прошивки я писал в CodeVision AVR.

Вот так будет выглядеть код для передатчика:
#include
#include

Void main(void)
{
PORTB=0x00;
DDRB=0x02;

DDRC=0x00;
PORTC=0xFF;

TCCR1A=0x40;
TCCR1B=0x09;
OCR1AH=0x00;
OCR1AL=0x84; // Сюда вписываем значение для вашей частоты

// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Mode: Asynchronous
// USART Baud Rate: 2400
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0xCF;

While (1)
{

If (PINC.4 == 0x00) { putchar("S");}/* В данном случае при нажатии на кнопку, которая висит на PINC.4 МК отсылает символ "S". Который передаётся на другой контроллер через ИК.*/
};
}

Код приёмника не привожу, т.к. занимает много места, а для восприятия общих принципов кода передатчика будет, думаю, достаточно.

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

Желаю удачи! Буду рад любым вопроса\критике\предложениям;)

UPD. Решил выложить фото самого пульта, чтобы было видно, что работает девайс не только как китайские приёмники, которые подключаются к ПК. Возможности гораздо шире и универсальнее.

В июньском номере Railway Modeller за 2007г. была статья про 0-масштабный макет Бодмина (Bodmin), сделанный Рэем Грином (Ray Green) с использованием инфракрасного пульта управления поездами. Неужели мои молитвы были услышаны? Я занялся поисками и спустя несколько дней навестил Стива Лейланда (Steve Leyland) из компании MicroMotive, которая расположена в Клэй-Кросс, Дербишир (Clay Cross Derbyshire), чтобы увидеть их инфракрасную систему Красная Стрела” (“Red Arrow”). Естественно, домой я вернулся с инфракрасной системой: пультом управления и сумкой деталей, необходимых для оснастки двух локомотивов.

Пульт управления

Детали - (слева направо)

  • Блок управления
  • Геркон
  • ИК-приёмник
  • Резисторы ограничительного выключателя

(внимание : аккумулятор и соединитель к нему в комплект не входят.)


Испытательная установка

Прочитав несколько раз инструкцию, я собрал испытательную установку, чтобы проверить детали, перед тем как оснащать ими локомотив.



Для испытаний я использовал всего один 3х-вольтовый моторчик, но всё отлично заработало.

Настал черёд разделывания локомотива и тендера - самый кощунственный процесс, где приходится фактически разрушать то, что годами хранилось как сокровище. Я назвал это хирургической операцией и постарался причинить модели как можно меньше вреда.

На фото показан блок управления, помещённый сверху тендера Jubilee Bachmann , для того, чтобы наглядно увидеть соотношение размеров.


Блок управления на тендере

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

Что же, для меня это оказалось непростой задачей. Разбирая Jubilee, я вскоре понял, что в нём нет как таковых токосъёмников, вместо них использовались два разделённых металлических шасси с двумя пружинами, прижимающими контакты мотора. Уфф.

Разделённые шасси



Как показано на снимке, две маленькие пружинки располагались в отверстиях. Они прижимались к контактам, расположенным на корпусе мотора. Я решил удалить пружинки (сохранив их на будущее), заизолировать контакты и вывести два провода из локомотива к тендеру.

Заизолированные контакты


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

Питание мотора в сборе


Я собрал локомотив и просто подключил его к 9-вольтовому аккумулятору. Первое, что я заметил (я использовал новый стандартный PP3 аккумулятор), была явная потеря мощности, и локомотив ехал медленнее, чем обычно. Я снова разобрал и собрал локомотив - результат был прежним, тогда я поставил его на рельсы, и он поехал со своей обычной скоростью, возможно проблема была в том, что я подключил 9- вместо 12- вольтового аккумулятора. Это может стать проблемой для длинного состава, но, так как у меня оставалось ещё много работы, поверку мощности я отложил на потом.

Теперь разделывание, простите, оперирование тендера.

Внутри тендера распложены три металлические пластины, используемые в качестве балласта. Первым этапом была замена средней пластины на пластиковую, разделённую посредине, что образовало отверстие, через которое можно было провести кабельную стяжку, чтобы закрепить ярусное расположение всех компонентов.


Отверстие для кабельной стяжки


На пластины я положил батарейку и блок управления, поместив их друг на друга. Похоже на это:

Ярусное расположение (обратите внимание на маленькую деталь, приклеенную к концу связки - это монтажная пластина - см. дальше)


Кроме этих деталей мне ещё нужно было установить ИК-приёмник, геркон, резисторы ограничительного выключателя, выпрямительный мост, соединители и пр. - хватит ли у меня места?

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

Герконовый переключатель
При помощи двустороннего скотча переключатель был прикреплён к задней стенке нижней части корпуса тендера.


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



После этого мне нужно было смонтировать выпрямительный мост и резисторы (по-моему, на 120Ом) Большой необходимости в этом нет, но это избавляет от разборки тендера каждый раз, когда аккумулятор разряжается. Я хотел иметь возможность заряжать аккумулятор, не снимая локомотив с рельсов.

Поэтому чуть позже я собрал этот элемент (на монтажной пластине veroboard, показанной выше), установил все детали на шасси тендера и попытался надеть верхнюю часть.... Ничего не вышло - детали не вмещались.

Я перебирал разные варианты.

И тут я вспомнил любимый совет своего папы, который он мне всегда давал, когда я что-нибудь чинил: “Если деталь не становится на своё место - переверни её другой стороной и попробуй снова.”

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

Но места всё равно не хватало, поэтому я убрал балластные пластины и их держатели, а также расположил ИК-приёмник на крыше, но с краю от центра.


Детали, заключённые в корпус тендера


На этом фото видно, что ИК-приёмник приклеен (эпоксидным клеем) к крыше тендера, но смещён в сторону, чтобы оставалось достаточно места для аккумулятора.

Внутренний вид


и ещё одно изображение сверху - мне ещё нужно почистить верх, так как клей выступил через зазоры.

Вид сверху


Ура Всё подошло - но будет ли это работать?


Испытания в работе

На снимке показано испытание паровоза, к которому ещё не присоединён тендер. ЗАРАБОТАЛО С ПЕРВОГО РАЗА. Фотоаппарат не смог передать быстрое вращение колёс.
(обратите внимание: Зелёные провода нужны для системы подзарядки аккумулятора).

В процессе работы я столкнулся с парой проблем. Но я вполне доволен, потому что, кроме опыта сборки нескольких цепей с диодами, у меня нет никаких знаний в электронике.

Проблемы, возникшие в процессе работы и требующие решения:


1) Явная нехватка напряжения (9В вместо 12В) - хватит ли его, чтобы тянуть состав?
2) Система позволяет запрограммировать 99 локомотивов. По умолчанию в заводских настройках запрограммировано 27, и я не смог их перепрограммировать. Больше 27 не получилось.

3) Прочитав инструкцию, я узнал, что мне нужен ещё и радиатор для транзистора. У меня очень смутное представление как о том, что это такое и для чего он нужен, так и какого он размера, где его устанавливать и где его взять.
4) Ещё нужно установить токосъемные контакты для подзарядки аккумулятора. Сделать их на колёсах тендера (что проще), или же прикрепить к разделённым шасси локомотива (что эффективнее)?
5) У паровоза Jubilee закрытый корпус тендера формируется за счёт формованной крышки, создающей эффект наполненности углём. А как быть с паровозами, тендеры которых пустые или в них мало угля?
6) Плохо ли скажется на аккумуляторе постоянная подзарядка?
7) После присоединения, паровоз и тендер будут связаны навсегда проводами. Найду ли я для этого подходящий микроконнектор?

Я также пришёл к выводу, что:
1) Данная конструкция не подойдёт для паровозов без тендера.
2) Данная конструкция не подойдёт для паровозов, мотор которых установлен в тендере.

Помните, как в мультфильме «трое из Простоквашино», мама дяди Федора сказала: «Я так устаю на работе, что даже телевизор смотреть не могу!» Видимо, эта фраза и является ответом на вопрос, почему вся современная бытовая аппаратура имеет инфракрасные пульты дистанционного управления (ПДУ) . Но, если разобраться, то все началось намного раньше.

ПДУ с проводами

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

Подобные пульты были у советских ламповых телевизоров первого класса. Это была маленькая пластмассовая коробочка с регулятором громкости, соединенная с телевизором проводом. Кроме громкости такой пульт ничем управлять не мог. Но определенные удобства такой пульт, несомненно, создавал. Ведь тогда не было надоедливой рекламы и фильм приходилось смотреть от начала до конца.

Ультразвуковые ПДУ

Первый беспроводной пульт дистанционного управления обязан своим появлением на свет американцу Хассо Платтнеру. В 1972 году после ухода из IBM он организовал свою фирму и в целях налаживания деловых контактов и связей часто и много ездил по всему миру. На одной из встреч с руководством компании JVC произошел конфузный случай.

При обсуждении какой-то проблемы Платтнер встал и двинулся к телевизору, чтобы пальцем показать какую-то деталь на экране. Но, до экрана не дошел, споткнувшись о кабель дистанционного управления. Пролил коктейль на костюм и в сердцах сказал: «Разве нельзя было сделать переключение каналов по радиоволне?», чем вогнал японских компаньонов в краску. А уже ровно через год появился первый пульт на ультразвуковых лучах.

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

Дальнейшее развитие электроники, в частности появление микросхем фирмы INTEL, позволило отказаться от подобного многочастотного кодирования. На одной ультразвуковой частоте за счет различных способов модуляции стало возможным передавать намного больше команд, чем при много частотном кодировании. Одним из первых аппаратов оснащенных ультразвуковым ПДУ был телевизор фирмы RCA. Кодирование команд осуществлялось при помощи широтно-импульсной модуляции (ШИМ).

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

Рис. 1. Первые пульты дистанционного управления

Специализированные микросхемы для ПДУ

Дело пошло лучше после того, как фирма INTEL разработала свой первый микропроцессор 8080. Эту новую разработку взяли за основу фирмы GRUNDIG и MAGNAVOX, которые сделали первый специализированный микропроцессор. В этом случае процессором генерируется нужный код цифровой команды под воздействием нажатой кнопки. Таким образом специализированная микросхема для ПДУ есть не что иное, как с уже прошитой программой. Такие ПДУ назывались TELEPILOT.

ПДУ на ИК-лучах

Первый цветной телевизор с микропроцессорным управлением и пультом дистанционного управления (ПДУ) на ИК лучах был выпущен совместно фирмами GRUNDIG и MAGNAVOX уже в 1974 году. Уже в этой модели в углу экрана показывался номер переключающегося канала (система OSD). Эта система команд получила название ITT. Это был первенец фирмы GRUNDIG.

В дальнейшем исследованиями в области ПДУ занялась фирма PHILIPS, которая разработала систему команд RC-5. Новая система позволяла кодировать 2048 команд, что в 4 раза превысило количество команд в системе ITT. Несущая частота была выбрана 36КГц, что не мешало передачам европейских радиовещательных станций и работе пультов с ультразвуковыми передатчиками с частотой 30 и 40КГц, а также обеспечивала достаточную дальность приема.

Но электронная техника не стояла на месте, а как говорил один киногерой, - шла вперед семимильными шагами. Совершенствовались телевизоры, появились видеомагнитофоны и музыкальные центры, спутниковые тюнеры, проигрыватели CD и DVD и многое другое.

Для управления новой техникой потребовались и новые ПДУ, а соответственно пришлось разрабатывать новые микросхемы. Такие микросхемы разработали фирмы SIEMENS и THOMSON. Несущая частота новых ПДУ была тоже 36КГц, но использовался другой метод модуляции сигнала, - двухфазная модуляция. При такой модуляции несущая частота была более стабильна, что обеспечило повышение дальности, увеличение помехозащищенности и надежности работы.

Дальнейший вклад в дело развития систем ПДУ снова внесла фирма PHILIPS. В начале 90 годов прошлого века она объединила все лучшее, что было в системах RC-5 и SIEMENS. Получившийся продукт получил название «Объединенная система команд». Суть ее в следующем. ПДУ такой системы имеют функции «MENU 1» и «MENU 2». В каждой из этих функций одна и та же кнопка выполняет разные команды, и получается, что меньшим количеством кнопок можно выполнить большее число команд.

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

При всем многообразии пультов и управляемых ими устройств, все они работают практически одинаково: инфракрасный светодиод ПДУ при нажатии кнопок излучает пачки инфракрасных импульсов (вспышек), которые принимаются фотоприемником («глазом») телевизора или другого устройства. Современный интегральный фотоприемник представляет собой устройство достаточно сложное, хотя по внешнему его виду этого не скажешь. Внешний вид фотоприемника показан на рисунке 2.

Рисунок 2. Фотоприемник

Приемник настроен на прием импульсов с несущей частотой 36КГц, что соответствует протоколу RC-5. Если вблизи фотоприемника просто включить, например, от батарейки, ИК светодиод, то его немигающее свечение на «глаз» никакого воздействия не окажет, даже если этот светодиод поднести вплотную к фотоприемнику. Также не оказывает воздействия дневной и искусственный свет. Такая избирательность обусловлена тем, что в цепи усиления сигнала фотоприемника имеется полосовой фильтр. Структурная схема фотоприемника показана на рисунке 3.

Рисунок 3. Структурная схема фотоприемника

Здесь не будет объясняться подробно протокол RC-5, поскольку на дальнейший рассказ, да собственно и на ремонт ПДУ, это незнание никак не повлияет. Желающие познакомиться с протоколом RC-5 более подробно могут найти его описание в интернете. Это уже тема для отдельной статьи.

Устройство ПДУ

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

Рисунок 4. Схема современного пульта дистанционного управления

Основой всего устройства является микросхема U1типа SAA3010P. Хотя буквы могут быть и другими, что говорит о другой фирме производителе микросхемы. Но цифры все равно остаются 3010.

Как было сказано выше, навесных деталей практически нет. Прежде всего, это , хотя это не совсем точно. Его назначение - синхронизация внутреннего генератора микросхемы, что обеспечивает требуемые временные характеристики выходного сигнала.

В нижнем правом углу схемы показана матрица клавиш (KEY MATRIX). Ее строки подсоединены к выводам DR0…DR7, а столбцы, соответственно, к выводам X0…X7. При нажатии на любую кнопку замыкается одна пара столбец - строка, и на выходе микросхемы возникает импульсная последовательность соответствующая нажатой кнопке. Каждая кнопка выдает свою последовательность и никакую другую! Всего возможно подключить 8*8=64 кнопки, хотя практически может быть и меньше.

Выходной сигнал в виде импульсов напряжения поступает на затвор полевого транзистора VT1, который в свою очередь управляет работой ИК светодиода VD1. Алгоритм управления в данном случае очень простой: открылся транзистор - засветился светодиод, транзистор закрыт, - светодиод погас. В таком случае говорят, что транзистор работает в ключевом режиме. В результате таких вспышек формируются пакеты импульсов, соответствующие протоколу управления RC-5.

Питание схемы производится от двух гальванических элементов типа AA, энергии которых хватает не менее чем на год. Параллельно батарейкам стоит электролитический конденсатор C1, который шунтируя внутренне сопротивление батареек, продлевает срок их службы и обеспечивает нормальную работу ПДУ при несколько «подсевших» батарейках. Светодиод в импульсном режиме может потреблять ток до 1А.

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

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

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

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

Первым из них является необходимость наличия прямой видимости от пульта до приемника. Второй - отсутствие возможности индивидуальной адресации устройств (если, например, используется несколько одинаковых усилителей). С этим проблемами можно справиться установкой ИК-передатчика непосредственно на окошко приемника требуемого устройства, как это реализовано у Global Cache. Третьим, важность которого в бюджетных решениях спорна, назовем отсутствие обратной связи. Четвертым, пожалуй, наиболее существенным, является отсутствие в большинстве случаев документированной базы ИК-кодов.

Для решения последней проблемы применяется несколько способов, которые также сложно считать идеальными. Первый вариант - использование «обучающего» устройства для записи кодов с существующего пульта ДУ. Второй - работа с подготовленной заранее базой данных кодов.

Недостаток первого способа - невозможность получения отсутствующих на пульте команд. Чаще всего эта проблема встречается в мультимедийных инсталляциях, когда требуется обеспечить переключение ресивера или телевизора на какой-то определенный вход для коммутации и отображения необходимого сигнала. С учетом широкого набора входов, многие устройства сегодня имеют только одну или две кнопки для его выбора перебором. При этом обеспечить гарантированное «попадание» на нужный вход при любых начальных условиях невозможно. Эту задачу можно решать разными способами, например запоминанием входа или установкой дополнительных коммутаторов с «правильным» управлением, но это неудобно или дорого. Аналогичное замечание касается и управления питанием, где практически всегда есть только функция «переключить питание», а не отдельные кнопки включения и выключения. Еще одним нюансом в описываемом сценарии является погрешность при измерении, поскольку частота модуляции не фиксирована и приемник пытается определить ее по входящему сигналу, так что даже одна команда, записанная несколько раз, может иметь разные коды.

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

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

Отметим, что управление кондиционерами имеет свои особенности, связанные с наличием одновременных регулировок нескольких рабочих параметров, что еще больше затрудняет их управление через ИК-порт.

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

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

Global Cache iTach Flex

В данном материале мы использовали устройство iTach Flex из последнего поколения компактных адаптеров Global Cache. Модель существует в версиях для подключения к проводной сети и Wi-Fi.

Устройство для варианта Wi-Fi, который мы тестировали, имеет корпус с размерами всего 31×65×13 мм (не считая разъемов кабелей), что позволяет установить его где угодно. Модификация с RJ-45 будет немного крупнее из-за разъема.

Корпус изготовлен из черного пластика. Беспроводная антенна встроенная. Присутствует специальная металлическая рамка для крепления. Она устанавливается на одном или двух шурупах, а адаптер просто защелкивается на ней.

На корпусе есть светодиодный индикатор статуса, кнопка для подключения к беспроводной сети по WPS и сброса настроек, а также окошко ИК-приемника для обучения. С одного из торцов установлен вход питания (стандартный microUSB) и многофункциональный миниджек 3,5 мм для подключения кабелей Flex Link.

Благодаря последнему элементу, модель получилась уникально универсальной. На настоящий момент поддерживаются следующие варианты: последовательный порт, один ИК-передатчик, один ИК-бластер, три ИК-передатчика (один может быть бластером).

Как и ранее рассмотренного семейства iTach, ИК-бластер предназначен для использования на большом расстоянии (в комнате) и может оправлять команды на разные устройства. А обычный ИК-передатчик предназначен для крепления на окошке приемника конкретного устройства. Ожидается реализация поддержки управления сухими контактами и подключения сенсоров. В этом материале мы подключали к адаптеру ИК-бластер, поскольку управлять нужно было несколькими устройствами в комнате.

Для управления можно использовать как знакомый по iTach вариант TCP с отправкой команд на определенный порт, а также новый HTTP API. Установка основных параметров работы осуществляется через встроенный веб-сервер.

Отметим, что Global Cache имеет собственную онлайн-базу ИК-кодов, отсортированных по производителю и записанных в виде команд для отправки на их собственные адаптеры.

Телевизор LG серии LM66x 2012 года выпуска

Модель оборудована большим количеством видеовходов, поддерживает 3D и подключение к сети, имеет порты USB. На штатном пульте управления присутствует одна кнопка для включения/выключения питания и одна кнопка открытия меню для переключения источников. В последнем случае потребуется подтверждение операции, а в случае наличия подключения к сети в списке будут присутствовать и медиасерверы, что делает невозможным «слепую» установку на заданный вход.

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

Для начала используем встроенный в iTach Flex датчик для записи кодов штатного пульта. Все кнопки нам сейчас не потребуются, достаточно определиться только с основными. После запуска программы iLearn и подключения к адаптеру необходимо поднести пульт к приемнику и нажимать кнопки

Теперь можно проанализировать результаты. Как мы видим, каждая команда, если не учитывать необходимой для самого адаптера части «sendir,1:1,1,37914,1,1,», имеет префикс «341,170,», далее идут тридцать две пары чисел и замыкает команду суффикс «22,1520,341,85,22,3700». В данном случае, нас будут интересовать как раз данные пары чисел. Они кодируют команду в двоичном формате, где «22,21,» обозначает «0», а «22,63,» обозначает «1», причем первым идет младший бит. Заметим, что из-за особенностей оцифровки некоторые числа могут немного отличаться, например «20» вместо «21» или «65» вместо «63». Но сути это не меняет и удобнее сразу привести все к одинаковому виду поиском и заменой.

Декодирование команды дает нам четыре байта. Подобный вариант, называемый обычно «протоколом NEC», используется достаточно часто и представляет собой сочетание двух байт адреса, одного байта команды и его повтора в инверсном виде («0» заменяются на «1» и наоборот).

В частности для нашего примера мы получаем: 04 FB 44 BB, 04 FB 02 FD, 04 FB 03 FC. Интересно, что здесь второй байт адреса является инверсным для первого. Далее есть два варианта: зная адрес, составить строки для каждого из возможных значений команды и проверить их на устройстве - или поискать готовые команды в сети. Второй подход приводит нас на сайт , где мы можем обнаружить документ производителя с подробным описанием команд управления телевизорами близких по году выпуска серий. Сравнение таблицы в нем с нашими записями показывает идеальное совпадение по записанным командам. Теперь нужно найти коды для требуемых нам операций и перекодировать их в обратном направлении в команды для iTach Flex. Например, из 04 FB C4 3B и 04 FB C5 3A мы получаем соответственно
«sendir,1:1,1,38004,1,1,341,171,22,21,22,21,22,65,22,21,22,21,22,21,22, 21,22,21,22,65,22,65,22,21,22,65,22,65,22,65,22,65,22,65,22,21,22,21,22, 65,22,21,22,21,22,21,22,65,22,65,22,65,22,65,22,21,22,65,22,65,22,65,22, 21,22,21,22,1523,341,86,22,3800»
и
«sendir,1:1,1,38004,1,1,341,171,22,21,22,21,22,65,22,21,22,21,22,21,22, 21,22,21,22,65,22,65,22,21,22,65,22,65,22,65,22,65,22,65,22,65,22,21,22, 65,22,21,22,21,22,21,22,65,22,65,22,21,22,65,22,21,22,65,22,65,22,65,22, 21,22,21,22,1523,341,86,22,3800».

Заключительный этап - проверка работоспособности команд. Он также поможет, если в найденной таблице есть неоднозначное соответствие. Для этой задачи используем программу iTest.

Для удобства и ускорения процесса мы установили около ТВ IP-камеру, что позволило наблюдать за процессом прямо с экрана компьютера. Проверка показала, что задача была полностью выполнена. Результат, записанный в обычном текстовом формате, можно скачать .

Отметим, что использование готовых баз могло и не дать результата. Например, в базе Global Cache для телевизоров LG представлено семь наборов команд, причем явных пунктов для переключения на заданный вход HDMI в них нет. Хотя, скорее всего, один из представленных вариантов выбора входа мог бы и сработать.

Комплект домашнего кинотеатра Onkyo HTX-22HD

Эта задача явно будет посложнее - модель достаточно старая и не очень популярная, особенно в «серьезных» инсталляциях. Однако со своей задачей многоканального ресивера для медиаплеера вполне справляется и сегодня. Как и с описанным выше телевизором здесь есть несколько задач - отдельные команды для включения и выключения питания, выбор конкретного входа и регулировка громкости. С последним проблемы нет - можно просто скопировать коды для этих кнопок. Но для управления питанием используется одна кнопка пульта, а для выбора входа - две кнопки для перехода к следующему и предыдущему входу. Также могут быть потенциально интересны функции выбора режима обработки многоканального звука.

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

Вход Функция
Coaxial Digital In CD
HDMI 1 VCR/DVR
HDMI 2 CBL/SAT
Line 1 Tape
Line 2 Tuner
Optical Digital In 1 DVD
Optical Digital In 2 Game/TV

Теперь, как и с телевизором, запишем некоторые или все команды существующего пульта через приемник в iTach Flex. Здесь мы тоже видим характерное начало в строках - «sendir,1:1,1,38095,1,1,» как параметры отправки пакета и «341,171,» как префикс. Далее идут знакомые тридцать две пары чисел протокола NEC, а вот суффиксы встречаются разные. Сложно понять, насколько это существенно, но, на всякий случай запишем и их в рабочую таблицу.

В случае Onkyo мы имеем два байта адреса и один байт команды, который повторяется в инвертированном виде четвертым байтом пакета. Адрес, вероятно, как-то связан с суффиксом, а всего на основных кнопках пульта мы смогли насчитать три адреса - D2 06, D2 07 и D2 08.

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

Анализ данных показал, что если сравнивать только команды и не учитывать адрес, то можно найти сходство. Например, для увеличения громкости используется команда 02, для уменьшения - 03, а для отключения звука - 05. В таблице с теми же адресами, что и управление громкостью нашлась команда включения питания (04). Модификация оцифрованной строки с адресом D2 06 на эту команду (нужно исправить всего пару чисел) показала, что мы на правильном пути - ресивер включался и не менял своего состояния при повторной отправке, будучи уже включенным. Команда выключения питания в документе имела другой адрес. Так что мы подставили команду 47 в строку команды , имеющую адрес D2 07 и отличающийся суффикс. Это тоже сработало.

Таким образом, до нахождения команд перехода на нужный вход оставалось совсем немного. Однако, еще раз внимательно просмотрев найденный документ, на одном из листов была обнаружена таблица, указывающая на то, что приемник и пульт могут иметь альтернативные заменяемые списки адресов из определенных наборов. Сделано это, видимо, для возможности управления однотипными устройствами в одном помещении. Так что после замены наших адресов на D2 6D, D2 6C, D2 AC мы смогли проверить соответствие оцифрованным данным и найти все необходимые команды для переключения на нужный вход. После этого, с учетом разных суффиксов, была составлена таблица команд для данного устройства. Скачать ее можно по ссылке . Отметим, что логические названия входов в ней были заменены на физические исходя из заводских настроек.

Медиаплеер Dune HD

С учетом того, что данная серия плееров поддерживает управление по сети (на сайте производителя приводится информация о API), от ИК-пульта в данном случае могут потребоваться только функции раздельного включения и выключения. Здесь производитель сделал подарок, опубликовав с разделе поддержки соответствующий документ, добавив в него необходимые команды включения и выключения с кодами 00 BF 5F A0 и 00 BF 5F A1 соответственно. Заметим, что работа второй команды зависит от настройки режима выключения плеера. Устройство может или переходить в спящий режим (с сохранением работоспособности сетевых функций) или выключаться полностью (до подачи ИК-команды на включение).

После оцифровки нескольких кнопок пульта в iTach Flex можно получить требуемое «окружение» для наших кодов - приставку «sendir,1:1,1,38186,1,1,342,170,» и суффикс «22,1547,342,85,22,3800». Результат после добавления непосредственных команд можно посмотреть в отдельном текстовом файле .

Использование команд в iRiduim

После нахождения требуемых кодов, попробуем использовать их в проекте автоматизации. В первом примере мы взяли продукт iRidium . Несмотря на то, что он имеет встроенную базу кодов Global Cache, по описанным выше причинам рекомендуется использовать именно новые найденные и проверенные коды.

Для удобства работы с командами можно создать собственную (пользовательскую) базу данных для требуемых устройств. Это позволит использовать их в нескольких проектах. При создании устройств в новой базе вы указываете название, производителя, тип и комментарий. После этого можно запрограммировать для устройства любое число команд. При этом заносить в параметры нужно не весь код, а только основную часть после частоты, числа повторов и смещения. Эти параметры будут указываться уже в свойствах передатчика Global Cache. Отметим, что, несмотря на формально немного отличающуюся частоту, все три устройства успешно работали при указании общего значения 38000.

После составления дизайна проекта с кнопками и другими элементами можно приступить к программированию действий. Проще всего это делать перетаскиванием команды из дерева устройств проекта на кнопки. Для реализации функций непрерывной регулировки (например, громкости), нужно использовать не только действие «Press», но и «Hold». Заметим, что для ИК управления реализовать быструю установку уровня громкости слайдером не получится, поскольку обратной связи от управляемого устройства в системе нет, как и возможности в виде параметра указать нужный уровень. А вот для RS-232 подобный сценарий в некоторых случаях может быть реализуем.

В данном проекте мы использовали простейший вариант удаленного управления - каждая кнопка соответствует своей команде. Но система iRidium позволяет реализовать и более сложные сценарии, например можно назначить одной кнопке включение сценария «Просмотр кинофильма», включающий соответствующее управление светом, включение всех участвующих в сценарии устройств (и отключение мешающих), необходимую коммутацию входов и выходов, открытие всплывающего окна управления медиаплеером.

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

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

Заключение

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

Процесс поиска и составления требуемых команд способен превратиться в запутанный исследовательский процесс. Существенную помощь здесь оказывают интернет-ресурсы, на которых собирается информация об используемых ИК-кодах. Анализ представленных данных и поиск аналогий часто позволяет с относительно небольшими затратами найти необходимые для реализации проекта команды.

В качестве управляющего адаптера можно использовать как упомянутые в материале готовые устройства Global Cache, так и другие аналогичные модели, например собранные самостоятельно на основе микроконтроллеров, проекты для которых широко представлены в интернете. Что касается интеграции в систему управления, то наиболее удобным представляется вариант работы по компьютерной сети, но в некоторых ситуациях будет достаточно и локальных подключений через USB или последовательный порт. Сетевой вариант, в частности, интересен тем, что может быть использован с различным программным обеспечением, например в составе решений Fibaro и через интернет.

Завязка или «Как начинался девайс»

…Когда я пришёл, Виктория сидела на диване, уставившись в телевизор. День выдался тяжёлый, поэтому ей не хотелось ничего делать. Несколько минут мы смотрели какой-то попсовый сериал, потом он закончился, и Вика выключила телевизор. В комнате стало темно. На улице шумел дождь, и от этого казалось, что дома тоже холодно.
Вика поднялась с дивана и принялась, на ощупь, искать выключатель от светильника. Настенный светильник висел, почему-то, не у дивана, а на другой стене и приходилось топать через всю комнату, чтобы зажечь свет. Когда она, наконец, включила его, комната наполнилась тёплым светом лампочки накаливания.
Около меня, на помятой простыне, лежал пульт от телевизора. Нижние кнопки без опознавательных знаков и, скорее всего, не использовались. И тут у меня возникла интересная мысль…
— Вик, а хочешь, я сделаю так, что твой светильник можно будет пультом от ящика включить? Там даже кнопки лишние есть…

Концепция
Наше устройство должно уметь принимать сигнал с ИК-пульта, отличать «свою» кнопку от других, и управлять нагрузкой. Первый и последний пункты простые, как топор. А вот со вторым немного интереснее. Я решил не ограничиваться каким-то конкретным пультом (Почему? – «Не интересно так!»), а сделать систему, которая может работать с разными моделями пультов от разной техники. Лишь бы ИК-приёмник не спасовал, и уверенно ловил сигнал.

Ловить сигнал будем с помощью фотоприёмника . Причем не каждый приёмник подойдёт – несущая частота должна совпадать с частотой пульта. Несущая частота приёмника указана в его маркировке: TSOP17xx – 17 это модель приёмника, а хх – частота в килогерцах. А несущую частоту пульта можно найти в документации или в инете. В принципе, сигнал будет приниматься, даже если частоты не совпадают, но чувствительность будет фиговой – придётся тыкать пультом прямо в приёмник.

Каждая компания, выпускающая бытовую технику, вынуждена соблюдать стандарты при изготовлении «железа». И частоты модуляции у пультов, тоже стандартные. Зато разработчики отрываются на программной части – разнообразие протоколов обмена между пультом и устройством просто поражает. Поэтому, пришлось придумать универсальный алгоритм, которому плевать на протокол обмена. Работает он так:

В памяти устройства хранятся контрольные точки. Для каждой такой точки нужно записать время и состояние выхода с ИК-приёмника – 0 или 1.
При получении сигнала с пульта, МК будет последовательно проверять каждую точку. Если все точки совпали – то это была та самая кнопка, на которую устройство запрограммировали. А если выход с приёмника хотя-бы в одной точке не совпал с шаблоном, то устройство никак не отреагирует.

Впрочем, баги никто не отменял! Возможно, что, сигнал будет отличаться от шаблона, но
в контрольных точках значения будут одинаковые. Получится ложное срабатывание. Казалось-бы – редкостное западло, и бороться с ним пипец сложно! Но на самом деле не всё так плохо (а местами даже хорошо).

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

Во-вторых мелкий шум (обычно выглядит, как редкие короткие импульсы) в большинстве случаев идёт лесом – ибо если он не попадёт прямо на контрольную точку, то нифига не повлияет на систему. Значит у нас есть естественная защита от шума.

Второй тип ошибок (aka «Пропуск команды») бывает из-за того, что точка расположена слишком близко к фронту импульса (к тому месту, где сигнал на выходе приёмника меняет свой уровень).
Представь себе, что через несколько микросекунд после контрольной точки сигнал должен меняться с HIGH на LOW. А теперь представь, что пульт выдал команду чуть быстрее, чем обычно (довольно часто случается). Фронт импульса сдвинулся во времени, и теперь он происходит ДО контрольной точки! Выход с приёмника не совпадёт с шаблоном и система сбросится.
Чтобы этого не происходило, нужно размещать контрольные точки подальше от фронтов.

«Всё круто» — скажешь ты – «Но откуда мне взять контрольные точки?». Вот и я над этим долго тупил. В результате решил доверить расстановку точек тебе.
На устройстве есть джампер J1. Если при включении он замкнут – устройство будет тупо передавать через UART всё, что выдаёт ИК-приёмник. На другой стороне провода эти данные принимает моя программа, которая выдаёт на экран компа импульсы с TSOP’а. Тебе остаётся только мышкой раскидать по этому графику контрольные точки, и прошить их в EEPROM. Если возможности использовать UART нету, то на помощь приходит джампер J2. Когда он замкнут – устройство не выдаёт данные по UART, а складывает их в EEPROM.


Схема
Простая до безобразия. В качестве контроллера я взял ATTiny2313. Частота 4 мегагерца, от кварца, или внутренней RC цепочки.
На отдельный разъём выведены линии RX и TX для связи, и питание. Туда – же выведен RESET для того чтобы можно было перепрошивать МК, не вынимая из устройства.
Выход фотоприёмника подключается к INT0, он подтянут к питанию через резистор в 33к. Если будут сильные помехи, то можно поставить туда резистор поменьше, например, 10к.
На пинах D4 и D5 висят джамперы. Jumper1 на D5 и Jumper2 на D4.

К пину D6 подцеплен силовой модуль. Причём симистор я взял самый мелкий из тех, что у меня были – BT131. Ток у него 1А – не круто, но зато корпус не слишком большой — ТО92. Для мелкой нагрузки самое то. Опторазвязку я сделал на MOC3023 – у неё нет датчика пересечения нуля, а значит она подходит для плавного управления нагрузкой (здесь я это так и не реализовал).

Порт B почти полностью выведен на разъём – туда можно прицепить индикатор или ещё что-нибудь. Этим-же разъёмом я пользуюсь при прошивке девайса. Пин B0 занят светодиодом.

Питается всё это дело через LM70L05 и диодный мост. То есть на вход можно подавать переменное напряжение, например, с трансформатора. Главное, чтобы оно не превышало 25 Вольт, а то умрёт либо стабилизатор, либо кондер.

Плата получилась вот такая:


Да, она немного отличается от той платы, которая лежит в архиве. Но это не значит, что я сделал себе убер-продвинутую плату, а вам подсунул демо версию:). Напротив, моя плата имеет пару недостатков, которых нет в конечной версии: у меня не выведена на штырёк ножка RESET, и светодиод висит на PB7. А это не очень способствует внутрисхемному программированию.

Прошивка
Устройство может работать в двух режимах. В первом – когда J2 замкнут – оно просто передаёт импульсы с фотоприёмника в UART. С него и начнём:

UART работает на скорости 9600, т.е, при частоте 4МГц в регистр UBRR записываем 25.

…ждём, пока не дёрнется ножка фотоприёмника. Как только она опустилась (изначально-то она болтается на pull-up резисторе) мы запускаем таймер (TIMER/COUNTER1, тот, что на 16 бит) и врубаем прерывание INT0 на любое изменение входа – any logical change (ICS00 = 1). Таймер тикает… ждём.

Импульс с пульта кончился – выход с фотоприёмника взметнулся вверх, прерывание сработало. Теперь записываем в память значение таймера и сбрасываем таймер. Ещё нужно инкрементировать указатель записи, чтобы в следующем прерывании записать в другую ячейку памяти.

Ещё импульс… выход дёргается… прерывание… запись значения таймера в память… сброс таймера… указатель + 2 (мы пишем два байта за раз)…

И так будет продолжаться до тех пор, пока не станет ясно, что конец (оперативки) близок. Или, пока сигнал не кончится. В любом случае, мы стопорим таймер и отключаем прерывания. Потом, не спеша выкидываем всё, что насобирали, в UART. Или, если J2 замкнут – в EEPROM.

В конце можно затупить в бесконечный цикл и ждать ресета – миссия выполнена.
А на выходе получится последовательность чисел. Каждое из них – время между изменениями состояния выхода TSOP’a. Зная, с чего началась эта последовательность (А мы знаем! Это перепад с HIGH на LOW), мы можем восстановить всю картину:

После инициализации сидим и ждём, пока TSOP дёрнется. Как только это случилось – читаем из EEPROM первую точку, и в простом цикле тупим столько, сколько там написано. При этом время считаем пачками по 32us. Выйдя из ступора, проверяем – что-там на выходе приёмника.

Если выход не совпал с тем, что мы ожидали – это не наша команда. Можно спокойно дожидаться конца сигнала и начинать всё сначала.

Если выход соответствует нашим ожиданиям – загружаем следующюю точку и проверяем её. Так до тех пор, пока не наткнёмся на точку, время которой = 0. Это значит, что точек больше нет. Значит вся команда совпала, и можно дёргать нагрузку.

Вот так, получается, простенький алгоритм. Но ведь чем проще, тем надёжнее!

Софтина
Сначала я думал сделать автоматическое запоминание шаблона. То есть ты замыкаешь джампер, тыкаешь пультом в TSOP, а МК сам расставляет контрольные точки и складывает их в EEPROM. Потом стало ясно, что идея бредовая: более-менее адекватный алгоритм получится чересчур сложным. Или не будет универсальным.

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


Приучаем девайс отзываться на нужную кнопку пульта:

1) Замыкаем перемычку J1.

2) Подключаем UART. Если возможности его подключить нету, то замыкаем джампер J2. Тогда устройство будет скидывать данные в EEPROM.

3) Врубаем питание.

4) Если мы решили юзать UART, то запускаем софт и смотрим на строку состояния (внизу окошка). Там должно быть написано “COM порт открыт”. Если не написано, то ищем косяк в подключении и тыкаем кнопу «Подключить».

5) Берём пульт и тыкаем нужной кнопкой в TSOP. Как только девайс почует, что сигнал пошёл – загорится светодиод. Сразу после этого устройство начнёт передавать по UART (или писать в EEPROM) данные. Когда передача закончилась, светодиод гаснет.

6.1) Если работаем по UART, то жмём кнопу «Загрузить по UART». И радуемся надписи «Загрузил график…» в строке состояния.

6.2) Если работаем через EEPROM, то читаем программатором EEPROM память и сохраняем в *.bin файл. (Именно bin!). Потом нажимаем в программе кнопку «Загрузить.bin» и выбираем файл с EEPROM.

7) Смотрим на загрузившийся график – это сигнал с TSOP’a. На боковой панели есть ползунок – им можно менять масштаб. Теперь тыкаем мышкой по графику – ставим контрольные точки. Правой кнопкой точки удаляются. Только не нужно их ставить слишком близко к фронтам. Получается примерно так:


8) Нажимаем «Сохранить.bin» и сохраняем точки. Потом прошиваем этот файл в EEPROM. Так-как мы запихиваем время между двумя точками в 7 бит, то оно ограничено 4мс. Если время между двумя точками превысит это значение – программа откажется запихивать точки в файл.

9) Снимаем джамперы. Перезагружаем устройство. Готово!

Видео с испытаний