Управление светодиодами ws2813 с адресацией с помощью attiny

Управление светодиодами WS2813 с адресацией с помощью ATtiny

Краткие сведения по WS2813

Светодиоды с пиксельной адресацией WS2813 выпускаются в стандартном корпусе 5050 размером 5 × 5 мм для поверхностного монтажа (Рис.1). Под линзой внутри корпуса располагаются зелёный, синий, красный светодиоды и управляющий контроллер. Для защиты от пульсаций напряжения питания в корпус установлен RC-фильтр.


Рис.1 Структура WS2813 под микроскопом

Светодиоды WS2813 могут быть объединены в последовательную цепочку с возможностью управлять каждым светодиодом в цепочке по отдельности. Цвет, который будет отображать WS2813 задаётся цифровым кодом, который передаётся по однопроводной шине данных.

WS2813 функционирует следующим образом (рис. 2): вывод DIN принимает данные от управляющего микроконтроллера, при этом первый чип в последовательной цепи забирает первые 24 бита данных и передаёт их во внутренний регистр — защёлку. Последующие сигналы данных проходят через встроенный узел восстановления и усиления и передаются следующему в цепочке чипу через вывод DO. После прохождения каждого чипа количество бит в общем потоке данных уменьшается каждый раз на 24 бита.

У WS2813 имеется также вывод BIN, который подключается параллельно входу предыдущего светодиода таким образом, что если один WS2813 выходит из строя, то цепочка за ним продолжает работать. Вывод NC не используется.


Рис.2 Схема соединения WS2813 в последовательную цепь

Для передачи данных к контроллерам светодиодов применяется однопроводной интерфейс. Биты кодируются длительностью передаваемого импульса. Передача лог. 0 должна осуществляться импульсом длительностью 375±75 нс, а единицы 875±125 нс.

Сигналом сброса и началом нового цикла обновления данных считается наличие низкого уровня на линии в течение 300 мкс. После прихода этого сигнала, контроллер светодиода WS2813 начинает на частоте 2 кГц ШИМ-управление встроенными светодиодами в соответствии с полученным кодом: Коэффициент заполнения =1, когда код цвета равен 255 и равен нулю при нулевом коде.

Пример кода для микроконтроллера Attiny85

Провод по которому будет осуществляться передача данных подключим к выводу PB1 микроконтроллера, который должен тактироваться от внешнего кварца на 8 МГц. Во фьюз-битах микроконтроллера необходимо отключить деление частоты на «8» (CKDIV8=0) и включить тактирование от внешнего кварца на 8 МГц. Для формирования импульса длительностью 375 нс невозможно использовать таймер счетчик, поэтому была использована ассемблеровская команда asm(«nop») — «холостой ход» процессора:

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


Рис.3 Результат измерения длительности импульсов кодирования ЛОГ.0 и ЛОГ.1 с помощью логического анализатора

Для того, чтобы WS2813 стал отображать заданный оттенок цвета, его контроллеру следует отправить 24 бита данных. Первые 8 бит кодируют оттенок зеленого цвета, вторые -красного, третьи — синего. Для удобства, в функции Send_Byte оттенки для последующей отправки принимаются в последовательности RGB:

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


Рис.4 Осциллограмма 24 бит данных, предназначенных одному контроллеру светодиода WS2813, полученная с помощью логического анализатора.

Семь основных цветов, а также белый цвет определяются в начале программы:

Для отображения цветов используется следующая функция:

Здесь яркость светодиодов выставлена приблизительно на 1/5 от максимальной величины (0x2F/0xFF).

Функция для работы с пятью светодиодами WS2813 будет выглядеть следующим образом:

Ниже представлен пример функции, реализующей простую анимацию в цепочке из пяти WS2813:


Рис.5 Пять пакетов данных по 24 бита, предназначенных для пяти WS2813 на логическом анализаторе.

AterLux › Блог › Светодиоды со встроенным ШИМ WS2812

RGB-светодиоды и ленты на их базе — вещь изъезженная. Обычно найти три ШИМ-выхода у микроконтроллера не составляет труда, чтобы гирлянда светодиодов монотонно светила заданным цветом. Однако, если требуется задать несколько разных цветов в гирлянде, то уже начинаются проблемы как с количеством ШИМ-выводов микроконтроллера, так и с разводкой платы.

