Светоиды WS2811 - иногда мигают непонятным цветом

shasoft
shasoft аватар
Offline
Зарегистрирован: 30.11.2017

Начинаю знакомится с LED-ами WS2811
Никак не пойму почему выводятся левые цвета. Использую укороченный стандартный пример. В setup устанавливаю цвета и больше их не меняю. Однако периодически некоторыные LED загораются не зеленым цветом. Плата Arduino Unu

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

p.s.отдельно непонятно что делать с 4-ым проводом. Т.е. два - питание. Один - данные. Ещё один (белый) - ?

Может мне прислали не то что нужно и поэтому такие артифакты?

 

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN 2

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(50, PIN, NEO_RGB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code


  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, strip.Color(0, 255 * i / strip.numPixels(), 0));
    //delay(wait);
  }
    
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  strip.show();
  delay(1000);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Да, прислали не то, что нужно.

shasoft
shasoft аватар
Offline
Зарегистрирован: 30.11.2017

Можете по фото определить что мне прислали?

sadman41
Offline
Зарегистрирован: 19.10.2016

1) Красный

2) Зеленый

3) Белый

Где четвертый?

Так же - посмотрите внимательно на стр. 11, 12, 16

shasoft
shasoft аватар
Offline
Зарегистрирован: 30.11.2017

Красный+белый в руке - это питание.

За LED находится разъем с зеленым (данные) и белым проводом. Вот что это за белый провод - непонятно.

(хотя между лампочками действительно всего 3 провода)

 

p.s.можно ссылку на страницу 11, а то не очень понял где эти страницы искать?

sadman41
Offline
Зарегистрирован: 19.10.2016

В посте №0 c кодом - строчки 11, 12, 16.

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

shasoft
shasoft аватар
Offline
Зарегистрирован: 30.11.2017

Торможу. Прочитал "стр" как "страница" :)

Пробовал указать NEO_KHZ400 вместо NEO_KHZ800 - не помогло. Возможно потому что белый провод не соединил с землей.

 

Всем большое спасибо. WS2811 побежден. Нужно было второй белый провод тоже к GND подключить. Новичок я ещё в этом деле.

shasoft
shasoft аватар
Offline
Зарегистрирован: 30.11.2017

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

p.s.блок питания на 5А (60 Вт), так что питания должно хватать.

p.s.s.Может кто-нибудь ткнет в статью по этим LED-ам где все объясняется, чтобы не отвечать на все мои глупые вопросы.

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Снизьте brightness страйпа (функция библиотечная есть в adafruit_neopixel, понаблюдайте). Запитайте страйп с обоих сторон...

shasoft
shasoft аватар
Offline
Зарегистрирован: 30.11.2017

Помогло

strip.setBrightness(64);

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