Принцип работы
Прежде чем Tibbit #26 сможет начать нормальную работу, его необходимо сбросить и инициализировать.
После инициализации Tibbit управляется через набор регистров. Доступ к регистрам выполняется по SPI с помощью транзакций чтения и записи по SPI.
Модуль поддерживает две команды, которые выдаются через регистр команд: приём (запись) ИК-данных и передача (воспроизведение) ИК-данных.
Tibbit #26 рассматривает ИК-данные как последовательность интервалов «ИК-свет включён» и «ИК-свет выключен». «Умного» анализа данных не выполняется. При записи входящего ИК-сигнала Tibbit #26 просто измеряет времена включённого и выключенного состояния и выдаёт данные в виде массива измеренных длительностей. Измеренные длительности представляют демодулированный ИК-сигнал (то есть сигнал без несущей частоты). Длительности включённого и выключенного состояния выражаются в числе периодов тактовой частоты модуляции.
Модулированный и немодулированный входящий ИК-поток
Tibbit #26 может работать с ИК-приёмниками, которые выдают ИК-данные без изменений, включая частоту модуляции. Он работает и с приёмниками, которые отфильтровывают несущую. Какой входящий ИК-поток ожидается, определяет бит опции 4 в регистре команд.
Если Tibbit настроен на запись модулированного входящего ИК-потока, он демодулирует входящий сигнал. Частота модуляции отфильтровывается и измеряется (с усреднением), а соответствующее значение делителя сохраняется в регистрах делителя несущей. Связь между значением делителя и частотой модуляции такая:
modulation_frq = 12Mhz / divider_value
Если Tibbit #26 настроен на запись демодулированного входящего потока RX, он ожидает данные без несущей частоты. В этом случае перед началом записи ваша программа должна записать в регистры делителя несущей значение, соответствующее ожидаемой частоте модуляции.
В обоих случаях длительности включённого и выключенного состояния в информационном (демодулированном) сигнале измеряются в периодах несущей частоты, а полученные данные сохраняются в буфере данных RX. Длину записанных данных (в байтах) можно узнать из регистров длины RX.
Получив команду записи данных, Tibbit ждёт первого состояния «ИК-свет включён». Конец данных определяется по тайм-ауту. После окончания записи бит 0 регистра состояния устанавливается в 1. Поэтому программа может опрашивать этот бит, чтобы узнать, когда данные готовы (и было ли что-нибудь принято).
Выходные линии
ИК-приёмники по-разному выдают состояния «ИК-свет включён» (обнаружен) и «ИК-свет выключен» (не обнаружен). Многие приёмники выдают HIGH, когда ИК-свет выключен, и LOW, когда он включён. Такие выходные линии мы называем «нормальными».
Некоторые приёмники работают наоборот: LOW соответствует отсутствию ИК-света, а HIGH - его наличию. Такие выходные линии мы называем «инвертированными». Бит опции 2 регистра команд позволяет задать тип подключённого ИК-приёмника.
Сохраняя записанный ИК-сигнал, не забудьте сохранить не только данные из буфера RX (в объёме, заданном регистрами длины RX), но и значение делителя из регистров делителя несущей.
Исходящий ИК-поток
Данные для исходящего ИК-потока ваша программа должна подготовить в буфере данных TX. Формат данных такой же, как у буфера данных RX. Учтите, что буферы RX и TX физически разделены, поэтому, чтобы сразу воспроизвести только что записанный сигнал, данные всё равно нужно скопировать из буфера RX в буфер TX.
Перед отправкой команды «начать передачу данных» программа должна задать регистры делителя несущей. Как объяснялось выше, информацию о частоте модуляции следует хранить вместе с самими ИК-данными.
Линии управления
У ИК-излучателей различается полярность управляющего сигнала. Многие излучатели включают свой ИК-светодиод, когда на линии управления LOW. Такие линии управления мы называем «нормальными».
Некоторые излучатели включают ИК-светодиод, когда на линии управления HIGH. Это инвертированная линия управления. Бит опции 3 регистра команд позволяет задать тип подключённого ИК-излучателя.