Наткнулся совершенно случайно на светодиоды, обладающие встроенным ШИМ-контроллером: WS2812 от Worldsemi Co. Всё что нужно — подвести питание 5 Вольт, а на линию данных DIN выдать последовательно 24 импульса, кодирующие три 8-битных значения яркости, соответственно, зелёной, красной и синей составляющей.
Получив свои значения, контроллер зажигает светодиод заданным цветом, а все последующие импульсы передаёт на выход DOUT. Таким образом, светодиоды можно соединить в гирлянду, и управлять 24-битным цветом каждого в отдельности всего по одному проводу данных.

Выпускаются в корпусах 5050 в двух версиях: WS2812B — четырёхвыводной и WS2812S — шестивыводной, с отдельными линиями питания для светодиодов и логической схемы.

На ebay светодиоды WS2812B россыпью можно купить по цене 10 баксов за 50 штук. По сравнению с «обычными» светодиодами, цена не маленькая, но, в принципе, доступная.
Так же там продаются различные варианты модулей на базе этих светодиодов, гибких пластинок где светодиоды расположены в несколько строк, и, самый распространённый вариант — светодиодные ленты различных длин и плотностей расположения светодиодов, в открытых, лакированных и водонепроницаемых вариантах.

В случае необходимости ленту можно разрезать на меньшие фрагменты.

ШИМ работает на частоте около 400 Гц, поэтому мерцание на глаз не заметно, однако при съёмке видео могут появляться странные волнообразные эффекты. Незажжённый светодиод потребляет около 1мА, соответственно лента из 150 светодиодов потребляет около 150мА. Полностью зажжённый светодиод потребляет около 60мА, а значит для питания ленты из 150 светодиодов потребуется 9 Ампер. Желательно избегать длинных фрагментов лент и подводить питание с обеих сторон, поскольку падение напряжение на 5-метровой ленте при таком токе может быть критическим.

Кроме SMD-светодиодов, существует вариант отдельной микросхемы WS2811, для управления RGB-светодиодом, также продают гирлянды на базе таких чипов и различных RGB-светодиодов.

Кроме того, каким-то другим производителем выпускаются аналогичные и совместимые по протоколу светодиоды PL9823 в виде 5мм и 8мм круглых матовых светодиодов, а также smd 5050.

В момент простоя каждый из PL9823 кушает около 7мА, что весьма значительно.

Протокол управления

Каждый бит данных передаётся в виде отдельного импульса высокого уровня, длительность импульса кодирует передаваемое значение. Тайминги для всех вышеперечисленных моделей разные, но можно ориентироваться на те, что даны в даташите на WS2812B. А именно, длительность высокого уровня: 0.4 мкс для передачи значения 0, и 0.85 для передачи значения 1. Время передачи одного бита 1.25 мкс, т.е. скорость передачи 800 кбит/с. Иначе говоря, для гирлянды из 300 светодиодов время полного обновления составит всего 9мс, т.е. теоретически можно её обновлять более 100 раз в секунду.

Передача ведётся от старшего бита к младшему. У WS2812 сначала передаётся байт зелёной компоненты цвета, затем красной, затем синей. У остальных вышеперечисленных — сначала красный, затем зелёный и синий.

Получив 24 бита на входе DIN, светодиод зажигается заданным цветом и все последующие биты данных транслирует на выход DOUT, передавая следующему светодиоду в гирлянде.

Сигналом сброса и началом нового цикла обмена считается наличие низкого уровня на линии в течение 50 мкс.

На этом скриншоте показана осциллограмма управляющего сигнала. Зелёным — сигнал от микроконтроллера на входе DIN, жёлтым — сигнал на выходе DOUT. Показан момент, когда завершилась передача первых 24 битов и чип начал ретранслировать данные.

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

Программирование на AVR

Для отладки я собрал себе тестовую плату:

Один бит данных передаётся за 1,25 мкс, а при частоте работы микроконтроллера 8 МГц это составляет всего 10 тактов.

В реализованном примере вывод данных написан на ассемблере. Поддерживается «быстрый» режим — 10 тактов на бит, и медленный — 20 тактов на бит.

Также поддерживается одновременный вывод на две гирлянды также на скорости 10, или 20 тактов на бит. В этом случае они должны быть подключены к выводам одного порта. Более подробные пояснения — в исходном коде. Демонстрационный проект написан на Atmel Studio 6.2 для ATmega8A, по умолчанию настроен на вывод на 1 линейку из 150 светодиодов, подключенную к PD0.

Скачать проект вместе со всеми исходниками здесь (последнее исправление от 04.04.16)

