Светодиодная новогодняя елка своими руками. Отличная маленькая светодиодная ёлка Светодиодная елочка на микроконтроллере

Возможно один из немногих DIY-наборов для пайки, а результате которого получается полезный продукт (наборы для сборки полноценных приборов в учет не берем), который после сборки не отправится лежать в темном углу, а будет использоваться по назначению, особенно, если к сборке подключить ребенка.
В обзоре описание DIY 3D-елки и инструкция по сборке.

После сборки конструктора должна получиться 3D-ёлка, мигающая светодиодами 3 цветов, которая может работать как от 3 батареек AA, так и питаться от USB.

Набор упакован в пакетик с пупыркой, дополнительно замотан во вспененную пленку. Заказывал у этого продавца () несколько раз, все доходило без повреждений в одинаковой упаковке, комплектация в порядке. На момент заказа у него была лучшая цена на AliExpress на данную елку, причем было около 200 продаж, сейчас уже более 1700.

В составе набора для пайки 3D-елки:

3 платы (основание CTR-30C и 2 части «ствола дерева» CTR-30A и CTR-30B)
Светодиоды (12 зеленых, 12 желтых, 13 красных)
6 конденсаторов на 47uF 16V
6 транзисторов S9014
7 резисторов 10 KOm
2 резистора 330 Om
2 резистора 1 KOm
2 резистора 2 KOm
1 кнопка
1 разъем для питания (длина 1 м)
1 шнур питания USB
2 болта и 2 гайки
Бокс для 3*AA батареек

Вот что было в комплекте.

Основные детали крупным планом. На платах логотип EQKIT.


Платы с обратной стороны:


Покрупнее:

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

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

Контактные площадки на платах пролужены отлично. При пайке даже не пришлось пользоваться флюсом, хватило того, что содержался в припое. Половину елки спаял примитивным китайским , правда с отдельно купленными для него. Собственно для теста новых жал это и затеял, оказалось «негодный» китайский паяльник вполне годен для таких несложных работ, т.к. родные жала даже не хотели брать припой. Другую половину паял уже паяльником на станции с жалами T12. Сейчас не смог определить, где и чем паялось, т.е. собрать данный конструктор можно с помощью любого инструмента, лишь бы руки были на правильном месте:)

Резисторы проверил мультиметром на соответствие маркировке и для удобства подписал. Возможно кому-то пригодится.

Сначала припаял все резисторы на платы A и B. С резисторами на 10K все понятно, они подписаны на плате. Остальные номиналы нужно разместить на следующих местах:
Плата CTR-30A
R1, R3, R5, R7 - 10K
R2 - 2K
R4 - 1K
R6 - 330

Плата CTR-30B
R1, R3, R5 - 10K
R2 - на фото - 330
R4 - на фото - 2K
R6 - на фото - 1K

Получилось следующее. Можно увидеть, где должны быть какие резисторы.

Далее нужно припаять транзисторы и конденсаторы. На плате конденсаторы подписаны как 22uF, в комплекте идут на 47uF, почему-то тут китайцы не сэкономили. Ножки у конденсаторов и резисторов загибаем на 90 градусов, чтобы они после пайки лежали горизонтально на плате, а не торчали в разные стороны на готовом изделии. Минусовой контакт электролитических конденсаторов (C1, C2, C3) обозначен на плате заштрихованной областью, а на самом конденсаторе светлой полоской. Ориентация транзисторов (Q1, Q2, Q3) также указана на плате полукругом, соответственно контур корпуса транзистора должен совпадать при установке (до сгибания ножек) с рисунком на плате. В данном случае у меня получилось, что все транзисторы лежат «лицом вниз», причем ориентированны в обратную сторону от полукруга на плате.
Впаяны все резисторы, транзисторы и конденсаторы.

Далее впаиваем светодиоды. Светодиоды имеют полярность, на плате все обозначено. Все светодиоды ориентированы одинаково, поэтому достаточно запомнить, как впаивать один, остальные аналогично. Для тех, кто не в курсе, в данном случае светодиод коротким выводом (катодом, «-») запаиваем ближе к вершине, соответственно длинным выводом (анодом, «+») к низу дерева. При финальной сборке дерева нужно будет припаять последний красный светодиод на вершине, там уже обозначена полярность, длинным выводом светодиод припаиваем к «+».

