[Перевод] Трёхкомандное ДУ с программой из 290 16-битных слов
Устройство на ATtiny13, управляемое программой из 290 16-разрядных слов, написанной на ассемблере, запоминает коды шести кнопок пульта ДУ и включает/выключает три нагрузки. Схема:
Стандартный ИК-приёмник TSOP1740 использует инверсную логику, и это учтено в программе. Принимаемые сигналы вызывают прерывание INT0. Резистор нужен для отвязки ИК-приёмника от микроконтроллера во время заливки прошивки.
Порядок обучения устройства кодам кнопок следующий. Включаем питание при нажатой кнопке на входе PB3 (затем её можно отпустить). Первая нагрузка кратковременно включится и тут же выключится. Нажимаем на пульте кнопку, которой желаем включать первую нагрузку. Как только пульт отправит один и тот же код два раза (это происходит, если держать кнопку нажатой хотя бы пару секунд), первая нагрузка включится на пять секунд и отключится. А вторая включится кратковременно и тоже тут же отключится. Обучаем устройство коду кнопки включения второй нагрузки. Затем третьей. Теперь последовательно проделываем то же с кодами кнопок, которыми желаем отключать нагрузки. Программа запишет коды в ЭСППЗУ, теперь надо выключить и включить питание, но кнопку на входе PB3 не нажимать. Устройство перейдёт в рабочий режим, в котором можно управлять нагрузками.
При проверке нагрузками служат светодиоды, включённые через резисторы. Убедившись, что всё работает, подключаем к выходам ключи, управляющие реле. Как видно из схемы любого из трёх ключей, индикаторные светодиоды с резисторами для удобства оставлены на месте:
Вообще-то, там должны быть NPN-транзисторы, включённые эмиттерами к общему проводу, но у автора работает и так. Нагрузками могут служить, например, светодиодные лампы с цветовыми температурами в 2700, 4000 и 6400 К. Вы сможете переключать их вручную согласно циркадным ритмам, не полагаясь на автоматику.
Код на ассемблере: без HTML-форматирования и с таковым.
Подтверждение, что удалось уложиться в 290 16-битных слов:
gavrasm Gerd's AVR assembler version 3.5 (C)2015 by DG4FAC
----------------------------------------------------------
Source file: 12_IR-Rx_Switch.asm
Hex file: 12_IR-Rx_Switch.hex
Eeprom file: 12_IR-Rx_Switch.eep
Compiled: 23.11.2016, 23:23:05
Pass: 2
1: ;
2: ; ***************************************
3: ; * IR-Switch 3-Channel with ATtiny13 *
4: ; * (C)2016 by www.avr-asm-tutorial.net *
5: ; ***************************************
...
Program : 290 words.
Constants : 0 words.
Total program memory: 290 words.
Eeprom space : 13 bytes.
Data segment : 29 bytes.
Compilation completed, no errors.
Compilation ended 23.11.2016, 23:23:05