Макрос светодиода WS2812B для Sprint Layout здесь

Другие подобные светодиоды

Полные аналоги WS2812B

WS2812B — (описан в этой статье). Чип встроен в SMD светодиод размера 5×5мм, 4 вывода.

WS2812C — версия WS2812B, также SMD 5×5мм, 4 вывода, но на в 4 раза меньший ток: макс. 5мА на цвет (вместо 18.5мА у WS2812B). Позволяет делать гирлянды и табло с большей плотностью светодиодов и меньшей яркостью.

XT1511 — SMD 5×5мм, 4 вывода, аналог WS2812B. Так же существует версия XT1511-5mA на 5мА.

SK6812-RGB — SMD 5×5мм, 4 вывода.

SK6805 — SMD 5×5мм, 4 вывода, версия SK6812 но на ток 5мА.

Совместимые по протоколу в других корпусах

WS2812S — (был упомянут в статье). SMD 5×5мм, 6 выводов, раздельное питание для светодиодов и чипа.

SK6812-P6 SMD 5×5мм, 6 выводов.

SK6812-WWA SMD 5×5мм, 4 вывода. вместо красного, синего и зелёного его компоненты цвета: холодный белый, тёплый белый и янтарный, для динамического освещения.

WS2811 — отдельные чипы в корпусах soic-8. Продаются также в лентах с smd светодиодами и гирляндах с выводными 5мм светодиодами (пример использования). Может работать на пониженной частоте обмена (400 кГц).

WS2812B-Mini — чипы, встроенные в RGB-светодиод размера 3,5×3,5мм.

TM1804 — отдельная ИС в корпусе soic-8. Может работать на пониженной частоте обмена (490 кГц).

Частично совместимые, или похожие по протоколу

WS2813 — обновлённая версия, 6-контактный корпус, обладают запасным входом, который подключается параллельно входу предыдущего светодиода, таким образом, если один светодиод выходит из строя, то цепочка за ним не перестаёт работать. Менее строгая спецификация по таймингам, допускают паузу между битами до 100мкс. Соответственно, длительность низкого уровня для сброса увеличена до 300мкс. Частота ШИМ поднята до 2кГц.

Читайте также  Система автоматической подачи звонков на avr

WS2818 — обновлённая версия 2811; отдельные чипы в корпусах sop8, msop8 или dip8. Допускают менее строгие тайминги.

SK6812-RGBW SMD 5×5мм. Использует не 3 компоненты цвета, а 4: Красный, синий, зелёный, белый. Протокол аналогичен описанному, но на 1 светодиод требуется 32 бита данных. (описание от CAMOKAT-BETEPAHA)

PL9823-5050. SMD 5×5мм, 6 выводов. По описанию, работают на скорости обмена 580 кГц, но, вероятно, смогут принимать данные на 800 кГц.

PL9823-F5 и PL9823-F8 — (были упомянуты в статье) выводные, 4 ножки, диаметр 5 и 8 мм, соответственно. По описанию, работают на скорости обмена 580 кГц, но, по опыту, могут нормально принимать данные на 800кГц.

Несовместимые по протоколу

WS2801 — отдельные чипы в корпусах SOP-14. Продаются также в лентах в сопряжении с 5050 светодиодами. Ток каждого цвета светодиода задаётся резистором. Синхронный протокол (односторонний SPI — линия данных и линия тактирования), обеспечивает большую скорость обновления.

APA102 — встроенные в корпус светодиода 5050. Синхронный протокол (односторонний SPI — линия данных и линия тактирования), обеспечивает большую скорость обновления. На каждый светодиод выдаётся 4 байта данных: значение яркости красного синего и зелёного и общая яркость. ШИМ для красного синего и зелёного работает на высокой частоте, что позволяет добиться плавного вывода на движущихся объектах (POV, пример, автор mortonkopf). Границы пакета определяются посылкой 32 нулей (начало), или 32 единиц (конец пакета). Частота импульсов для обмена указана как до 1,2 МГц

LDP8803 и LDP8806 — отдельные чипы в корпусах soic-16, синхронный протокол (односторонний SPI — линия данных и линия тактирования). 3 и 6 управляемых каналов, соответственно.

SK9822 — SMD 5×5мм, 6 выводов, совместимы повыводно и по протоколу с APA-102.