Перед пайкой ножки светодиодов загибаем под прямым углом так, чтобы тело светодиода выходило за пределы елки.

Распределение светодиодов по цветам следующее:
Плата A:
D1-D6 - красный,
D7-D12 - желтый,
D13-D18 - зеленый.
Плата B:
D1-D6 - зеленый,
D7-D12 - красный,
D13-D18 – желтый,

Все детали на основных платах впаяны.


Еще фото под другим углом.

Рекомендую протестировать платы до сборки, подав на них напряжение 4.5-5V. Каждая плата может работать независимо, т. е. в принципе можно получить две 2D-елки. Если ёлки работают по отдельности, можно приступать к дальнейшей сборке.

Думаю дальше процесс сборки описывать смысла нет, т.к. все очевидно. Платы A и B закрепляются между собой припоем. Главное не перепутать полярность, при установке елки на плату C (полярность везде подписана, перепутать нужно постараться).
Держатель для батареек имеет довольно длинный провод, который тут не нужен, его лучше обрезать до нужной длины. На всякий случай напомню, что красный провод нужно припаять к выводу «+», черный к «-» (подписаны BAT 4.5V).

Припаиваем кнопку включение, разъем для питания через USB, прикручиваем холдер для батареек - все конструктор готов.


Для более надежного крепления разъема питания DC 5V в комплекте нет металлической скобы, хотя отверстия для нее предусмотрены. Вместо нее можно использовать остаток ножки от резистора или конденсатора, что я и сделал.

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

Елка вполне нормально работает и от аккумуляторов Ni-MH 1.2V, протестировал на . Но при работе от USB (5V) все же свет поярче. Пытался измерить потребляемую мощность при подключении через USB, показывает 0.00A, при этом ёлка вовсю мигает и работает как надо, следовательно потребляемый ток очень мал, ниже минимального порога срабатывания тестера, поэтому батареек должно хватить очень надолго.

3D-ёлка в сборе:

Включаем питание - светодиоды светятся и плавно перемигиваются, радуя глаз.

Игрушка понравилась, собирать интересно, причем детям тоже. Это один из тех наборов для пайки, который после сборки не выкидываются в далекий ящик, а можно использовать, например в качестве ночника для детей.

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

Светодиодная елка своими руками, не требующая программирования!

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

Изготовление проекта занимает не так уж и много времени, хоть он и содержит почти 1500 отдельных светодиодов. Собирается он довольно быстро и просто, но это при учете, что вы будете придерживаться инструкций изложенных ниже, в которых будут даны предостережения от различных ошибок. Перед началом сборки, рекомендуется посмотреть видео представленное выше.

Шаг 1: Материалы и инструменты


Для изготовления этого проекта потребуется действительно не так много материалов и инструментов, как может показаться изначально. Это делает проект дешевым и простым в изготовлении. Итак, понадобится:

Материалы:

  • Светодиоды 5 мм. В данном проекте использовалось почти 1100 зеленых, 300 желтых и 100 синих светодиодов. Причем желтые и синие светодиоды должны быть мигающими.
  • Лист МДФ или ДВП
  • Материалы для пайки
  • Электрические провода, около 30 метров, предпочтительнее из тонкой, цельной медной жилы. В данном случае использовался разделанный телефонный кабель.
  • Старое зарядное устройство от ноутбука в качестве источника питания, в данном случае использовали блок питания на 18,5 Вольт мощностью 4 Ампера.

Самый главный секрет в этом проекте заключается в том, чтобы светодиоды отдельных цветов были мигающими. В этом проекте, таковыми являются желтые и синие светодиоды. При проектировании, было сделано предположение, что они будут мигать в разных интервалах, вызывая случайный узор через некоторое время, и эта теория оказалась верной. В момент подачи питания, они начинают мигать с одинаковым интервалом, но через 10 – 15 секунд, они начинают мигать случайным образом. Если учесть эту особенность не одинаковости срабатывания, то получается, что для создания красивого эффекта не требуется ни микроконтроллера, ни программирования, ни резисторов, ни конденсаторов, ничего кроме светодиодов!

Из инструментов понадобится тоже совсем немного:

  • Сверло диаметром 1 мм и 5 мм, дрель
  • Паяльник
  • Деревянный макет - матрица
  • Изолента
  • Инструмент для зачистки проводов (как оказалось самый важный, поскольку очень упрощает работу).
  • Линейка, карандаш и прочие мелочи.

