цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Как визуализировать работу светодиодов WS2812



Как визуализировать работу светодиодов WS2812

Автор: Mike(admin) от 19-02-2023, 23:55

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


Как визуализировать работу светодиодов WS2812

Мы задействуем в нашем примере обычные ленты по 60 светодиодов в каждой. Прежде всего, вам нужна одна плата Arduino (назовем ее отправителем) для создания строки данных, которая будет отправлена на ленту 1.


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


Как визуализировать работу светодиодов WS2812

Исходящие данные, создаваемые отправителем, а также данные, поступающие от последнего светодиода ленты 1 к первому светодиоду ленты 2, и данные, поступающие от последнего светодиода ленты 2 к первому светодиоду ленты 3 и (если доступно) исходящие данные ленты 3 отбираются вторым Arduino (называемым анализатором) с использованием контактов того же порта (в данном случае порта B), что делает выборку намного проще и быстрее.


Работа программы анализатора состоит в том, чтобы дождаться начала потока данных, затем произвести выборку столько, сколько может вместить плоттер последовательного монитора (500 выборок), и, наконец, представить данные. Эта программа также может измерять время чтения этих 500 выборок.


Как визуализировать работу светодиодов WS2812

Данный график нужно объяснить. Ряд, нарисованный синим цветом, показывает поток данных, отправляемых отправителем на первый светодиод ленты 1. Ряд, нарисованный красным, показывает данные, передаваемые из ленты 1 в ленту 2, ряд, нарисованный зеленым цветом, показывает данные, передаваемые из ленты 2 в ленту 3 (вывод ленты 3 здесь не показан).


В скетче отправителя установлено количество сетодиодов int NUMPIXELS = 180. То есть, данные отправляются на все 3 x 60 = 180 светодиодов. Поскольку светодиод №181 отсутствует, светодиод №180 не имеет данных для передачи, и в конце ленты 3 не будет никакого вывода. Если вы хотите увидеть несколько импульсов в этот момент, вы должны установить NUMPIXELS = 181 (или даже больше).


Общее время чтения 500 выборок заняло 5724 микросекунды. Когда вы измеряете три интервала, вы получаете 1800 микросекунд для каждого из них. Теперь вы можете посчитать: 3 цвета x 8 бит x 60 светодиодов = 1440 бит для каждой ленты. Если вы разделите это на 1800 микросекунд, вы получите частоту 800000 Гц, что точно соответствует данным из технической документации на светодиоды WS2812.



#include <Adafruit_NeoPixel.h>

int NUMPIXELS = 180;
byte PIN = A0;

Adafruit_NeoPixel strip;

word first_hue;
byte reps = 1;
byte saturation = 255;
byte brightness = 255;
bool gammify = true;

word speed = 5000;

void setup() {
  Serial.begin(9600);
  Serial.println(__FILE__);
  strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
  strip.begin();
}

void loop() {
  strip.rainbow(first_hue, reps, saturation, brightness, gammify);
  strip.show();
  first_hue = first_hue + speed;
  delay(2000);
}




void setup() {
  Serial.begin(115200);
  Serial.println(__FILE__);
}

void loop() {
  int N = 500;
  byte b[N];
  while (digitalRead(8) == 0);
  long t1 = micros();
  for (int i = 0; i < N; i++) {
    b[i] = PINB;
    delayMicroseconds(12);
  }
  long t2 = micros();
  Serial.print("T=");
  Serial.print(t2 - t1);
  Serial.println("µs");
  for (int i = 0; i < N; i++) {
    byte b0 = bitRead(b[i], 0);
    byte b1 = bitRead(b[i], 1) + 2;
    byte b2 = bitRead(b[i], 2) + 4;
    Serial.print(b0);
    Serial.print(" ");
    Serial.print(b1);
    Serial.print(" ");
    Serial.print(b2);
    Serial.println();
  }
}



© digitrode.ru


Теги: WS2812, Arduino, светодиоды




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

Комментарии:

Оставить комментарий