CX2802 — SMD 5×5мм, 6 выводов, иное (в отличие от APA-102 или SK9822) расположение выводов. Обмен по одностороннему SPI (линия данных и линия тактирования), указана частота обмена до 2 МГц. Протокол совместим с WS2801: каждый цвет кодируется тремя байтами, границы пакета определяются низким уровнем на CLK 500 и более мкс. Максимальный ток на каждый цвет обозначен 12мА.

WS2812B, WS2813, APA102 Ограничения в использовании умных светодиодов в современных проектах декоративной светотехники

Уже несколько лет на рынке светотехники можно встретить такие названия, как: «smart led strip», «smart led pixel» и подобные. Как правило, «умный пиксель» — это сборка из миниатюрного 3-х канального светодиодного драйвера (с интегрированным стабилизатором тока, PWM модулятором и сдвиговым регистром), подключенная к RGB светодиоду. На базе таких пикселей многие производители выпускают «умные» гибкие светодиодные ленты, LED «гвозди» и LED кластера. Также можно встретить такие модели чипов, как WS2812, WS2813, с интегрированным LED драйвером непосредственно в корпус 5050 RGB светодиода. Малые габариты, большое количество последовательно включенных пикселей (более 1000 шт.), простота управления по 1(2) проводу и сравнительно низкая стоимость решения — более чем оправдывают их применение.

Эта моя первая публикация на Хабре, в которой я хочу донести мой опыт использования и обозначить недостатки таких пикселей. За несколько последних лет я успел поработать со следующими LED драйверами: LPD6803, WS2801, WS2811, WS2812(B), TM1903, UCS1903, TM1804, TM1803, SM16716 и другими менее ходовыми. В интернете часто можно встретить такой термин как «светодиодная лента с пиксельной адресацией» — я с этим совершенно не согласен, и это является первым ограничением.

Информация в такие ленты/пиксели загружается по последовательному каналу, а именно через сдвиговые регистры с 24-х битной разрядностью (как правило), т.е. 3 канала по 8 бит для RGB. Никаких адресов такие LED пиксели не помнят и работают исключительно по последовательному принципу. Отсутствие сигнала управления на линии данных или синхронизации (если таковая есть), служит командой для преобразования значений в регистрах в PWM сигналы для RGB светодиодов. По этой причине, при выходе из строя информационного канала одного из пикселей, последующие пиксели перестанут корректно работать. Многие неопытные LED «рекламисты» наступили на эти грабли, применяя такие пиксели для уличных экранов.

Рисунок ниже демонстрирует «битые» полоски.

Второе ограничение связанно с температурой использования. В большинстве случаев у пикселей, что управляются только по одному проводу «DATA», к примеру, WS2812B — нижняя температура использования -25 градусов. На практике, часто от -15 градусов. Это связанно с отсутствием хорошего кварцевого блока регенерации сигнала внутри чипа. Таким образом, при низких температурах пиксель перестает корректно работать, наблюдаются «сверчки» и т.п. до полного отсутствия картинки. Другое дело — чипы с синхронизацией: WS2801, LPD6803, к примеру. Здесь имеется хорошая регенерация сигналов по уровням, по времени — регенерация не нужна, поскольку имеется линия синхронизации. Рабочая температура в этом случае от -40 градусов. Но и стоят эти чипы вдвое дороже.

Третье ограничение — глубина цвета.

Рисунок ниже демонстрирует экраны собранный на чипах WS2801.

Не вооруженным глазом заметно, что экран с фоном засвечен. Низкие уровни градиента «умные пиксели» (WS2812, WS2801 и т.п. практически все) не способны воспроизводить так, как это делают современные экраны. Это связанно с низкой разрядностью интегрированного в чип PWM генератора (всего 8 бит на канал) и как следствие – отсутствие полноценной гамма коррекции. Проще говоря, светодиод светит слишком ярко, когда хочется совсем чуть-чуть и ничего с этим нельзя поделать.

Ощутимым минусом, во всяком случае для меня, было отсутствие хорошего софта подготовки и конвертирования анимации, непосредственно для вывода на «железки». Это явилось четвертым ограничением.
Поначалу я использовал софт «LedEdit».

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

Пятое ограничение связано с китайским железом для управления LED лентами на базе умных пикселей, а именно рандомный FPS (частота отрисовок кадров в секунду) который часто падал до уровня слайд шоу (8-12 FPS) при полной загрузке. Картинка дергалась, плавность переходов оставляла желать лучшего. По этой причине также разработал свое железо для этой задачи.