Шаг 2: Подготовка дизайна




Подготовка к работе занимает примерно около половины всего времени на изготовление этого проекта, и поверьте, оно того стоит.

Во-первых, надо нарисовать изображение на клетчатой бумаге (можно использовать миллиметровку), используя только те цвета светодиодов, которых вы сможете найти. Будьте осторожны с красным цветом, т.к. в данном случае было заказано 100 красных мигающих светодиодов, и оказалось, что когда они объединяются в серию, то они отключают всю серию одновременно и больше не загораются (это выглядит некрасиво, и вам не рекомендуется). Объединив красные светодиоды в серию по 9 шт. они практически не загорались. Синие и желтые светодиоды этой проблеме не подвержены, поэтому пришлось исключить красные светодиоды из всего проекта.

В данном проекте, изначально изображение создавалось в программе Photoshop, но это оказалось достаточно сложным моментом. После поисков подобных программ в интернете, было найдено много программных продуктов, которые раскладывают изображения на квадратные пиксели. Их очень много, и что удобнее – выбирать вам. Суть этого шага, разделить изображение по цветам на квадраты определенного размера. После чего распечатать его на бумаге.

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

Из технического описания светодиодов, было выяснено, что каждый светодиод имеет падение напряжения около 2,5 Вольт. Для того чтобы полностью исключить использование резисторов, было решено объединять светодиоды в серию из расчета 18,5 Вольт / 7шт. = 2,6 Вольта (Падение напряжения на светодиоде). Таким образом, одна серия светодиодов должна содержать 7 светодиодов и при этом они будут светиться на максимальной яркости.

В нашем случае использовался шаблон с квадратами, в центре которого была точка определенного цвета. Затем, на бумаге, каждый цвет был объединен в серию по семь светодиодов. Это было очень утомительным занятием, но по-своему забавным, почти как решение головоломки. Как оказалось в итоге, серии из 7 светодиодов не достаточно, чтобы она могла выдержать напряжение 18,5 Вольт, поэтому в итоге пришлось увеличить серию до 9 светодиодов. Настоятельно рекомендуем вам узнать и точно рассчитать допустимые напряжения на одну серию. Это вас убережет от повторной переделки всей схемы.

Шаг 3: Координатная пайка (серии светодиодов)

Для того чтобы сделать жизнь проще, была изготовлена небольшая матрица. Используя те же размеры, что и при окончательной сборке, была сделана небольшая деревянная плата с шагом между точками 5 мм. Прикладывая эту матрицу к листу МДФ или ДВП, она должна точно соответствовать местам сверления отверстий. После отметки отверстий, рекомендуется отмечать номера строк и столбцов, это еще больше упростит вам дальнейшую сборку. Также, на этой матрице на следующем шаге будут собираться отдельные серии светодиодов, которые затем вставятся в основной шаблон.

Шаг 4: Создание индивидуальных серий светодиодов








Теперь, при наличии удобного шаблона для составления серий из светодиодов можно приступить к следующему шагу. Начинать надо с самого начала, т.е. с первой серии. Разместите светодиоды первой серии в требуемом порядке. Некоторые из ножек светодиодов должны быть сокращены, в противном случае они могут привести к короткому замыканию. Затем разогните ножки светодиодов так, что бы у вас получилось последовательное соединение (т.е. плюс предыдущего с минусом следующего и т.д.). Для маркировки серии, были наклеены небольшие кусочки липкой ленты с номером серии на аноде последнего светодиода, а минус никак не обозначался. После сборки серии, она проверяется на работоспособность, если все нормально, то можно переходить к следующей серии. В данном проекте получилось 150 серий светодиодов, работа очень утомительная и требует внимания. Не забывайте проверять соединения после пайки.

Шаг 5: Подготовка ДВП



Размер листа МДФ, который был приобретен для этого проекта, идеально подходил по размерам, поэтому не было необходимости в его обрезке. Если у вас возникает такая необходимость, то обрежьте лист до требуемых размеров.

Расчертите квадратную сетку по всему листу, но предварительно убедитесь, что она соответствует сетке, которую вы использовали для создания светодиодных секций, т.е. соответствует предварительной матрице. Будьте осторожны, если вы немного нарушите квадратную матрицу, т.е. прочертите линии не перпендикулярно, это может разрушить весь ваш проект!

