130-Многоканальный автомат управления нагрузками на ATtiny2313

Автор: | 05.05.2016

Многоканальный автомат управления нагрузками собран на ATtiny2313 и позволяет в автоматическом режиме управлять состояниями 8-ми каналов (Out_0 — Out_7). На каждом из каналов формируется ШИМ-сигнал, скважность которого можно изменять по прописанному Вами алгоритму (программе). В устройстве можно использовать до 8-ми программ каналов. Программу можно зациклить (бесконечное воспроизведение) или можно воспроизвести только один раз. Программу можно запустить ИК-пультом, по команде UART или выбрать следующую программу нажатием кнопки Next Prog на устройстве. Устройство имеет 3 выходные линии Prog Numb, на которых двоичным кодом отображается, номер текущей программы. Кроме того, в момент воспроизведения программы устанавливается логическая единица на выводе Cycle. После старта устройства автоматически запускается на воспроизведение первая (00_prog.txt) программа.

traffic_light_scheme

На схеме не показаны защитные резисторы в выходных линиях (по 300 Ом). Их желательно установить, а для случая подключения светодиодов напрямую к ножкам МК – они обязательны.

UART
Автомат управления сделан таким образом, чтобы его можно было включить в комплекс устройств, управляемых по UART (9600, 8, 1stop, noparity). Для совместимости с устройствами блога, программы запускаются по факту прихода в UART соответствующего символа заглавной буквы латиницы (А – программа 0, B — 1, C — 2, … H — 7). При запуске программы соответствующая буква будет передана на выход UART.

Программы изменения сигнала на выходах
— записываются во Flash память микроконтроллера при программировании и в дальнейшем изменяться не могут (только при повторном программировании). Каждая из восьми программ, для удобства, прописана в отдельном файле. Файлы расположены в папке исходника traffic_light_source\progs\. Имена файлов программ имеют вид: 00_prog.txt, 01_prog.txt, … 07_prog.txt (8 файлов).

В файле программы изменения каналов прописываются покадрово, при этом можно задать время смены кадров и количество используемых выходных линий в кадре.

Вот так выглядит содержимое файла программы-изменения:

// ПРОГРАММА-ИЗМЕНЕНИЯ КАНАЛОВ
// — каналы обновляются покадрово с заданным периодом между кадрами
// — кадр состоит из заданного количества значений-уровней каналов
// — значения лежат в пределах 0-255 (0-нет сигнала 255-максимум)
// — количество кадров может быть произвольным
// — программа должна заканчиваться одним из значений-меток:
// 253 — остановить программу (разовое воспроизведение)
// 254 — зациклить программу (непрерывное воспроизведение)
// соответственно, значения 253 и 254 запрещено использовать в кадрах

// ПАРАМЕТРЫ ВОСПРОИЗВЕДЕНИЯ:
100  // — период межу кадрами в сотых миллисекунды (1-255) 35 = 0,35 Сек
8    // — количество линий, участвующих в программе (1-8)

// КАДРЫ ЗНАЧЕНИЙ НА ВЫХОДНЫХ ЛИНИЯХ
// Далее прописываются кадры значений на линиях
//Out_0, Out_1, Out_2, Out_3, Out_4, Out_5, Out_6, Out_7
// количество значений в каждом кадре должно соответствовать
// значению заданному в параметрах воспроизведения

// Кадр 0
000, 000, 000, 000, 000, 000, 000, 000 // все линии выключены
// Кадр 1
128, 128, 128, 128, 128, 128, 128, 128 // средняя яркость на линиях
// и так далее столько, сколько нужно кадров
255, 255, 255, 255, 255, 255, 255, 255 // все линии на максимум
000, 000, 000, 000, 000, 000, 000, 000
010, 020, 030, 040, 050, 060, 070, 080
000, 255, 000, 255, 000, 255, 000, 255
// ….

// МЕТКА КОНЦА ФАЙЛА
// 253 — остановить программу (разовое воспроизведение)
// 254 — зациклить программу (непрерывное воспроизведение)
254

Каждая программа может иметь произвольное количество кадров и используемых выходных линий.
Всего, для всех программ, суммарно можно использовать до 1024 ШИМ-значения.
Если нужно меньше восьми программ, то лишние файлы описания нужно очистить (сохранить пустыми). Сами файлы должны остаться, иначе компилятор будет выдавать ошибку.

 Алгоритм создания устройства, со своими программами изменения каналов следующий:
1 прописываем свои 8 программ в соответствующих файлах 00_prog.txt, 01_prog.txt, … 07_prog.txt в папке исходника traffic_light_source\progs\
2 запускаем среду программирования Algorithm Builder (algrom.net)
3 открываем исходник traffic_light_source\ traffic_light.alp
4 компилируем исходник (Ctrl+F9)
5 в папке исходника забираем файл прошивки traffic_light_source\ traffic_light.hex
6 прошиваем полученным HEX-файлом ATtiny2313
7 устанавливаем фьюзы (внутренний задающий генератор на 8МГц) Low:0xE4 High:0xDF Ext:0x01
— готово!

ИК-пульт
Для того чтобы использовать ИК-пульт, его кнопки необходимо предварительно изучить. В пульте используется 9 кнопок. Первые 8 выбирают соответствующую программу, 9-я – переключает следующую программу.