Поскольку в этой теме я был очень заинтересован и обладал неплохими знаниями в области программирования, в том числе микроконтроллеров, я написал свой «граббер» видео с последующей конвертацией на «пиксели». Идею объединить в одной программе возможности создания и конвертирования анимации я сразу отложил, поскольку это не профессиональный подход. Анимацию нужно создавать и редактировать в специализированных программах, к примеру, я выбрал FREE программное обеспечение «Jinx!».

На выходе ПО «Jinx!» можно получить открытый бинарный файл *.out представляющих битовое представление данных прямоугольной матрицы из пикселей для каждого кадра. Теперь дело остается за немногим: сопоставить прямоугольную матрицу из данных для каждого кадра с реальным расположением «умного пикселя» на пиксельном поле и произвести граб анимации. Так у меня родилось программное обеспечение «Light Studio Terminal».


Скачать LS Terminal

Сейчас ПО «LS Terminal» позволяет работать с большинством видео форматов *.avi, *.flv и д.р., использовать десятки портов, качественно обрабатывать видео захват для десятков тысяч «умных пикселей» расставленных по полю пользователем.

— Light Studio Terminal / Базовый, обучающий ролик.

Инструкция по подключению Arduino к адресной светодиодной ленте

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

Для начала необходимо разобраться с потреблением светодиодной ленты. Дело в том, что каждый светодиод в пикселе потребляет до 20 мА, в зависимости от яркости его свечения. Напомню, что яркость свечения задаем мы сами из программы. Итого получается, что каждый пиксель может потреблять до 60 мА. Это довольно много, если учитывать, что мы можем использовать несколько метров ленты. Но в рамках данной статьи я буду экспериментировать с отрезком на 5 пикселей. И по этой причине запитаю адресную ленту прямо от Arduino Nano . Хотя я бы сам не рекомендовал так делать, лучше всего ставить отдельный блок питания и подключить ленту к нему, а с МК реализовать только управление.

Как мы помним из прошлых статей, управление будет осуществлено любым из цифровых выходов с D 2 по D 13. В данном случае я решил использовать D 5 (просто для примера, Вы можете использовать любой). Итак, подключаем ленту к Arduino Nano . GND к GND , +5 V к +5 V и D — input к D 5 на плате Nano . Я не стал ничего придумывать и просто припаял. Визуально выглядит адресная лента подключенная к Ардуино:

А вот схема подключения адресной ленты к Arduino:

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

Следующим действием предлагаю подключить плату Адруино к компьютеру и уже заняться написанием нашей первой программы под адресную светодиодную ленту.

Пишем программу для управления адресной светодиодной лентой через Arduino. Установка библиотеки

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

Читайте также  Квартирный звонок на isd1210p

Для начала давайте откроем IDE Arduino . Это программа, которую мы установили в одной из прошлых статей.

Получилось? Отлично! Далее нам необходимо установить библиотеку. Это нужно, чтобы управлять адресной лентой. Дело в том, что лента принимает определенный набор команд, но нам, как молодым разработчикам, пока не интересно, что это за команды и как они устроены. Мы просто хотим управлять цветами. И библиотека управления адресной лентой поможет нам сделать это максимально просто и быстро. Мы будем сообщать программе, где какой цвет хотим видеть, а программа, с помощью библиотеки, будет формировать наборы команд, понятные для микросхем адресной ленты. На самом деле все достаточно просто и очевидно, нужно только привыкнуть. Поэтому нажимаем «Скетч» -> «Подключить библиотеку» — > «Управлять библиотеками».

После этого появится окно «Менеджер библиотек». Кстати, данному окну нужно немного времени чтобы прогрузиться, поэтому пару секунд оно будет не активным, нужно подождать.

На данный момент мы будем использовать библиотеку « Adafruit NeoPixel ». Проще всего будет воспользоваться поиском. Как видно, в списке есть похожие название, нужно быть внимательным и не перепутать.

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

Пишем программу для управления лентой через Ардуино

И теперь мы приступаем к следующему этапу — написанию программы. Начнем с чего-то простого и потом будем постепенно совершенствовать. Наша первая программа будет выглядеть следующим образом:

#define LED_COUNT 5

#define LED_PIN 5

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

strip.begin(); //Инициализируем ленту.

strip.setPixelColor(i, strip.Color(255, 0, 0)); // Красный цвет.

strip.setPixelColor(i, strip.Color(0, 0, 0)); // null

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