Затем, используя шаблон с квадратами, начерченный на бумаге, определите круглые области, в которых надо просверлить отверстия. Это не точные области, они нужны лишь для понимания контура фигуры. После чего нанесите точные точки для сверления отверстий.

После этого, что бы отверстия сверлились проще, просверлите все отверстия сверлом диаметром 1 мм, а после этого пройдитесь по всем отверстиям сверлом 5 мм. Этот шаг достаточно долгий по времени, на сверление 1500 отверстий ушло примерно 7 часов времени!

Еще дополнительный час ушел на шлифование различных неровностей и удаление заусенец.

Шаг 6: Установка светодиодов в МДФ доску



Этот шаг довольно простой, но опять же если у вас точно совпадают размеры предварительной матрицы и отверстий, просверленных в листе МДФ. Если все точно, то просто вставьте секции светодиодов с тыльной стороны листа МДФ в просверленные отверстия, согласно бумажной карте. В идеале, вам не потребуется никакая фиксация светодиодов.

Будьте осторожны, вставляя светодиоды в отверстия, если расстояние немного не соответствует, то есть вероятность повредить линзу светодиода или пайку контактов. Также не торопитесь снимать ленту с номерами секций, она пригодится в дальнейшем!

Шаг 7: Создание положительных и отрицательных шин питания

Для создания шин питания, надо взять обычный провод, который используется для напряжения 230 Вольт (например, жилы провода ПВС), зачистить его от изоляции, и хорошо перекрутить во избежание расслоения мелких жил. На каждую сторону потребуется примерно 150 см провода. Затем каждую из жил закрепить с обратной стороны листа МДФ, например, пластмассовыми скобами, по обеим сторонам листа по вертикали. В местах пересечения линий квадратов, провод необходимо залудить для дальнейшей пайки (в данном случае получилось около 60 точек с каждой стороны).

Шаг 8: Соединение светодиодов



На этом шаге, когда все светодиоды установлены на место, четко определитесь, где у серии плюс, а где минус. Порядок подключения секций значения не имеет.

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

Рекомендуется выполнять подключение построчно, это вам значительно поможет, в случае если вы допустите ошибку. Также, по вашему желанию, вы можете добавить в схему обычный выключатель по питанию между зарядным устройством и светодиодной елкой, в нашем случае проект работает просто от подключения блока питания в розетку.

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

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

Основу устройства составляет простейший мультивибратор.

Частота колебаний зависит от номиналов емкостей и резисторов в цепях баз. Широченное поле для экспериментов.

Что же нам понадобится?

1) Светодиоды. Я использовал трех цветов зеленые 6шт, желтые 6шт и красные 7шт.
2) Резисторы. 10кОм - 2шт, и 1кОм - равно количеству используемых светодиодов.
3) Пара транзисторов
4) Термоусадка диаметром 2 и 4 мм
5) Медная проволока, покрытая лаком, толщиной примерно 0,8 или 0,7мм
6) Что то еще...

Проволоку надо нарезать на отрезки примерно 10-15см длинной. Количество таких отрезков должно быть равно количеству светодиодов умноженное на два. Целесообразно сделать половину отрезков 10см, вторую половину 15 см.
К светодиодам припаиваются резисторы, потом все это припаивается к нашим отрезкам из проволоки, как на рисунке.
Потом резисторы на светодиодах "прячутся" в термоусадку.

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

Мультивибратор я сделал навесным монтажом на двух транзисторах КТ816Г, и к сожалению не успел сфотографировать.
Осталось все это запихнуть в любой подходящий корпус, и вуаля!! Наслаждаемся!!

Накануне Нового Года хочется сделать что-нибудь праздничное! А самое лучшее украшение дома - это всеми любимая елка.

Для достижения домашнего уюта нам нужно: небольшой кусок обоев (или какого-нибудь картона), зеленый дождик, скотч и ровные руки.

Сматываем наш лист бумаги у форме конуса и фиксируем скотчем. Далее складываем его и ровно обрезаем низ, так чтоб он ровно мог стоять. Потом возьмем немного медной проволоки (0.3..0.5мм) и обмотаем наш конус, зафиксировав проволоку скотчем, это придаст ему упругости. Разрезаем его по высоте (так удобней устанавливать ряды светодиодов). После поярусной (они на схеме прономерованные) установки светодиодов скрепляем разрез знакомым нам скотчем. Плату также размещаем внутри елки. На следующем этапе, начиная с верхушки, обматываем конус зеленым дождиком так, чтоб немножко выступали светодиоды. Ну по конструкции все...

