24 канальный автомат световых эффектов на RGB-светодиодах и микроконтроллере Atmega16
Автор: Vitalkalm Радиолюбитель сродни художнику - есть настроение творит, а если нет его, то и припой на паяльник даже не хочет липнуть… В такие моменты я, как и всегда прошу мою Музу, любимую Жену, подкинуть идею, сделать, так сказать, заказ какой-нибудь. "Слушай, - говорит, ведь у нас ночника нету. Хочу, чтоб светился моим любимым цветом – бирюзовым. И успокаивающими волнами-переливами разноцветными еще можно". Заказ принят!.. Все собранные мною до сих пор схемы с применением микроконтроллеров 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: Да прибудет ваша Муза с Вами! Творческих успехов!
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
|
||||