Начнем с первой строчки. Тут мы объявляем библиотеку. Дело в том, что перед этим мы только ее скачали, а чтобы использовать в программе, необходимо ее объявить. Для этого используется директива # include <>. Где в скобках указано имя файла, который будет использоваться при компиляции, как часть кода. В нашем случае это название библиотеки. Кстати да, библиотека – это файл с программой.

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

Обратите внимание: речь идет именно о количестве пикселей, то есть чипов в ленте, а не о количестве светодиодов. В некоторых адресных лентах, например с чипом ws2811 и ws2818 управление происходит кратно 3 диодам, поэтому лента с 60 диодами на метр будет управляться всего 20 пикселями. Если у вас адресная лента ws2812b, ws2813 или ws2815, то управление происходит кратно одному диоду, то есть количество пикселей = количество светодиодов.

Идем далее. Директива # define определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в коде. Давайте разберем вторую строку более подробно «#define LED_COUNT 5». «LED_COUNT» — это идентификатор, которому соответствует символ «5». Это позволит нам в теле программы (везде, где нужно) написать «5», писать «LED_COUNT». Возможно, это звучит немного непотяно, но подумайте вот о чем: нам пришло в голову изменить кол-во пикселей в ленте и тогда нам придется во всем коде менять их кол-во. Но благодаря # define , мы имеем возможность поменять всего лишь последовательность символов в идентификаторе. Понятное дело, в нашей программе возможно заменить все значения, потому что тут всего 2-а десятка строк. Но бывают и очень большие программы, где действия по замене потребуют огромного количества времени и терпения.

В пятой строке мы объявляем экземпляр класса Adafruit_NeoPixel и передаем его конструктору значения о длине ленты, выводе управления и типу адресной ленты. В данной статье мы не будем разбирать само понятие классов, поэтому предлагаю просто принять данную строчку как должное, где в скобках мы передаем необходимые параметры. Скажу только одно: тут мы создали объект под именем « strip ». И этот объект полностью отвечает за работу подключенной ленты.

В теле функции setup () мы сообщаем компилятору, что данный объект « strip » у нас будет использован. По сути, эту команду инициализации пока тоже нужно принять как необходимый минимум.

А дальше у нас уже идет самое интересное — основная часть программы, в которой и происходит волшебство, она находится в теле функции loop (). Но перед этим необходимо ввести новое понятие – цикл.