Что касается схемы. Подаем 7..12В (думаю подобных блоков у каждого хватает) на стабилизатор, для питания контроллера и делаем общий + (не стабилизированный) который общий для всех светодиодов. От этого общего провода параллельно в каждом ярусе включаются светодиоды, делаем это для того, чтоб не пришлось до каждой группы светодиодов тянуть по два провода. На выходах МК поочерёдно появляются 0 или 1 которые идут на базы транзисторов, для их открытия. Транзисторы нужны, так как к каждому порту МК подключены по несколько светодиодов, контроллер может не потянуть все эти токи. Кстати, между портами МК и базами транзисторов можно поставить токоограничивающие резисторы. Светодиоды подключены "минусом" на коллекторы (эмиттеры на землю), а перед их "плюсом" стоят токозадающие резисторы. Думаю по работе схемы вопросов быть не должно...

Транзисторы: BC547 (или любые аналоги)

Токозадающие резисторы: 200 Ом...1кОм
Конденсаторы: любые (это фильтры питания) от 0.1мкФ

На схеме нумерация (1-6) это наши ярусы светодиодов, начиная с нижнего. 6-ой это наша верхушка, звездочка или что-то в этом роде. Не перепутайте, иначе пропадет рисунок свечения!

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

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
МК AVR 8-бит

ATmega8

1 В блокнот
Линейный регулятор

L78L05

1 В блокнот
Биполярный транзистор

BC547

12 В блокнот
Резистор

10 кОм

1 В блокнот
Резистор ~900 Ом 38 В блокнот
Конденсатор 0.1 мкФ 2

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

Просмотренные в Интернете видео с поделками на "умных" светодиодах WS2812B сразу породили множество идей их применения. В конце ноября мне наконец-то пришла долгожданная, заказанная на eBay лента из 200 диодов. Доставка бесплатна, стоимость одного диода - около шести рублей. И так как до Нового года оставался всего месяц, я решил совместить приятное с полезным - и с подключением диодов разобраться, и к празднику подготовиться.

WS2812B - трехцветный светодиод с интегрированным драйвером и схемой, реализующей протокол управления. Имеет 4 вывода, как и "обычный" RGB-диод, однако их назначение отличается: два вывода отведены под питание схемы, один вывод под вход данных, и один - под выход (диоды можно соединять последовательно). Нет необходимости придумывать сложные алгоритмы для регулировки яркости и цвета каждого диода - разработчику достаточно передать в цепочку диодов последовательность байт и выдержать необходимые временные интервалы - после чего цепочка будет гореть заданным цветом либо до подачи другой последовательности, либо до отключения питания. При этом расходуется всего один вывод МК или ПЛИС!

В даташите на диоды (прикреплен в конце статьи) подробно расписаны все характеристики, здесь же приведу наиболее важные параметры:

  • размер одного диода 5х5 мм, корпус - для поверхностного монтажа;
  • напряжение питания - 3,5...5,3В;
  • максимальное количество диодов в одной цепочке - 1024, при частоте обновления 30 кадров в секунду. Стоит заметить, что подключить такое число диодов возможно при идеальном следовании таймингам протокола, что бывает проблематично;
  • светодиоды реализуют RGB-модель: каждый цвет кодируется одним байтом - теоретически возможно получить более 16 млн цветов. Однако на глаз разница между даже не столь близкими цветами незаметна.

Схема подключения диодов выглядит следующим образом:

При подаче питания диоды не инициализированы и горят синим цветом. Для инициализации цепочки диодов требуется выполнить следующие действия:

  1. Передать 8 бит G7..G0 для установки зеленого цвета первого диода;
  2. Передать биты R7..R0 для установки красного цвета;
  3. Передать биты B7..B0 для установки синего цвета;
  4. Повторить пункты 1-3 для второго, третьего и др. диодов. То есть, после инициализации первого диода, данные начинают проходить через него на следующий диод;
  5. Установить на входе логический "0" как минимум на 50 мкс, после чего все инициализированные диоды примут заданный цвет.

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

