Устройство для управления с RC пульта подсветкой на 3-и выхода и превращения самолёта/ парохода/ вездехода в новогоднюю ёлку :)
Месяц назад разработал для себя устройство управления освещением для самолёта, т.к. уже становится темно довольно рано и летать приходится уже в сумерках. Статью писать не хотел - было лениво, но увидел интерес народа к теме и решил сделать усилие.



Используется "народный" контроллер ATtiny13. Главная особенность данного устройства в возможности несложной перенастройки режимов освещения/мигания под свои нужды о чём будет сказано ниже.
Имеет 3-и выходных канала и 5 режимов работы которые хранятся в EEPROM.
Может работать от крутилки, в этом случае режим работы устанавливается в соответствии с положением крутилки.
Также устройство можно "повесить" на тумблер, тогда включаемый режим выбирается кнопкой на устройстве:
1. Включить тумблер - запустится первый режим.
2. Нажатием кнопки на устройстве, выбираем требуемый режим (цикличное переключение) , при этом он запоминается в EEPROM.
3. Последующее включение тумблера будет выбирать этот режим.
4. Выключение тумблера выбирает всегда 0 режим. (по умолчанию в этом режиме на всех выходах нули, но его можно редактировать, как и любой другой)

Программа написана на Ассемблере в AVR Studio 4.19.

При прошивке надо зашить 2-а файла:
В одном Программа - "RC_Light_Attiny13_1.hex"
В другом Данные (режимы работы) EEPROM "RC_Light_Attiny13_1.eep"
Фьюзы не трогаем, при программировании оставляем "по умолчанию" как было.
При изменении режимов работы достаточно перезашить только файл EEPROM.


Теперь о том как менять режимы работы.


Открываем проект в AVR Studio и в конце текста программы находим такой код:

;Ограничение на данные - 50 байт (вместе с адресами - 55 байт)
;1 шаг - 0,05с

;Таблица режимов
REGIM0: .DB 0
.DB 0
.DB 0
REGIM1: .DB 3, 5, 7, 45, 0
.DB 11, 21, 0
.DB 1, 11, 21, 0
REGIM2: .DB 255, 0
.DB 10, 20, 0
.DB 10, 20, 0
REGIM3: .DB 20, 40, 0
.DB 255, 0
.DB 20, 40, 0
REGIM4: .DB 5, 10, 0
.DB 10, 20, 0
.DB 20, 40, 0

Нас интересуют цифры после .DB

Как видно, всего имеется 5 режимов: 0, 1, 2, 3, 4.
Каждый режим имеет 3-и строки оканчивающиеся нулём. Каждая строка - данные для работы одного канала. Например:
REGIM4: .DB 5, 10, 0 - 1 канал
.DB 10, 20, 0 - 2 канал
.DB 20, 40, 0 - 3 канал
Важно! 0 - признак конца строки (конец периода для канала)

Если канал должен быть всё время погашен - строка состоит только из цифры 0 (например режим 0 - все каналы погашены)
Если канал должен быть всё время включен - записыаем 255, 0 (например режим 2, первый канал: .DB 255, 0)

Дальнейшую логику работы илюстрирует рисунок работы Режима 1.
REGIM1: .DB 3, 5, 7, 45, 0
.DB 11, 21, 0
.DB 1, 11, 21, 0
Скажу только, что каждое число, это время переключения канала в противоположное состояние, и изначально предполагается, что все каналы включены.
Число 1 (первое число в третьем канале) - сразу на старте периода переключает канал (он не загорается). Я сперва думал, (по логике работы программы) что он будет коротко моргать в 0,05сек, но пограммный Баг стал Фичей :)





Надо отметить, что можно создавать любые периодичности включения/выключения. Есть только 2-а ограничения:
1. Время периода одного канала не больше приблизительно 12 секунд (255*0,05с).
2. Запись работы всех режимов должна быть не больше 50 байт (50 чисел) Например в данном примере используется 40 байт. (ограничение ОЗУ микроконтроллера)

После редактирования компилируем проект и зашиваем файл EPROM с изменёнными данными RC_Light_Attiny13_1.eep

p.s.
При пропадании сигнала все каналы включаются не зависимо от текущего режима.
Диод на питании служит для гашения излишнего напряжения при выдаче регулятором 5,5 - 6 вольт.
Транзисторы используемые у меня на плате IRLML0030

Вроде бы ничего не забыл. В архиве полный проект с исходниками и плата в Sprint Layout 5.1

(RC_Light_Attiny13_1.rar)
======================================================

Новая версия прошивки от 05.02.2015 (RC_Light_Attiny13_2.rar)
- Добавлена возможность автономной работы устройства без подачи на него канального импульса (только питание).
Переключение режимов поизводится кнопкой на устройстве.

- При нормальной работе (от приёмника), при работе с тумблером, последний выбранный (кнопкой) режим запоминается в EEPROM, во время переключения тумблера из MAX в MIN. При последующем новом подключении устройства, этот режим будет сразу выбираться при включении тумблера.
======================================================

Версия прошивки от 05.08.2015 (RC_Light_Attiny13_3.rar)

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

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

работа в режиме тумблера:
1. Включить тумблер - запустится первый режим (или режим, который был пред этим запомнен).
2. Нажатием кнопки на устройстве, выбираем требуемый режим (цикличное переключение) , при этом он запоминается в EEPROM
(!!! запоминание происходит в момент переключения тумблера в MIN).
3. Последующее включение тумблера будет выбирать этот режим.
4. Выключение тумблера выбирает всегда 0 режим. (по умолчанию в этом режиме на всех выходах нули, но его можно редактировать, как и любой другой)
======================================================

Версия прошивки от 06.11.2015 (RC_Light_Attiny13_4.rar)

1. Добавлены 2-а выходных канала.
- вместо кнопки (4 канал)
- на ножке Reset - 1 пин (5 канал), для этого надо запрограммировать Fuse "RSTDISBL".

2. Переключение всех режимов работает только с пропорциональным каналом (стик, крутилка).
При отсутствии сигнала включаются все каналы.

2. Убрано ограничение в 50 байт для записи данных всех режимов.
Теперь есть ограничение 45 байт для записи одного режима. (режимы хранятся в памяти программ
и подгружаются в ОЗУ в момент переключения режима). Если 5 канал не используется - данные для
него можно не записывать.

3. Таблица режимов теперь выглядит иначе: (Пример)

;Таблица режимов
REGIM0: .DB 0, 0, 0, 0, 0

REGIM1: .DB 11,20,0, 0, 0, 0, 0

REGIM2: .DB 255,0, 11,20,0, 255,0, 0, 0

REGIM3: .DB 255,0, 255,0, 11,20,0, 255,0, 0

REGIM4: .DB 255,0, 255,0, 255,0, 11,20,0, 255,0

Данные режима теперь записаны в одной строке (важно!).
Остальное кодирование осталось прежднее. (кодирование каждого канала заканчивается нулём -
признак конца данных канала).

4. После компилирования пошивается только 1 файл: "RC_Light_Attiny13_4.hex"