Цикл — это определенный блок программы, выполняющийся по кругу. Даже сама функция loop () является циклом. Циклы бывают конечными и бесконечными и у циклов так же, как и у функций, есть тело, где написаны повторяющиеся команды. В данной программе мы использовали цикл – for . Если данный цикл описан правильно, то он, как правило, конечен. Цикл for имеет 3 параметра «for(int i = 0; i Первый параметр задает начальное значение для переменной i . Кстати, в данном случае переменная i инициализируется при начале работы цикла и забывается при окончании работы цикла. Второй параметр – это условие, при котором цикл продолжает выполняться. В нашем случае цикл выполняется до тех пор, пока i меньше 5. И третий параметр прибавляет единицу к i , при каждом повторе цикла. Сейчас ограничимся этим коротким объяснением. В дальнейшем у меня выйдет короткая статья, посвящённая программированию.

Итак, вернемся к программе. С 13-ой по 17-ую строку у нас расположен цикл, цикл на 5 повторений, где i меняется от 0 до 4 включительно.

В 14-ой строке мы вызываем метод setPixel , объекта strip и передаем ему два параметра. Где i это номер пикселя на адресной ленте, а « s trip.Color(255, 0, 0)» его цвет. Про то, как задается цвет по системе RGB мы уже говорили ранее. Скажу только очевидную вещь, «255, 0, 0» — это максимально красный цвет.

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

В 15-ой строке расположена команда, которая выводит на ленту цвета из памяти в МК (микроконтроллер). То есть последовательность такая: сначала пишем цвета в память, потом разом выводим их на адресную ленту. Изначально пока мы еще не успели заполнить память, там хранятся нулевые цвета «0, 0, 0».

И в 16-ой строке у нас стоит задержка в 300 млс.

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

Теперь давайте разберем строки кода с 18-й по 23-ю. Тут происходит практически то же самое. В таком же цикле, мы обнуляем цвета, только это происходит без какой-либо задержки. И данные поступают на адресную ленту уже после выполнения всего цикла, то есть обнуления всех цветов. И уже после этого мы используем задержку.

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

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

Особенности подключения и управления адресной светодиодной лентой

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

Адресные LED-ленты

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

Устройство адресной ленты

Базой для построения таких осветительных приборов стали адресные светодиоды. Они содержат собственно полупроводниковый светоизлучающий элемент и индивидуальный драйвер ШИМ. В зависимости от типа адресного элемента, RGB LED может располагаться внутри общего корпуса или быть вынесенным и подключаться к выводам драйвера. В качестве светоизлучателя могут применяться раздельные светодиоды или RGB-сборка. Напряжение питания также может быть различным. Сравнительные характеристики распространенных микросхем, применяемых для управления цветными светодиодами, приведены в таблице.

Дополнительный управляющий вход

Потребление тока одного метра адресной лентой довольно велико, ведь мощность расходуется не только на свечение p-n переходов, но и на коммутационные потери ШИМ-драйверов.

Устройство элемента светильника

Каждый адресный светодиод содержит минимальное количество выводов:

  • U питания (VDD);
  • общий провод (GND);
  • вход данных (DIN);
  • выход данных (DOUT).

Это позволяет элементы со встроенными излучателями размещать в корпусах с 4 выводами (WS2812B).

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

Читайте также  Музыкальный звонок с возможностью замены мелодий без использования программатора

Так, проектанты микросхемы WS2811 задействовали свободный вывод под переключатель скорости, а WS2818 – под резервный вход данных (BIN).

Соединение элементов

Все элементы, расположенные на полотне, соединены по питанию параллельно, а по шине данных – последовательно. Выход управления одной микросхемы соединяется со входом другой. Управляющий сигнал с контроллера подается на вывод DIN крайнего левого по схеме драйвера.

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

Управление свечением

Управляются элементы адресной ленты по последовательной шине. Обычно такие шины строятся по двухпроводной схеме – линия строба и линия данных. Существуют и такие ленты, но они получили меньшее распространение. А описываемые приборы управляются по однопроводной схеме. Это позволило упростить полотно, удешевить его. Но оплачено это низкой помехоустойчивостью LED-прибора. Любую наведенную помеху с достаточной амплитудой драйверы могут интерпретировать как данные и непредсказуемо засветиться. Поэтому при монтаже надо предпринимать дополнительные меры для защиты от помех.

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

«Бегущий огонь»

Отдельного рассмотрения заслуживает так называемая SPI-лента, которую в быту называют «бегущий огонь» из-за самого распространенного светового эффекта, который на ней строят. Отличие такой ленты от рассмотренных типов в том, что шина данных содержит две линии – для данных и для тактовых импульсов. Для таких приборов можно приобрести изготовленный промышленно контроллер с набором эффектов, включая упомянутый «бегущий огонь». Также можно управлять свечением и от обычных контроллеров PIC или AVR (включая Arduino). Их преимуществом является повышенная помехозащищенность, а недостатком – необходимость задействования двух выходов контроллера. Это может послужить ограничением для построения сложных световых систем. Также для таких приборов характерна более высокая стоимость.

Схема подключения светильника и типичные ошибки

Схема включения мультимедийных приборов имеет много общего со схемой обычных RGB-осветителей. Но имеются и отличия — чтобы правильно подключить к контроллеру адресную светодиодную ленту, надо иметь в виду несколько моментов.

  1. Из-за повышенного энергопотребления адресной ленты запитывать ее от платы Ардуино нельзя (если используются небольшие отрезки – нежелательно). В общем случае для организации питания потребуется отдельный источник (в некоторых случаях он может быть один, но цепи питания для светодиодов и контроллера должны быть выполнены раздельно). Но общие провода (GND) цепей питания и платы Arduino должны быть соединены. В противном случае система будет неработоспособной.
  2. Из-за пониженной помехоустойчивости проводники, соединяющие выход контроллера и вход полотна, должны быть как можно короче. Крайне желательно, чтобы они были не длиннее 10 см. Также далеко не лишним будет подключение на линию питания конденсатора С на напряжение, превышающее напряжение питания ленты, и емкостью от 1000 мкФ. Устанавливать конденсатор надо в непосредственной близости от ленты, в идеале – на контактных площадках.
  3. Отрезки ленты можно соединять последовательно. Выход DOUT надо подключать к входу DIN следующего куска. Но при общей длине, превышающей 1 метр, последовательное соединение применять нельзя – проводники линий питания полотна не рассчитаны на большой ток. И в этом случае надо применить параллельное соединение отрезков.
  4. Если соединить выход контроллера и вход DIN напрямую, при возникновении нештатной ситуации в светильнике выход контроллера может выйти из строя. Чтобы этого избежать, в разрыв провода надо поставить резистор сопротивлением до нескольких сотен Ом.

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

Проверка исправности адресной ленты

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

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

Адресная светодиодная лента Ардуино

Управление адресной светодиодной лентой ws2812 Ардуино ► рассмотрим подключение ws2812 к Arduino с простыми примерами для создания красивых цветовых эффектов.

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

Адресная светодиодная лента Ардуино

Адресные ленты отличаются плотностью — от 30 до 144 светодиодов на метр, изготавливаются разном защитном исполнении: IP30, IP65, IP67, IP68. Все варианты исполнения, кроме IP30, могут применяться на улице в диапазоне температур от -25 до +80°C. Еще одна, более надежная лента — WS2813 отличается возможностью передавать сигналы дальше по цепочке даже через сгоревший чип.

Светодиодная лента WS2812B характеристики

  • Размер светодиода — 5 х 5 мм
  • Частота ШИМ — 400 Гц
  • Скорость передачи данных — 800 кГц
  • Размер данных — 24 бита на светодиод
  • Напряжение питания — 5 Вольт
  • Потребление при нулевой яркости — 1 мА на светодиод
  • Потребление при максимальной яркости — 60 мА на светодиод
  • Цветность: RGB, 256 оттенков на канал, 16 миллионов цветов

Характеристики WS2812B адресной светодиодной ленты

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

Как проверить адресную ленту без Ардуино

Многих интересует, как включить адресную ленту без Ардуино и проверить ее на работоспособность. Если просто подключить питание к ленте, то ничего не произойдет — проверить ленту без контроллера нельзя. Если задеть цифровой вход адресной ленты, то могут загореться несколько светодиодов из-за случайных помех, которые воспринимаются контроллерами ws2812b светодиодов, как команды.

Если под рукой нет платы Ардуино, то можно использовать для проверки специальный контроллер. В крайнем случае, просто потрогать цифровой провод, чтобы понять будут гореть светодиоды на ленте или нет. Другого надежного способа проверить работу ws2812b ленты нет, поэтому рассмотрим далее управление и программирование адресной светодиодной ленты на микроконтроллере Ардуино Нано или Уно.

Как подключить адресную ленту к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • лента WS2812B;
  • макетная плата;
  • 1 резистор от 100 до 500 Ом;
  • провода «папа-папа».

WS2812B светодиоды довольно энергоемкие, один светодиод потребляет до 60 мА при максимальной яркости. Для ленты со 100 диодами потребуется блок питания на 6 и более Ампер. Микроконтроллер Arduino и светодиодная лента могут быть подключены к разным источникам питания, но «земля» должна быть общая. Дело в том, что пин GND тоже участвует в управлении адресной лентой от платы Ардуино Уно.

Схема подключения адресной ленты 5 Вольт к Ардуино

WS2812B Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
5V 5V 5V 5V
DO 10 10 10

Для работы с лентой используются три популярные библиотеки — FastLED, AdafruitNeoPixel и LightWS2812. Все библиотеки доступны для скачивания на нашем сайте здесь. Работать с библиотеками FastLED и Adafruit NeoPixel просто, отличаются они в функциональности и объеме занимаемой памяти. После сборки этой простой схемы и установки библиотек, загрузите скетч для адресной светодиодной ленты.

Скетч. Тестирование адресной ленты WS2812

Пояснения к коду:

  1. нумерация светодиодов в ленте начинается с нуля, поэтому если мы хотим включить первый светодиод, то указывать надо «0».

Схема подключения адресной ленты 12 Вольт к Ардуино

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

Скетч. Управление адресной лентой Ардуино

Пояснения к коду:

  1. с помощью библиотеки Adafruit NeoPixel довольно просто управлять адресной лентой. В примерах к библиотеке можно найти много различных эффектов. Мы продемонстрировали простой вариант с циклом for для включения ленты.

Заключение. В этом обзоре мы рассмотрели лишь подключение и возможность управления адресной лентой от Ардуино. Так как возможности работы с библиотеками FastLED, AdafruitNeoPixel довольно разнообразны. Больше интересных примеров на Arduino и WS2812B размещено в разделе Проекты на Ардуино, где представлены проекты с бегущей строкой на адресной ленте и другие световые эффекты.