Далее я подробно прокомментирую программу, которая инициализирует диоды, отвечает за управление и смену эффектов. Программа написана на языке ассемблера, проект в среде ATmelStudio 6.2 прикреплен в конце статьи. Будет рассмотрена только логика загрузки и переключения эффектов; очевидные вещи, вроде инициализации стека и настройки прерываний и портов, опущены. Также подразумевается, что цепочка диодов подключена к порту PD7 контроллера, рабочая частота - 8 МГц.

Идея программы заключается в следующем. Имеется некий набор эффектов, которые поочередно требуется выводит на светодиоды. Эффект характеризуется:

  • частотой кадров;
  • временем работы;
  • "интеллектуальностью". "Умным" называется эффект, который проще запрограммировать (например, плавные переливы цветов, одинаковые для многих эффектов); "глупый" же эффект описывается покадрово, массивом.

Перед объяснением логики работы следует пояснить, для чего нужны следующие регистры и константы:

Def temp = r16 ;для всего, своего рода регистр-помойка.def counter = r17 ;регистр-счетчик светодиодов.def curFn = r18 ;счетчик кадров, прошедших с момента начала текущего эффекта.def curEf = r19 ;7..4 - число эффектов всего, 3..0 - номер текущего.equ LED_COUNT = 17 ;константа-общее число светодиодов.equ BUFFER_SIZE = LED_COUNT*12+1 ;размер буфера (будет пояснено позднее) .equ XTAL = 8000000 ;тактовая частота.equ DIV = 256 ;значение предделителя таймера.equ TPS = XTAL / DIV ;число тиков таймера за секунду.equ END = 0xFE ;маркер конца

Учитывая приведенные выше характеристики эффекта, он выглядит примерно следующим образом:

EffectName: .db high(TPS/15),low(TPS/15), 15*16,1 .db 7,7,9,7,7,9,7,7,9,7,7,9 .db 7,7,9,7,7,9,7,7,9,7,7,9 .db 7,7,9,7,7,9,7,7,9,7,7,9 .db 7,7,9,7,7,9,7,7,9,7,7,9 .db 7,7,9,END

В первой строке находятся 4 байта характеристик:

  • два байта настройки прерывания таймера, определяющие частоты смены кадров. В данном случае частота - 15 кадров/сек;
  • байт длительности эффекта (в кадрах). Данный эффект продлится 16 секунд;
  • байт "умности" эффекта. Так как данный эффект (перелив) проще запрограммировать, байт равен единице.
  • 51 байт цветовых характеристик каждого диода (в случае покадрового описания их было бы на порядок больше);
  • маркер конца массива.

Под хранение буфера и некоторых констант в ОЗУ выделено следующее количество места:

Dseg BytesBuffer: .byte BUFFER_SIZE ;массив байт, который будет загружаться в диоды (пояснено ниже) ColorsTable: .byte LED_COUNT*3+1 ;3 - число цветоканалов(R,G,B), 1 байт под маркер конца MaxFrame: .byte 1 ;число кадров, которое необходимо проиграть, для конкретного эффекта CurEffectAddr: .byte 2 ;хранит в себе адрес текущего эффекта.equ CEA_H = CurEffectAddr + 1 .equ CEA_L = CurEffectAddr + 0

Хочется подробнее пояснить "программируемость" эффектов. Дело в том, что в массиве должны быть перечислены интенсивности каждого цвета (от 0 до 16). В свою очередь, данные значения умножаются на значения следующий регистров (заодно приведены константы-помощники в реализации перелива):

Def R = r20 ;динамическая интенсивность красного.def G = r21 ;зеленого.def B = r22 ;и синего.def F = r23 ;флаг для автомата переключения состояний;флаги состояний.equ G_HIGH = 1 .equ R_DOWN = 2 .equ B_HIGH = 3 .equ G_DOWN = 4 .equ R_HIGH = 5 .equ B_DOWN = 6 .equ MAX_FLAG = 7

Произведение констант из массива и соответствующих регистров формируют таблицу цветов (ColorsTable) для каждого из диодов. В случае, если эффект программируется, значения регистров R,G,B можно динамически менять. Описание всех кадров такого эффекта нецелесообразно (требует слишком много памяти контроллера).

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

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

