Устройство для управления с 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"
Мне кажется Вас завалят плюсами когда весь процесс изготовления будет доступен любому моделисту .
С уважением спасибо.
У меня самодельный.
Подрубить программатор, поставить драйвер для него.
Далее используем программу для прошивки, самая популярная AVRDUDE.
Как прошить контроллер, лучше посмотреть в интернете, очень много статей.
Например http://www.123avr.com/07.htm
Там в конце статьи показан самодельный простой пограмматор, я себе его тоже делал, вполне работает.
Самый простой программатор.Нужен только COM-порт на компе.Возможно будет работать и с эмулятором порта,я не проверял )
1. качаем из этой сталью файл (RC_Light_Attiny13_1.rar) и распаковываем его.
2. качаем от сюда программы Sprint-Layout 5.0 (Sprint-Layout5.0.rar), распаковываем и запускаем её.
3. открываем через нее фай из RC_Light.Lay, или изменённый файл под мой размер элементов (RC_Light1.lay).
4. распечатываем на лазерном принтере в зеркальном положении, на тонкой глянцевой фотобумаге для струйного принтера, в окне предпросмотра нужно убрать галочки отображения слоём кроме первого М1.
5. Подготавливаем кусочек омеднённого текстолита, зашкурившем и обезжириваем.
6. Включаем утюг, прикладываем нашу распечатанную бумагу рисунком к текстолиту и сверху жмём горячим утюгом (аккуратно), держим так пока бумага не начнёт желтеть от перегрева. Дальше даём остынуть и аккуратно отдираем бумагу от текстолита, проверяем все ли дорожки хорошо перенеслись, если нет то подмазываем лаком.
7. Когда всё проверенно, разводим хлорное железо (1 столовая ложка на 80-100грамм), кидаем туда плату), я делал в баночки, зарывал крышку и периодически встряхивал, через 30-40 минут плата протратится.
8. Отпиливаем всё лишнее
9. Сверлим отверстия и смываем чернила с дорожек (я смываю женским лакоснимателем). Всё плата готова.
10. Закупаем элементы.
Сверить количество элементов (светодиоды СМД в этом списке не такие нужны), помимо этого понадобится, штырьковые разъемы 2.54 между ножками и LTP разъём на 25 пин, в материнскую плату.
11. Перед тем как паять проверьте, все ли дорожки хорошо протратились, это удобно сделать на просвет.
12. Запаиваем элементы и перемычки, в зависимости какой вариант вы выбрали.
13. Собираем программатор, я не стал мудрить. По факту это и вовсе не программатор.
14. Скачиваем программу PonyProg, (setup.exe),
15. Настраиваем и вшиваем как на видео.
(КакзапрограммироватьмикроконтроллерATtiny13.mp4)
или
Единственное отличие это то что нужно будит вшивать отдельно Flash и EPROM.
Подключаем и радуемся.
Решение с EEPROM очень крутое. Недавно вычитал, что для этих контроллеров есть поддержка Arduino'вского бутлоадера. То есть при желании можно вообще в Arduino IDE компилировать исходный код и заливать его.
С резистором R2 история такая. Я когда тестировал на макетной плате свою раннюю разработку RC_Switch, имитировал потерю сигнала выдёргиванием сигнального провода от приёмника. Нога контроллера оказывалась в воздухе и на неё наводились помехи с соседних ножек. И получалась какая-то фигня. Целый день тогда угробил, чтоб понять почему сигнала нет, а контроллер себя периодически ведёт, как будто он есть. Думал ошибка в коде.
Если нога висеть в воздухе не планируется, то его можно не ставить. У меня он на всякий случай :)
А почему студия 4.19? У нее какие-то преимущества при работе на асме?
потом мой мосг завис))))
AVR Studio 4.19 - бесплатная программа от Atmel - весит 130Мб. (именно 4.19 т.к. 5.0 весит уже 600Мб )
Скачиваешь, устанавливаешь, запускаешь проект. Там простой текстовый редактор. В нём модифицируешь текст, как описано выше, и жамкаешь кнопку "Assemble" или (F7) на клаве.
Если всё нормально то в нижнем окне наблюдаем зелёную точку и надпись: "Assembly complete, 0 errors. 0 warnings"
В папке проекта получаем новый файл "RC_Light_Attiny13_1.eep" для прошивки.
сложного вообще ничего нет.
Я думаю, со временем мой товарищ тоже отдаст прошивку в открытый доступ.
http://hobby.msdatabase.ru/project-updates/theresultsofoursurvey/modesw
А спичечный коробок еще с олимпиады 1980 г.)?
Полезен труд сей есть.