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

Так как ATtiny13 не имеет аппаратного UART, мы будем отправлять данные через программный UART.
Проект протестирован с ATtiny13a @ 9,6 МГц, VCC = 5В и настройкой последовательного порта 8/N/1 на скорости 57600 бод (наименьшая частота ошибок во время тестов). Код находится на Github здесь.
Инфракрасная связь — теория
Инфракрасный передатчик состоит из светодиода, излучающего инфракрасное (ИК) излучение. Поскольку инфракрасное излучение невидимо для человеческого глаза, оно идеально подходит для использования в беспроводной связи.
Электронное дистанционное устройство в основном состоит из ИК-передатчика или ИК-приемника. ИК-передатчик мигает инфракрасным светодиодом, который превращается в команду, принимаемую модулем ИК-приемника. Во время передачи инфракрасный сигнал модулируется ШИМ (широтно-импульсное модулирование).
Наиболее часто используемая частота модуляции составляет около 38 кГц (есть также 36 кГц, 37,9 кГц, 38 кГц и 40 кГц).
Дальность передачи (расстояние между передатчиком и приемником) может составлять до 45 м, при этом наиболее распространенные инфракрасные приемники имеют дальность связи 45 м.
ИК-приемник состоит из приемного модуля (фотодиода, фототранзистора). На стороне приемника промодулированный сигнал демодулируется, и получается диаграмма, как показано на диаграмме ниже.
Единственным недостатком ИК-связи является то, что такая ситсема ограничена работой в пределах прямой видимости.
Протокол NEC — характеристики
- 8-битный адрес и 8-битная длина команды.
- Доступен расширенный режим, удваивающий размер адреса.
- Адрес и команда передаются дважды для надежности.
- Импульсная дистанционная модуляция (PDM)
- Несущая частота 38кГц.
- Битовое время 1,125 мс или 2,25 мс.
- Логический «0» — пакет импульсов 562,5 мкс, за которым следует интервал 562,5 мкс, с общим временем передачи 1,125 мс.
- Логическая «1» — пакет импульсов 562,5 мкс, за которым следует интервал 1,6875 мс, с общим временем передачи 2,25
Протокол NEC — модуляция
- Пакет импульсов в начале 9 мс (в 16 раз больше длины пакета импульсов, используемый для логического бита данных)
- Пауза 4,5 мс
- 8-битный адрес принимающего устройства
- 8-битная логическая инверсия адреса
- 8-битная команда
- 8-битная логическая инверсия команды
- Заключительный пакет импульсов 562,5 мкс, показывающий конец передачи сообщения.
Необходимые компоненты
- ATtiny13 – плата разработки
- Конвертер USB-UART
- ИК-приемник (38 кГц) — TSOP31238 (TSOP1738)

Принципиальная электрическая схема
Прошивка
Программный код данного проекта написан на C, который можно скомпилировать с помощью avr-gcc. Более подробная информация о том, как скомпилировать этот проект, находится здесь.
#include "ir.h" #include "uart.h" int main(void) { uint8_t addr, cmd; /* setup */ IR_init(); /* loop */ while (1) { if (IR_read(&addr, &cmd) == IR_SUCCESS) { uart_puts("addr="); uart_putu(addr); uart_putc(','); uart_puts("cmd="); uart_putu(cmd); uart_putc('\n'); } } }