ColorToBytes: ldi temp,0x88 sbrc R0,7 ;используется регистр R0 как стандартный аргумент команды lpm subi temp,-(1<<6) ;сложения в AVR нет, поэтому так извращенно sbrc R0,6 subi temp,-(1<<2) st Y+,temp ldi temp,0x88 sbrc R0,5 subi temp,-(1<<6) sbrc R0,4 subi temp,-(1<<2) st Y+,temp ldi temp,0x88 sbrc R0,3 subi temp,-(1<<6) sbrc R0,2 subi temp,-(1<<2) st Y+,temp ldi temp,0x88 sbrc R0,1 subi temp,-(1<<6) sbrc R0,0 subi temp,-(1<<2) st Y+,temp ret

То есть, данная функция преобразует один байт в четыре, которые будут загружаться в диоды.

LoadData: cli ;цикл загрузки битов в диоды. Очень быстрый, и дабы тут ничего не сломалось, на всякий случай запрещаю прер-ия. LoadData2: ld temp,Y+ cpi temp,END breq FromBegin ;все диоды инициализированы, прыгаем в бесконечный цикл Out1: out PortD,temp lsl temp nop out PortD,temp lsl temp nop out PortD,temp lsl temp nop out PortD,temp lsl temp nop out PortD,temp lsl temp nop out PortD,temp lsl temp nop cbi PortD,7 rjmp PC+1 ;выполняется 2 такта, но занимает 2 байта, в отличие от 2*nop, которые выполняются столько же, rjmp PC+1 ;но занимает 4 байта rjmp PC+1 rjmp PC+1 rjmp PC+1 rjmp PC+1 rjmp LoadData2 FromBegin: sei cbi PortD,7 Loop: ;пока что цикл абсолютно пуст, то есть можно разместить еще какие-либо действия/обработчики rjmp Loop

Откуда взялась волшебная константа 0х88? Нужная длительность низких и высоких уровней формируется путем выдерживания определенного значения на выходе порта. Команды lsl - nop - out выполняются за три такта, то есть за 375 нс, что укладывается в допустимую погрешность. Таким образом, передача нуля сводится к загрузке последовательности 1000, а единицы - 1100. То есть, в одном байте передаются два бита, а в двенадцати байтах - настройки одного диода (24 бита = 3 байта G,R,B), что сразу делает понятной данную строку:

Equ BUFFER_SIZE = LED_COUNT*12+1 ;размер буфера (будет пояснено позднее)

Именно поэтому в начале байт равен 0x88, функция ColorToBytes попросту выставляет единицы на позициях 6 и 2, если это необходимо, и загружает байт в выходной буфер.

В упомянутом выше прерывании таймера реализовано следующее:

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

    Также в конце статьи прикреплен шаблон проекта, незначительная правка которого позволит очень быстро работать с WS2812B.

    Осталось продемонстрировать готовое устройство на "умных" светодиодах - новогоднюю елку. Схема елки достаточно проста и приведена ниже:

    Основной компонент схемы - микроконтроллер ATmega8A в TQFP-корпусе. Также я оставил две кнопки для будущей доработки елки. Остальные компоненты почти полностью представлены резисторами и конденсаторами типоразмера 0805. Питается елка от 5 Вольт через разъем micro-USB, что позволяет разместить елку где угодно при подключении к внешнему ЗУ типа PowerBank. Файл с ПП елки находится в архиве (плата двусторонняя).

    Фото вырезанной на ЧПУ-станке платы (одна сторона):

    Впервые в жизни попробовал вырезать плату из тонкого (0.3мм) текстолита, так как планировал закрепить елку на листе бумаги формата А3. Для больших плат механическая прочность такого текстолита низка; советую брать текстолит от 1 мм толщиной. На фото даже видно просвечивающие дорожки другой стороны!

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

    Небольшое видео работы (пример эффекта перелива):

    В конце статьи прикреплен архив, где находятся:

    • исходный проект новогодней елки в AtmelStudio 6.2;
    • шаблон проекта в этой же среде;
    • файл печатной платы елки;
    • файл схемы елки;
    • прошивка елки;
    • FUSE-биты контроллера;
    • схема подключения диодов;
    • даташит на WS2812B.

    Список радиоэлементов

    Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
    U1 МК AVR 8-бит

    ATmega8A-AU

    1 TQFP32 В блокнот
    D1-D17 Светодиод WS2812B 17 В блокнот
    C1 Конденсатор 47 мкФ 1 TANT_A В блокнот
    C2 Конденсатор 100 нФ 1 0805


    2024 stdpro.ru. Сайт о правильном строительстве.