РадиоКот :: 24 канальный автомат световых эффектов на RGB-светодиодах и микроконтроллере Atmega16
Например TDA7294

РадиоКот >Схемы >Светотехника >Бегущие огни и световые эффекты >

Теги статьи: Добавить тег

24 канальный автомат световых эффектов на RGB-светодиодах и микроконтроллере Atmega16

Автор: Vitalkalm
Опубликовано 04.12.2012
Создано при помощи КотоРед.

Радиолюбитель сродни художнику - есть настроение творит, а если нет его, то и припой на паяльник даже не хочет липнуть… В такие моменты я, как и всегда прошу мою Музу, любимую Жену, подкинуть идею, сделать, так сказать, заказ какой-нибудь. "Слушай, - говорит, ведь у нас ночника нету. Хочу, чтоб светился моим любимым цветом – бирюзовым. И успокаивающими волнами-переливами разноцветными еще можно". Заказ принят!..  

Все собранные мною до сих пор схемы с применением микроконтроллеров Atmel (ну не люблю я PIC-и, и всё тут!) сводились к повторению уже существующих. Приходилось только немного подправлять имеющиеся исходники, которые были написаны на разных языках программирования. Но недавно я познакомился с простым языком, именуемым BASCOM.  Знакомство началось здесь со статьи  "Лабораторный блок питания с управлением от микроконтроллера". Немногим более 10 лет назад на мою долю приходилось прекрасное студенческое время, где на одном из курсов нам преподавали BASIC.  Поэтому в процессе решения поставленной мне задачки (мною же и поставленной :-)) оказалось, что BASCOM-AVR  для меня немного знаком. Посидев месячишко вечерами с BASCOM-ом вырисовалось следующее устройство.

 24 канальный автомат световых эффектов на RGB-светодиодах и микроконтроллере Atmega16.

 

Схема простая, я даже печатку не травил. Мозги устройства собраны на макетке "в дырочку". К выходам портов A, B и C подключены входы 3-х микросхем ULN2803, к которым, в свою очередь, подключены аноды светодиодов. Яркость свечения каждого из 24 каналов задается программным ШИМ-ом, 16 градаций яркости. Катоды каждого цвета соединены в 3 группы и получают питание от P-канальных полевиков, управляемых аппаратным ШИМ-ом с портов D.4, D.5 и D.6 через примитивные драйверы на КТ315 транзисторах, 32 градации яркости.

 

 

 

 Для управления устройством поставил 4 кнопки, повесив их через диоды на порт D.3. По низкому порогу на нем, срабатывает прерывание и переход на программу обработки прерываний от кнопок. Это сделано для того, чтобы при нажатии на любую из кнопок наступала моментальная реакция, не ожидая в цикле конца массива с эффектом.

Управляется так: 

•при зажатой S1, тремя остальными выбирается яркость цвета, т.е. производится управление аппаратным ШИМ,- (S2-красного, S3-зеленого, S4-синего). Интенсивность каждого цвета изменяется от нулевого значения до максимального, затем в обратную сторону, с паузами в точках экстремума. Так мне показалось удобней. Информация о яркости записывается в Eeprom для каждого цвета, каждого из эффектов;

•удержанием S2 выбирается скорость каждого эффекта, которая также записывается в Eeprom тоже для каждого из эффектов. Для визуализации изменения скорости предусмотрен отдельный массив Speders1. При выборе скорости не всегда удавалось визуально наблюдать ее изменение, т.к. при этом приостанавливается основной цикл и может оказаться, что все каналы погашены. Поэтому я специально зажег три канала, по интенсивности свечения которых можно наблюдать изменение скорости. 

   While Pind.1 = 0                ' пока удерживается кнопка S2

   Portb = &B0000001 

   Porta = &B0001000

   Portc = &B0000001;

•S3 переключает эффекты по кругу, а ее длительное удержание включает автоматический перебор эффектов в цикле от первого до последнего. Последний выбранный номер эффекта записывается в EEPROM, если же был выбран режим «авто», то при включении устройство стартует с режима «авто»;

•S4 –переключает цветовые режимы по кругу:

1.Цвет, установленный пользователем. 

2.Плавная смена цвета в пределах спектра, выбранного в 1-м режиме. Допустим, если был выбран малиновый (R-100%, G-0%, B-100%), то цвет меняется от синего к красному со всеми возможными их совместными комбинациями без участия зеленого.

3.Быстрая смена цвета в пределах спектра, выбранного в 1-м режиме.   

4.Плавная смена цвета по кругу (полный непрерывный спектр). 

6.Быстрая смена цвета по кругу (полный непрерывный спектр). 

7.Возврат к п.1

Выбранный цвет или цветовой режим также записывается в EEPROM.

В принципе, исходник постарался прокомментировать более-мение детально, так что должно быть все понятно. Но немного поясню.В основном цикле программы можно было бы для красивого структурирования использовать переходы в отдельный массив для каждого из эффектов, но так программа занимала больше памяти. Поэтому я использовал общий массив для всех эффектов с вычислением начальной ячейки чтения яркостей эффекта как у автора диммера:

     Eff = Effect - 3      ' здесь -3 это 3 программных эффекта

     N = Eff * 24

     N = N - 24

Для построения интересного эффекта "набегающие волны", используется массиве Pwm_rnd, в котором расположении яркостей дает плавный псевдо-случайный перелив всех 24 светодиодов.

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

В память контроллера удалось поместить 16 табличных эффектов. EEPROM для хранения эффектов не подходила, ввиду малого объема, а для записи режимов – в самый раз. Разобраться с командами для работы с EEPROM было удивительно просто. Из нескольких вариантов команд подошел такой:

Writeeeprom S , Effect

В программе это работает так. Допустим, если сейчас мы изменяем скорость S для 5-го эффекта (Effect=5), то после отпускания кнопки S2 значение S запишится в 5-й байт EEPROM.

Readeeprom S , Effect

- Считать значение скорости для 5-го еффекта.

Вообще в BASCOM-AVR очень обширный HELP со множеством примеров

Прошивать контроллер нужно файлом final.hex, установив фъюзы на тактирование от внешнего кварца на 16МГц. Я поставил кварцевый резонатор на 20МГц специально, так мерцание диодов при работе ШИМ-ов не заметно вовсе.

При первом запуске все будет работать, но в EEPROM будут нули. После перебора и настройки параметров скорости и цветового оформления всех эффектов, эти параметры сохранятся в память контроллера.   

Сначала написания программы усиленно использовался PROTEUS, но когда количество каналов возросло до 24, он начал сильно тормозить. В момент, когда я задействовал аппаратный ШИМ, PROTEUS вообще помер… Пришлось сваять макет, и отлаживать дальше на нем. Поэтому за время написания программы счетчик количества программирований моей Atmega16 перевалил за 1000…

 

Печатные платы и схемы сделаны в DipTrace:

    

Видео

Да прибудет ваша Муза с Вами! Творческих успехов!

ЗЫ.При написании программы использовались материалы:
https://avr.ru/
Светодиодный диммер
Светодиодная снежинка


Файлы:
Прошивка, исходник
Схемы и платы в DipTrace
Схема контроллера


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

54 8 0
3 0 1