Главная » Микроконтроллеры
Призовой фонд
на сентябрь 2018 г.
1. 1000 руб.
Neru5
2. Регулируемый паяльник 60 Вт
Паяльник
3. 200 руб.
От пользователей

Похожие статьи:


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

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

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

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

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

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

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

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

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

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

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

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

//Отправка бита ЛОГ.0 контроллеру светодиода
void Send_bit_0(void)
{
   PORTB|=(1<<1);
   asm("nop");
   PORTB&=~(1<<1);
   asm("nop");   }

//Отправка бита ЛОГ.1 контроллеру светодиода
void Send_bit_1(void)
{
   PORTB|=(1<<1);
   for (i=0;i<2;i++)asm("nop");
   PORTB&=~(1<<1);
   asm("nop");
}

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

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

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

//Отправить оттенок цвета
void Send_Byte(unsigned char redshade, unsigned char greenshade, unsigned char blueshade)
{
  signed char i;
   for(i=7;i>=0;i--)
   {
   if(greenshade&(1<<i))Send_bit_1();
   else Send_bit_0();   }
   for(i=7;i>=0;i--)
   {
   if(redshade&(1<<i))Send_bit_1();
   else Send_bit_0();
   }
   for(i=7;i>=0;i--)
   {
   if(blueshade&(1<<i))Send_bit_1();
   else Send_bit_0();
   }
}   

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


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

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

//Определения цветов
#define red 1
#define orange 2
#define yellow 3
#define green 4
#define cyan 5
#define blue 6
#define purple 7
#define white 8
#define none 9

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

//Отправить цвет
void Send_color(unsigned char c)
{
switch(c)
{
   case 1: Send_Byte(0x2F,0x00,0x00);break;//Красный
   case 2: Send_Byte(0x2F,0x1E,0x00);break;//Оранжевый
   case 3: Send_Byte(0x2F,0x2F,0x00);break;//Желтый
   case 4: Send_Byte(0x00,0x2F,0x00);break;//Зеленый
   case 5: Send_Byte(0x00,0x2F,0x2F);break;//Голубой
   case 6: Send_Byte(0x00,0x00,0x0F);break;//Синий
   case 7: Send_Byte(0x2F,0x00,0x2F);break;//Фиолетовый
   case 8: Send_Byte(0x2F,0x2F,0x2F);break;//Белый
   case 9: Send_Byte(0x00,0x00,0x00);break;//Нет цвета (погасить)   }
}

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

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

//Отправить 5 цветов
void Serial_5_colors(char c1, char c2, char c3, char c4, char c5)
{
   Send_color(c1);
   Send_color(c2);
   Send_color(c3);
   Send_color(c4);
   Send_color(c5);
}

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

//Анимация сдвиг
void shift_green(void)
{
   Serial_5_colors(white, white, white, white, white);
   _delay_ms(100);
   Serial_5_colors(green, white, white, white, white);
   _delay_ms(100);
   Serial_5_colors(white, green, white, white, white);
   _delay_ms(100);
   Serial_5_colors(white, white, green, white, white);
   _delay_ms(100);
   Serial_5_colors(white, white, white, green, white);
   _delay_ms(100);
   Serial_5_colors(white, white, white, white, green);
   _delay_ms(100);
   Serial_5_colors(white, white, white, white, white);
   _delay_ms(100);
}


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

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

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
СветодиодWS281315 Поиск в Utsource В блокнот
МК AVR 8-бит
ATtiny85
1 Поиск в Utsource В блокнот
Кварцевый резонатор8 МГц1 Поиск в Utsource В блокнот
Конденсатор керамический22 пФ2 Поиск в Utsource В блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 3
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 3 чел.

Комментарии (16) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1
andro #
Насколько быстро светодиоды могут реагировать на входной сигнал? Можно ли таким образом собрать шкалу индикатора уровня звука с разделением по частотам?
Ответить
+3
vlad #
Можно. Можно даже матрицу из линеек сделать и отображать видео. На ютюбе полно роликов про использование предшественника - ws2812
Ответить
0
Zlodey #
Наверно реагируют моментально. Учитывая что скорость передачи - считанные миллисекунды...
Ответить
+2

[Автор]
simasima #
Давайте подсчитаем: Время передачи данных (24 бит цвета) для одного светодиода не превышает 50 мкс (см.рис.4). Если делать эквалайзер в 12 столбцов по 10 светодиодов в каждом, то время обновления составит 12*10*50^-6=6мс. С учетом обязательного сигнала сброса: 6,3мс. Так что можно будет такой эквалайзер обновлять чаще 150 раз в секунду!
Ответить
0
viktor26 #
Давно не было таких крутых статей. Все разжевал дальше некуда, функций на минимальную библиотеку сделал.
Респект автору.
Ответить
+1
andro #
А какое максимальное количество светодиодов?
Ответить
0
Zlodey #
Любое, влияет только на общее потребление и скорость передачи данных
Ответить
-1
makcucm8 #
Эх, не любое. Производитель заявляет максимум 1024 светодиода.
Ответить
+1

[Автор]
simasima #
В мануале такая фраза на этот счет:
"When the refresh rate is 30fps, cascade numbers are far more than 1024 points"
Ответить
0
andro #
Это как раз кстати
Ответить
+1
Zlodey #
А если перевести с английского?
Прикрепленный файл: Снимок.PNG
Ответить
+1
Pauk #
Внешний кварц нужен обязательно?
Ответить
0

[Автор]
simasima #
От внутреннего RC-генератора тиньки на 8 МГц работает.
Ответить
+1
Pauk #
Стабильности хватает?
Ответить
0

[Автор]
simasima #
Хватает. Запускал 64 штуки таких светодиодов последовательно от Attiny85 без кварца - работает без нареканий.
https://cloud.mail.ru/public/FZYc/3b6WeswcL
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Катушка Тесла USB-реле (2 канала)
вверх