Работа с адресными светодиодами WS2812B - РАДИОСХЕМЫ

     простые интересные РАДИОСХЕМЫ сделанные своими руками


» ПОИСК СХЕМ


» РАДИОБЛОГИ
Сервотестер на микроконтроллере AtTiny13
Управление по UART со смартфона
Серво сбрасыватель и поисковая пищалка для квадрокоптера
Работа с адресными светодиодами WS2812B
Схема и проверка модулей SIM800
Двухканальное зарядное для гелевых аккумуляторов
Добавление своих символов на дисплее 1602 (русификация)
Очень простой датчик-реле уровня воды

Работа с адресными светодиодами WS2812B

Хотел рассказать об опыте использования светодиодной ленты с адресными светодиодами ws2812b. Изучив эти светодиоды я называл бы их не адресными светодиодами а пропускающими - каждый отдельный светодиод при поступлении битов на входную информационную ножку отбирает себе первых 24 бита, а следующие биты без изменения транслирует по выходной ножке на следующую микросхему. 24 бита, которые микросхема забирает себе - 3 байта по 8 бит. Каждый из этих 3 байт - это мощность освещения красного, зеленого, синего оттенка одного светодиода. Если мы хотим управлять светодиодной лентой из 4х светодиодов, то для включения всех светодиодов надо на шину данных отправить 24х4 = 96 битов данных.

Исходные данные

Ситуация: светодиодная лента горит красным цветом, и нам надо чтоб 4-й светодиод загорелся синим цветом. Для этого, чтобы изменить цвет 4 светодиода нам по любому на шину данных придется отправить 96 битов данных. Из них биты с 73 по 96 как раз будут задавать новый цвет для 4-го светодиода. При этом, чтобы первые три светодиода не изменили свой цвет, биты с 1 го по 72 должны быть те же самые, которые использовались при зажигании ленты в красный цвет. В этом случае визуально будет казаться, что мы обновили цвет только 4 светодиода. На самом деле обновятся все 4 светодиода, но новый цвет на первых 3 светодиодах мы оставляем тот же самый. Если в полоске 100 светодиодов, и нам надо изменить только первые 4 светодиода, после 96 бита передачу данных можно остановить.

Итог: адресное управление данной светодиодной лентой осуществляется путем подсчета количества 24 битных порций данных. 1-я порция включает 1-й светодиод, 2-я - второй, 100-я порция изменит состояние 100-го светодиода в ленте.

Теперь расскажу об уровнях и таймингах информационных сигналов. Для работы с микросхемами я использую такую схему (рис 4).

Причем ножка микроконтроллера находится в режиме ВХОД (DDRB.6=0). На порт подан логический ноль (PORTB.6=0). При такой схеме и при таких настройках, на информационной ножке ленты устанавливается логическая единица (из-за подтянутого резистора на 3,3 кОм). Подача логического нуля на ленту осуществляется путем установки ножки в режим ВЫХОД (DDRB.6=1).

Теперь тайминги

Изначально на ножке стоит лог. единица. Для перевода светодиода в режим получения сигнала необходимо подать логический ноль в течение 5 мс. После этого идут биты данных: для передачи "нулевого" символа необходимо подать логическую единицу, и сразу подать логический ноль. Для передачи "единичного" символа необходимо подать логическую единицу, подождать 3 мкс и подать логический ноль. Интервал между сигналами от 6 до 20 мкс. Временные интервалы можете увидеть на осциллограммах в разных временных развертках.(рис3, рис2, рис1).

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

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

Пример: имеется лента, в ленте 4 светодиода. Хочу в теории: в 1-ю секунду включить все в красный цвет, 2 сек - все светодиоды в синий цвет, 3 сек - все светодиоды в зеленый цвет. Что получается на практике: в 1-ю секунду первый светодиод не горит, 2,3,4 - горят красным, 2-я сек - первый светодиод загорается красным, 2,3,4 - горят синими, 3-я сек - первый светодиод горит синим, 2,3,4 - горят зелеными.

Пока с проблемой справился таким образом: в исходном состоянии стоит лог. единица, даю сигнал инициализации (5 мс), 24 бита - пакет данных для первого светодиода, жду 30 мкс, снова даю сигнал инициализации (5 мс), и отправляю информационные биты для всех светодиодов.

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


KOHTPOJIJIEP - 08.11.2020 - Прочитали: 261



Ваши комментарии к материалу
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]


» РАДИОЭЛЕМЕНТЫ

Группа вконтакте Канал ютуб Группа в фэйсбук © 2010-2021 "Радиосхемы" Все права защищены Почта Моб.версия