Устройство для управления с 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"
Используется "народный" контроллер 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"
Длительность периода при этом не уменьшится. Длительность периода это разрядность таймера канала (8 бит) умноженное на шаг таймера (255* 0,05с). Длительность периода можно уменьшить, уменьшив шаг, соответственно можно повысить точность (сейчас точность 0,05с).
Про потерю сигнала, ищите в коде
sbrc TTB,Lost_bit ;Если нет потери сигнала1
ldi var1,0b00111101
поменяйте 0b00111101 на 0b00100000 и при потере сигнала будет загораться только 5 канал, а остальные погаснут.
Если поменять ldi var1,0b00111101 на ori var1, 0b00100000 то при потере сигнала включится 5 канал, а остальные каналы останутся работать по режиму, который был установлен перед потерей сигнала.
(Тут под потерей сигнала имеется ввиду приёмник без функции FailSafe. При потере сигнала перестают идти PWM импульсы c приёмника на машинки.)
В коде (в начале):
;# define NewR ;Новый режим при потере сигнала
;Константы
.equ c_NewRegim=1 ;Режим при потере сигнала
Если убрать первый ";" в строке ";# define NewR ;Новый режим при потере сигнала" (раскомментировать строку) и откомпилировать проект - то при потере сигнала будет устанавливаться режим заданный в строке " .equ c_NewRegim=1 ;Режим при потере сигнала " (нумерация начинается с 0)
Про принудительную установку канала (то что я писал перед этим) всё остаётся в силе.
(RC_Light_Attiny13_4.rar)
Использование ноги Reset затрудняет перепрошивку для изменения режимов (я когда для себя подбирал режимы - перепрошил их раз 20).
Если это всё не пугает, то готов выслушать конкретное предложение сколько сделать каналов и сколько оставить режимов.
Просмотрел ваши статьи, есть предложения, если не трудно, пожалуйста сделайте на этом контроллере регулятор для коллекторных двигателей. Как я понимаю нужно добавить ШИМ и Н мост... если хватит памяти.. или без Н моста но тогда реверса не будет...лучше конечно с реверсом!
Ответте пожалуйста.. Зараннее спасибо!!!