Процедура изучение пульта стандартна для моих устройств:
1 –нажать (и удерживать)  кнопку «Learn»
2 – сбросить устройство либо передернуть питание (при этом индикаторный светодиод должен несколько раз моргнуть)
3 – отпустить кнопку «Learn»
4 – последовательно нажать на пульту 9 кнопок
5 – после этого устройство автоматически начинает работать в штатном режиме

Каждое нажатие кнопки на пульте будет подтверждаться индикаторным светодиодом.
Если какая либо кнопка не нужна в устройстве, то в процессе ее изучения нужно нажать ранее изученную клавишу.

traffic_light.zip (1582 Загрузки)

Заключение
Вообще, устройство создавалось для формирования сигналов модели светофора в различных режимах, но использовать данное устройство можно гораздо шире. Например, светодиодные рекламные стенды с несложной анимацией, устройства автоматики, устройства управляемые ИК-пультом…
В планах сделать модификацию данного устройства выкинув UART, IR,  Prog Numb взамен использовать освободившиеся линии как ключи для запуска отдельных программ – по моему это должно быть востребовано.

(Visited 11 289 times, 1 visits today)

130-Многоканальный автомат управления нагрузками на ATtiny2313: 19 комментариев

  1. GetChiper Автор записи

    Да, видел сообщение по 121 — постараюсь добраться и помочь.

  2. siema

    И мне бы помощь по 121…

  3. siema

    Упс! О чем давно мечтал и просил!!!! Пошел читать мат.часть.

  4. admin Автор записи

    Согласен.
    Логичней чтобы оставался код программы.
    нужно будет поменять по свободе…

  5. sorema

    Допустим программа №5 разовая и она включает программу подсветки, программа подсветки работает, а индикатор показывает «0», т.е. совсем другую программу. Тоже нелогично.
    Пусть, например, после окончания разовой программы индикатор будет показывать какой-нибудь неопределенный знак или лучше пусть его яркость становится в два раза слабее. Так не будет путаницы в номерах программ.

  6. admin Автор записи

    Как-то об этом не особо задумывался.
    Вроде как логично, программа закончилась — индикатор сбросился…

  7. sorema

    Индикатор Prog Numb, выходы работают четко по программам.

  8. admin Автор записи

    Какой индикатор имеется в виду? Prog Numb? Или выхода?

  9. sorema

    Поясните, пожалуйста, так задумано или это ошибка, чтобы после разового (метка 253) воспроизведения любого кадра индикатор устанавливался на ноль?

  10. sorema

    Тогда возможностей будет еще больше. А если взять контроллер побольше, увеличить количество линий до 12 (в том числе для совместимости со старыми конструкциями), то можно будет не зная искусства программирования «текстовым редактором» заставить робота работать. Ну а светоэффекты можно будет менять бесконечно.

  11. admin Автор записи

    Постараюсь эту тему не бросать. Например, есть идея считывать файлы-сценарии эффектов с SD-карты.

  12. sorema

    Спасибо. Устройство работает (как и всегда) безупречно. Удивительно, что так мало комментариев, а ведь у этого автомата огромное количество применений.
    Жаль, если не будет развития этой темы.

  13. admin Автор записи

    С модификациями пока сложно — времени не хватает…
    По поводу замедления — во вкладке PWM_Out есть подпрограмма _Frame_Work
    она вызывается каждый раз для смены кадра (в зависимости от значения частоты вызовов)
    если вызов этой подпрограммы делать через раз (или сколько нужно замедлить), то соответственно частота смены будет уменьшатся

  14. sorema

    Спасибо за быстрый ответ, но к сожалению не узнал, что хотел. Видимо неправильно задал вопросы. А хотелось бы знать следующее:
    Вы писали:
    — «В планах сделать модификацию данного устройства выкинув UART, IR, Prog Numb взамен использовать освободившиеся линии как ключи для запуска отдельных программ»
    — будет ли это реализовано?
    Вы писали:
    — «2.55 секунды — это максимальная задержка между кадрами.
    Если нужно больше:
    — можно прописать несколько одинаковых кадров по 2.55 секунды
    — можно подправить программу на предмет частоты смены кадров».
    Где подправить программу и возможно ли сделать задержку, например в 20 секунд?

  15. admin Автор записи

    По ключам и так работает (читать раздел статьи «UART»)

    Задержка меняется в файле программы-изменения

    // ПАРАМЕТРЫ ВОСПРОИЗВЕДЕНИЯ:
    100 // — период межу кадрами в сотых миллисекунды (1-255) 35 = 0,35 Сек
    8 // — количество линий, участвующих в программе (1-8)

    соответственно она может быть от 10мСек до 2.55 Сек

    Количество линий необходимо указать для того чтобы при компиляции программы правильно интерпретировать данные в файле программы-изменения

  16. sorema

    Отличный проект, если еще реализовать запуск программ по ключам
    (варианты выбора как в 087-ATtiny2313 SD Card Talking Device), то получится
    просто уникальный и универсальный device для управления различными
    механизмами, подсветками и т.д. — это просьба.
    И вопросы: — в каком месте программы меняется задержка между кадрами и
    какая максимальная задержка?
    — для чего указывается количество линий, участвующих в программе? Спасибо!

  17. admin Автор записи

    2.55 секунды — это максимальная задержка между кадрами.
    Если нужно больше:
    — можно прописать несколько одинаковых кадров по 2.55 секунды
    — можно подправить программу на предмет частоты смены кадров

  18. Andry Smart

    2.55 секунды самая большая задержка?

  19. Олег-Перевышин

    Очень классная штука! Получается универсальный генератор эффектов! Спасибо!

Добавить комментарий