Не взлетает лента ws2812b

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Добрый день, други.

Заказал в китае 2 ленты по метру и 30 диодов ws2812b. источник питания к ним на 5V 5A 25W. стал с мини играться, по началу ничего не предвещало беды, уснановил Adafruit NeoPixel библеотеку, демо скетчи работали на ура. Потом одна лента перестала реагировать, т.е. питание подключено, управляющий сигнал идет, но лампочки не горят. Ну жалко кончечно но решил продолжить играться с другой. Все было хорошо, игрался долго, всякие эффекты писал. Теперь более подробно: был на даче, лента, ардуина и бп. были там, сложил все это добро в пакет, привез домой, достал, подключил и ничего не работает. То есть питание есть, сигнал с ардуины идет, но лампочки не моргают. грешил на скетч, на пин, перепробывал менять пин, менял скетч, загрузил уже из библеотеки пример, не мигают хоть убей. Земля ессно соеденина. В общем раньше все моргало а теперь нет. Вот я и не знаю всем проблема. Грешу на пакет, могла ли статика убить контроллер в ws2812b. Если нет то куда копать дальше? 

ptr
Offline
Зарегистрирован: 28.05.2016

Mr.Privet пишет:

могла ли статика убить контроллер в ws2812b

Могла. Не зря их продают в антистатической упаковке.

gena
Offline
Зарегистрирован: 04.11.2012

  Никогда в руках не держал таких лент, но знаю, что у диодов  ws2812b есть вывод IN и вывод OUT. Хорошо бы осциллогафом посмотреть, проходит ли сигнал управления сквозь первый светодиод. Возможно именно только первому "поплохело".  Тогда его выпаять, а дорожки "IN,  OUT" что были под ним  - замкнуть между собой.

ptr
Offline
Зарегистрирован: 28.05.2016

Логично. Достаточно велика вероятность того, что пострадал только вход IN первого чипа. Если это так, то не факт, что просто его отрезать (лента ведь!) не будет проще, чем выпаивать.

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

gena пишет:

  Никогда в руках не держал таких лент, но знаю, что у диодов  ws2812b есть вывод IN и вывод OUT. Хорошо бы осциллогафом посмотреть, проходит ли сигнал управления сквозь первый светодиод. Возможно именно только первому "поплохело".  Тогда его выпаять, а дорожки "IN,  OUT" что были под ним  - замкнуть между собой.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Чёэ это как-то напрягает. Вроде, штука достаточно надёжная. Непонятно. Послежу за темой.

slider
Offline
Зарегистрирован: 17.06.2014

ЕвгенийП пишет:

Чёэ это как-то напрягает. Вроде, штука достаточно надёжная. Непонятно. Послежу за темой.

я б не сказал что надежная, смотря какая партия. у меня из 5ти лент по 5 метров ws2812b  (60шт на 1 метр)  - ни одна лента нормальная.  На каждой ленте со временем (в течении нескольких дней-недель) сгорело по 10-20 чипов. Если сгорают , то через себя не пропускают нормально сигнал.  Питание хорошее мощное 5,0в (качественное - осцилом смотрел)., толстые короткие провода, алюминиевый профиль. Пробовал и 4,5в , кондеров много твердотельных, и фильтр феррит. - один фиг сгорают чипы.  Я б сказал это качество такое фиговое пошло.  

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

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

статики и обычные RGB 5050 боятся , походил по напольному ковровому покрытию , притронулся до ленты и каюк сразу нескольким светодиодам.

ptr
Offline
Зарегистрирован: 28.05.2016

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

BoBo4kA
Offline
Зарегистрирован: 15.01.2016

встречал по ним, резистор на вход настоятельно рекомендуют, ом 400 вроде.

Logik
Offline
Зарегистрирован: 05.08.2014

Хм.. Второй год 2м ленты ночником работают, каждый вечер часа по 2, сигнал от минипро, питание от USB. Без проблем.  Светодиод и чип в одном корпусе. С нагревом там проблемы нет, мощности их небольшие. Скорей контакты надо проверять. Про резистор впервые слышу, в чем его сакральный смысл?

ptr
Offline
Зарегистрирован: 28.05.2016

Logik пишет:

С нагревом там проблемы нет, мощности их небольшие.

Ну не знаю, 0.3 Вт кому-то много, кому-то мало. А механические напряжения в кристалле контроллера из-за неравномерного нагрева они вполне могут создавать. Старые варианты, когда контроллер и светодиод были разделены оказались более надежными.

Впрочем, если лента надежно приклеена хотя бы к ДСП, данных проблем уже возникать не должно. А в режиме елочной гирлянды по 1-2 чипа в год отправляются в мусорное ведро.

 

Logik
Offline
Зарегистрирован: 05.08.2014

ptr пишет:

Logik пишет:

С нагревом там проблемы нет, мощности их небольшие.

Ну не знаю, 0.3 Вт кому-то много, кому-то мало. А механические напряжения в кристалле контроллера из-за неравномерного нагрева они вполне могут создавать. 

Угу. Квантовый флуктуациии лептонных полей создавать будут. Опять шизику ptr не спится спокойно.

Ну фтыкай, качество фотки конечно не айс, неудобно фоткать в контровом свете да навесу ленту, но температуру вобщем видно - 30С при 22С в хате.

 

Скажи ptr, снова на жесть потянуло, как в той ветке?

ПС. Похоже в диагнозе ptr присутствует и мания перегрева. Ну хоть бы ptr бля руками ж шоле потрогал лентунагрев перед тем как просратся на форуме.

 

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Итак, взлетела лента! Прочитал все комментарии, спасибо что откликнулись. Проблема как предполагалось была в первом диоде, который был варварски откушен из ленты. Последующие диоды радостно заморгали всеми цветами. Их осталось 29. Сегодня вечером буду смотреть вторую ленту, думаю там такие же проблемы. Откусанный диод никак внешне не выглядит перегоревшим, в кристалле ничего не изменилось, ниточки все на месте. (см. фото)

МЕРТВЫЙ

ЖИВОЙ

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

1)      статика не является полезной для WS2812b. желательно огородить нашу ленточку от нее.

2)      Резистор в 300-470 на управляющем входе в ленту больше «презерватив», то бишь, какая никакая защита от статики, но не обязательный элемент.

3)      Сгоревший диод не взрывается, не дымится и даже сука не чернеет, а внешним видом говорит что он все еще огурцом.

4)      По датащиту температура работы от -25 до +80°С, также полевые испытания Logik'a с применением лазерного бластера и некоторые отзывы других пользователей показали, что нагрев диодов не значителен, и причинами выхода из строя отдельных элементов вероятнее всего являются некие другие факторы (та же самая статика)

5)      помимо WS2812b могут встречаться и просто без «b», отличительной особенностью которых является наличие 6 ножек против 4 у b-шных. Про из тепловые качества у меня информации нет.

Уважаемые Logik и ptr, если бы я предвидел то что моя тема станет местом для вашего срача то не стал бы ее открывать. Ей богу, что заставляет вести двух взрослых людей вести себя подобным образом не понимаю. Мания перегрева реальная болезнь. У меня она появилась несколько лет назад когда видеокарта умерла от перегрева. теперь собираю все самое холодненькое. Если раньше на это не обращал внимания…

Для Logik’a

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

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// класс титановый велосипед для тактовой кнопки. (версия 1.0)
// фильтр дребезга, отслеживание событий: нажатие, отпускание, двойное нажатие(doubleclick), нажато и удерживается в течении определённого времени, отпущено и неактивно в течении определённого времени.
#include <Arduino.h>
class BUTTON {
public:
//============================================================================================
// константы настроек класса.
static const byte bounce_            =   50; // длительность отслеживания дребезга.
static const byte doubleclick_       =  250; // длительность отслеживания двойного нажатия.
static const unsigned long timer_    = 5000; // длительность отслеживания неактивности.
static const unsigned int retention_ = 2000; // длительность отслеживания нажатия и удержания.
//============================================================================================
unsigned long start; // старт отсчёта времени.
boolean p;           // состояние пина кнопки.
boolean s;           // программное состояние кнопки.
boolean b;           // состояние таймера фильтра дребезга.
byte    c;           // переменная счётчика двойного нажатия.
boolean t;           // состояние таймера неактивности.
boolean r;           // состояние таймера нажатия и удержания.
//============================================================
boolean click_down;  // событие нажатия.
boolean click_up;    // событие отпускания.
boolean doubleclick; // событие двойного нажатия.
boolean timer;       // событие неактивности.
boolean retention;   // событие нажатия и удержания.
//============================================================
byte _pb;
//============================================================
BUTTON(byte pb) {
_pb = pb;
pinMode(_pb, INPUT);
digitalWrite(_pb, 1);
//===================
start = millis();
p     = digitalRead(_pb);
// p     = !digitalRead(_pb); // отключить тихий старт.
s     = p;
b     = 0;
c     = 0;
t     = 0;
r     = 0;
//==============
click_down  = 0;
click_up    = 0;
doubleclick = 0;
timer       = 0;
retention   = 0;
//==============
}
void read() {
//==============================================================================
boolean np = digitalRead(_pb); // текущее состояние пина кнопки.
unsigned long stop = millis(); // стоп отсчёта времени.
//==============================================================================
click_down  = 0;
click_up    = 0;
doubleclick = 0;
timer       = 0;
retention   = 0;
//==============================================================================
if (np != p) {p = np; click(); start = stop; b = 1; t = 1; r = 1;} // состояние цифрового пина изменилось.
//==============================================================================
if (b != 0          ) {if (stop - start > bounce_     ) {b = 0; click();      }} // фильтр дребезга.
if (c != 0          ) {if (stop - start > doubleclick_) {c = 0;               }} // обнуление счётчика двойного клика.
if (t != 0 && s == 1) {if (stop - start > timer_      ) {t = 0; timer     = 1;}} // неактивность.
if (r != 0 && s == 0) {if (stop - start > retention_  ) {r = 0; retention = 1;}} // нажатие и удержание.
//==============================================================================
}
void click() { // нажатие, отпускание, двойное нажатие.
if (b == 0 && s != p) {s = p;
if (s == 0) {click_down = 1; ++c; if (c == 2) {c = 0; doubleclick = 1;}}
if (s == 1) {click_up   = 1;                                           }
}
}
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <Adafruit_NeoPixel.h>
#define BRIGHTNESS 100
#define BUTTON_PIN   2
#define PIXEL_PIN    6
#define PIXEL_COUNT  72
#define DEBUG
//   NEO_RGB     Pixels are wired for RGB bitstream
//   NEO_GRB     Pixels are wired for GRB bitstream, correct for neopixel stick
//   NEO_KHZ400  400 KHz bitstream (e.g. FLORA pixels)
//   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
BUTTON b_1(BUTTON_PIN);
byte showType = 6;
bool nextType = false;
void setup()
{
  strip.begin();
  strip.show();
  strip.setBrightness(BRIGHTNESS * 2.55);
#ifdef DEBUG
  Serial.begin(115200);
#endif
}
void loop()
{
  button_update();
  startShow(showType);
}
void button_update()
{
  b_1.read();
  if (b_1.click_down)
  {
    nextType = true;
    showType++;
    if (showType == 9)showType = 0;
  }
}
void startShow(int i) {
  nextType = false;
  switch (i) {
    case 0:
      colorWipe(randomColor(), 1);
      break;
    case 1:
    dropFastRun(randomColor(), 20, 1);
      break;
    case 2:
      dropLowRun(randomColor(),5, 5);
      break;
    case 3: rainbow(20);
      break;
    case 4: rainbowCycle(20);
      break;
    case 5: strobo(randomColor(), 100, 200);
      break;
    case 6: sameDropsRun(6,1,1);
      break;
    case 7: cycleDropsRun(6,1);
    break;
    case 8: pendulumDrop(randomColor(),10);
    break;
  }
}
uint32_t randomColor()
{
  static byte oldran32,ran32;
  byte r, g, b;
  oldran32 = ran32;
  while (ran32 == oldran32)ran32 = random(0, 6);
  r = (ran32 == 0 || ran32 == 1 || ran32 == 3) ? 0 : random(150, 255);
  g = (ran32 == 0 || ran32 == 2 || ran32 == 4) ? 0 : random(150, 255);
  b = (ran32 == 1 || ran32 == 2 || ran32 == 5) ? 0 : random(150, 255);
  return strip.Color(r,g,b);
}
void pendulumDrop (uint32_t c,uint16_t speed)
{
  //static int8_t derection;
  //for (int8_t i=0;i<=strip.numPixel();i++)
  //  s
}
void cycleDropsRun(uint8_t dropsNum, uint16_t wail){
  if (!nextType){
    for (int8_t i=0;i<dropsNum;i++)
    {oneColorDrop(i*strip.numPixels()/dropsNum+4,randomColor(),4,1);}
    while (!nextType)
    {
      uint32_t c=strip.getPixelColor(strip.numPixels()-1);
     for (int8_t i=strip.numPixels()-1;i>=0;i--)
     strip.setPixelColor(i,strip.getPixelColor(i-1));
     strip.setPixelColor(0,c);
     strip.show();
     button_update();
    }
  }
}
      
void colorWipe(uint32_t c, uint16_t wait) {
  for (uint8_t i = 0; i < strip.numPixels(); i++) 
    if (!nextType) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
      button_update();
    }
}
void sameDropsRun(uint8_t dropsNum, uint8_t tail, uint16_t wait){
  uint32_t colors[dropsNum];
  uint8_t step=strip.numPixels()/dropsNum;
  for (uint8_t i=0;i<dropsNum;i++)
  colors[i]=randomColor();
  for (uint8_t i= 0; i<strip.numPixels()+tail+1+(dropsNum-1)*step;i++)
  if(!nextType){
    for (uint8_t j=0;j<dropsNum;j++)
      if(i-j*step>0)oneColorDrop(i-j*step,colors[j],tail,wait);
  }    
}  
void dropFastRun(uint32_t c, uint8_t tail, uint16_t wait) {
  for (uint8_t i = 0; i < strip.numPixels() + tail+1; i++)
    if (!nextType) {      
    oneColorDrop(i,c,tail,1);
    delay(wait);
    }
}
void dropLowRun(uint32_t c,uint8_t tail,uint16_t wait)
{
  for (uint8_t i=0; i < PIXEL_COUNT + tail+1; i++)
  oneColorDrop(i, c, tail, wait);
  button_update();
}
void oneColorDrop(uint8_t i, uint32_t c, uint8_t tail,uint16_t wait) {
uint8_t r,g,b;
  r = (uint8_t)(c >> 16),
  g = (uint8_t)(c >>  8),
  b = (uint8_t)c;
  for (uint16_t y = 0; y < wait; y++) {
    strip.setPixelColor(i, map(y, 0, wait, 0, r), map(y, 0, wait, 0, g), map(y, 0, wait, 0, b));
    for(uint8_t j=1;j<=tail;j++)
    strip.setPixelColor(i - j, 	map(y, 0, wait, r/brightnessFade(j-1), r/brightnessFade(j)), 
                        		map(y, 0, wait, g/brightnessFade(j-1), g/brightnessFade(j)), 
                        		map(y, 0, wait, b/brightnessFade(j-1), b/brightnessFade(j)));
    strip.setPixelColor(i - tail-1, 0, 0, 0);
    button_update();
    strip.show();
  }
}
int brightnessFade(uint8_t j)
{
  return (5*j+1);
}
void rainbow(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 255; j++) if (!nextType) {
      {

        for (i = 0; i < strip.numPixels(); i++) {
          strip.setPixelColor(i, Wheel((i + j) & 255));
        }
        strip.show();
        button_update();
        delay(wait);
      }
    }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256; j++) if (!nextType) {

      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j)));
      }
      strip.show();
      delay(wait);
      button_update();
    }

}

void strobo(uint32_t c, uint16_t wait1, uint16_t wait2) {
  for (uint8_t i = 0; i < PIXEL_COUNT; i++)
    if (!nextType)
      strip.setPixelColor(i, c);
  strip.show();
  delay(wait1);
  for (uint8_t i = 0; i < PIXEL_COUNT; i++)
    if (!nextType)
      strip.setPixelColor(i, 0, 0, 0);
  strip.show();
  delay(wait2);

  button_update();
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

circuis здесь. (внимание, присутствует титановый велосипед)

Для ЕвгенияП

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

ptr
Offline
Зарегистрирован: 28.05.2016

Mr.Privet пишет:

что нагрев диодов не значителен, и причинами выхода из строя отдельных элементов вероятнее всего являются некие другие факторы (та же самая статика)

Если бы Вы читали мой пост, а не его совершенно неверное восприятие склочницы, то заметили бы, что я писал про "другие факторы". Не про:

Logik пишет:

мания перегрева

А про

ptr пишет:

механические напряжения в кристалле контроллера из-за неравномерного нагрева

На Вашей фотографии отлично видно, что все три светодиода подогревают кристалл контроллера с одной стороны. А чем этот кристалл приклеен китайцами к медной дорожке платы и какая толщина и теплопроводность этого материала - мне не ведомо.

gena
Offline
Зарегистрирован: 04.11.2012

  Может быть полезно для  первого светодиода подключить между его входом и "земляным" продовом стабилитрон, Вольт на 5,1? В обратном смещении. Пускай свободные электроны стучат в него.

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

ptr пишет:

механические напряжения в кристалле контроллера из-за неравномерного нагрева

На Вашей фотографии отлично видно, что все три светодиода подогревают кристалл контроллера с одной стороны. А чем этот кристалл приклеен китайцами к медной дорожке платы и какая толщина и теплопроводность этого материала - мне не ведомо.

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

ptr
Offline
Зарегистрирован: 28.05.2016

Mr.Privet пишет:

Может этот факт имеет место быть.

Полагаю что смерть моего диода к перегреву контроллера никакого отношения не имеет. 

Может имеет, может и нет. Это есть не более, чем предположение. Может мне просто с партией не повезло.

У Вас, похоже, не этот случай.

slider
Offline
Зарегистрирован: 17.06.2014

у меня с такими чипами проблем небыло :

 

, а с такими (все светодиодные кристаллы охлаждаются только на одну ножку) проблемы:

 

ленты установлены на алюмин. профиль в прохладном месте, поэтому больше склоняюсь что виновато качество (дохнет кристалл микросхема в 50% случаев (помогает тоько замена чипа), отвал ножек кристалла 50% (если защипнуть прищепкой или прижать, то он выздаравливает, но все равно требуется замена) . выпаивать от куда либо на замену их непросто, белый пластик при малой температуре уже плавится и ножки вываливаются. этот белый пластик не плотный и низкотемпературный - поэтому и разваливаются они со временем.  Проще иногда выпаять или расковырять сдохшие и просто замкнуть перемычкой. Чипы дохнут просто так чуть ли не каждый час-день, лента лежит не подвижно. После недели использования так скончались около 5% чипов (около 60 чипов из 1200) . повторюсь - питание хорошее и стабильное.

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

//  Mr.Privet , чем и как фотографируете?

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

slider пишет:

//  Mr.Privet , чем и как фотографируете?

Фоткал на телефон. Сам в шоке от качества, в реальном размере еще красивее. (этот форум жмет картинки сильно). телефон Galaxy S7, режим про с ручной выставлением фокуса на максимально близкое расстояние (макросьемка) и максимальным цыфровым зумом х8. фокусировал движением телефона вперед-назад, светил настольной лампой.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

У меня из 100 штук WS2812B, пара была дохлая (может перегрел, когда паял), а один глючит. На гирлянде хорошо видно, что часть работает, а часть - нет, потом, возможно, прогревается и начинают работать все 98 штук. Брал в прошлом году.

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

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

ЕвгенийП пишет:
Чёэ это как-то напрягает. Вроде, штука достаточно надёжная. Непонятно. Послежу за темой.

Не помню какой именно чип - WS2812 или WS2811 - имеет очень мерзкую особенность - при пропадании GND чип умирает. Безвозвратно.

Т.е. если "на горячую" подключены +5V и DI, и только затем подключается GND, либо в работе неожиданно обрывается GND, резко возрастатающий через DI ток (даже для 10 светодиодов это уже 10*3*15=450 мА) убивает чип.

sstshods
Offline
Зарегистрирован: 24.11.2017

Я тоже намучился с этими пикселями ws2812 заказал их аж 35 метров, собрал из них 5 огромных снежинок, потратил на это просто адовое количество времени! Что в итоге? Все на помойке! С начала все работало и мигало, но спешно начались проблемы на одной из снежинки, ну ладно думаю, перпаяю и фиг с ним, потом перестала работать другая линия, я опять перепаял, потом сдохли сразу 3 линии на других снежинках, я начал злиться, обвинять себя в рукожопости, но этого лучше не становилось. В итоге больше 50% светодиодов вышли из строя в течении 3 месяцев. Пришел на этот форуму и как камень с сердца, оказывается подобное не только у меня, а значит я не рукожопый))) Больше не покупаю эти ws2812 ну реально одни проблемы, а альтернативы с таким шагом пикселя и реза, увы пока нет(((

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

Адафруит пишет вот что: "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."

На всех примерах схем, которые я видел в интернетах, на данные рекомендации покладен огромный болт.

okta
Offline
Зарегистрирован: 10.01.2015

Все ленты подключаю по указанной выше рекоммендации (через резистор). За 1.5 года не сдохло ни одного пикселя. Хотя до этого (пока подключал напрямую) регулярно вырезал горелые на тех же летах, что прекрасно работают сейчас.

Гриша
Offline
Зарегистрирован: 27.04.2014

ws2813 недавно купил, скетч залил, опустил напругу до 4,7В  2 месяца неприрывной работы, БП от компа с хоррррошим запасом.

Напруга опускается очень просто - подбором диода. лента питается с 2 сторон

ну это так, вдруг кто к НГ готовится :)))))))))))))))))))))))))

uldin@mail.ru
Offline
Зарегистрирован: 15.02.2012

Кто нибудь видел эмуляцию ws2812 на 10 ваттных светодиодах и, например, на тини13?

smesher
Offline
Зарегистрирован: 22.01.2019

Привет. Проблема такая-работают только первые 6 светодиодов. Я вырезал неработающий первый диод и припаял ленту -не работает. Сама подсветка реагирует на экран-цвета меняет,только первые 6 диодов. В режиме подсветки работают те же диоды только одним цветом. Ошибок не выдает. Напряжение на выходе ленты-5 вольт как и на входе, цепь не разомкнута.Что делать-вариантов уже нету,спасите пожалуйста(

include <bitswap.h>
#include <chipsets.h>
#include <color.h>
#include <colorpalettes.h>
#include <colorutils.h>
#include <controller.h>
#include <cpp_compat.h>
#include <dmx.h>
#include <FastLED.h>
#include <fastled_config.h>
#include <fastled_delay.h>
#include <fastled_progmem.h>
#include <fastpin.h>
#include <fastspi.h>
#include <fastspi_bitbang.h>
#include <fastspi_dma.h>
#include <fastspi_nop.h>
#include <fastspi_ref.h>
#include <fastspi_types.h>
#include <hsv2rgb.h>
#include <led_sysdefs.h>
#include <lib8tion.h>
#include <noise.h>
#include <pixelset.h>
#include <pixeltypes.h>
#include <platforms.h>
#include <power_mgt.h>

/*
   Управление лентой на WS2812 с компьютера + динамическая яркость
   Создано не знаю кем, допилил и перевёл AlexGyver http://alexgyver.ru/
   2017
*/
//----------------------НАСТРОЙКИ-----------------------
#define NUM_LEDS 92          // число светодиодов в ленте
#define DI_PIN 13            // пин, к которому подключена лента
#define OFF_TIME 10          // время (секунд), через которое лента выключится при пропадаании сигнала
#define CURRENT_LIMIT 2000   // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

#define START_FLASHES 1      // проверка цветов при запуске (1 - включить, 0 - выключить)

#define AUTO_BRIGHT 1        // автоматическая подстройка яркости от уровня внешнего освещения (1 - включить, 0 - выключить)
#define MAX_BRIGHT 255       // максимальная яркость (0 - 255)
#define MIN_BRIGHT 50        // минимальная яркость (0 - 255)
#define BRIGHT_CONSTANT 500  // константа усиления от внешнего света (0 - 1023)
// чем МЕНЬШЕ константа, тем "резче" будет прибавляться яркость
#define COEF 0.9             // коэффициент фильтра (0.0 - 1.0), чем больше - тем медленнее меняется яркость
//----------------------НАСТРОЙКИ-----------------------

int new_bright, new_bright_f;
unsigned long bright_timer, off_timer;

#define serialRate 115200  // скорость связи с ПК
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;  // кодовое слово Ada для связи
#include <FastLED.h>
CRGB leds[NUM_LEDS];  // создаём ленту
boolean led_state = true;  // флаг состояния ленты

void setup()
{
  FastLED.addLeds<WS2812, DI_PIN, GRB>(leds, NUM_LEDS);  // инициализация светодиодов
  if (CURRENT_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CURRENT_LIMIT);

  // вспышки красным синим и зелёным при запуске (можно отключить)
  if (START_FLASHES) {
    LEDS.showColor(CRGB(255, 0, 0));
    delay(500);
    LEDS.showColor(CRGB(0, 255, 0));
    delay(500);
    LEDS.showColor(CRGB(0, 0, 255));
    delay(500);
    LEDS.showColor(CRGB(0, 0, 0));
  }

  Serial.begin(serialRate);
  Serial.print("Ada\n");     // Связаться с компом
}

void check_connection() {
  if (led_state) {
    if (millis() - off_timer > (OFF_TIME * 1000)) {
      led_state = false;
      FastLED.clear();
      FastLED.show();
    }
  }
}

void loop() {
  if (AUTO_BRIGHT) {                         // если включена адаптивная яркость
    if (millis() - bright_timer > 100) {     // каждые 100 мс
      bright_timer = millis();               // сброить таймер
      new_bright = map(analogRead(6), 0, BRIGHT_CONSTANT, MIN_BRIGHT, MAX_BRIGHT);   // считать показания с фоторезистора, перевести диапазон
      new_bright = constrain(new_bright, MIN_BRIGHT, MAX_BRIGHT);
      new_bright_f = new_bright_f * COEF + new_bright * (1 - COEF);
      LEDS.setBrightness(new_bright_f);      // установить новую яркость
    }
  }
  if (!led_state) led_state = true;
  off_timer = millis();  

  for (i = 0; i < sizeof prefix; ++i) {
waitLoop: while (!Serial.available()) check_connection();;
    if (prefix[i] == Serial.read()) continue;
    i = 0;
    goto waitLoop;
  }

  while (!Serial.available()) check_connection();;
  hi = Serial.read();
  while (!Serial.available()) check_connection();;
  lo = Serial.read();
  while (!Serial.available()) check_connection();;
  chk = Serial.read();
  if (chk != (hi ^ lo ^ 0x55))
  {
    i = 0;
    goto waitLoop;
  }

  memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
  for (uint8_t i = 0; i < NUM_LEDS; i++) {
    byte r, g, b;
    // читаем данные для каждого цвета
    while (!Serial.available()) check_connection();
    r = Serial.read();
    while (!Serial.available()) check_connection();
    g = Serial.read();
    while (!Serial.available()) check_connection();
    b = Serial.read();
    leds[i].r = r;
    leds[i].g = g;
    leds[i].b = b;
  }
  FastLED.show();  // записываем цвета в ленту
}

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Посмотрите под лупой 5-7 светодиоды - может там обрыв линии данных, либо непропай чипа.

С другими примерами из библиотеки тоже не работает?

smesher
Offline
Зарегистрирован: 22.01.2019

Тоже не работает. Загружал пример где проверять можно каждый диод по отдельности и он будет мегать, но мегали как раз только первые 6 диодов,остлаьные нет. И суть в том, что когда я первый раз припаял - работало много диодов, штук 15, а когда присоединил остальную ленту- они мигнули - и с того момента работают только первые 6. Подумал, пожет что с диодом первым неработающим- он лопнул чтоли, я его вырезал, присоединил оставшуюся ленту, включил - только первые 6 и горят. Вот пример :
 

#include "FastLED.h"

// How many leds in your strip?
#define NUM_LEDS 92

// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 13
//define CLOCK_PIN 13

// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() { 
      // Uncomment/edit one of the following lines for your leds arrangement.
      // FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
       FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
      // FastLED.addLeds<APA104, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
      
      // FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<SM16716, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<LPD8806, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<P9813, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<APA102, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<DOTSTAR, RGB>(leds, NUM_LEDS);

      // FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<P9813, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
      // FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
}

void loop() { 
  // Turn the LED on, then pause
  leds[91] = CRGB::Red;
  FastLED.show();
  delay(500);
  // Now turn the LED off, then pause
  leds[91] = CRGB::Black;
  FastLED.show();
  delay(500);
}

 

ВН
Offline
Зарегистрирован: 25.02.2016

smesher пишет:
И суть в том, что когда я первый раз припаял - работало много диодов, штук 15, а когда присоединил остальную ленту- они мигнули - и с того момента работают только первые 6.

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

Концы ленты они не равноправные, т.е. с одного конца данные в ленту входят- подаются, с другого выходят.  

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

 

asam
Offline
Зарегистрирован: 12.12.2018

Если сначала горели 6 диодов, а после отрезания первого опять горят 6 (я правильно понял? ), то это похоже на рассинхронизацию тактового сигнала..

 

smesher
Offline
Зарегистрирован: 22.01.2019

Сначала было так

Сначала было так,как на фото выше,потом я присоединил вторую часть ленты просто приложив контакты, получилось так

Пошел смотреть в ленту,нашел такой диод справа

Вырезал его, соединил с новой лентой пайкой-горит все также 6 диодов. Потом оторвался контакт с первого диода, припаял новый диод-горит все также 6 диодов

Гриша
Offline
Зарегистрирован: 27.04.2014

по фото плохо видно, как питается ардуино? запитайте ее от источника ленты, а от компа отсоедините. Заливайте скетч тключив ардуино от ленты, а испытывайте отключив от компа.

Загрузчик в ардуино случайно не меняли? загрузите в ардуино блинк и проверьте на delay 10 сек секундомером соответствие частоты... У меня был глюк с фьюзами и таймар не соответствовал частоте и onewire для ds18b20  работал со сбоями, но работал (как-то).

может ребято чего посоветуют как проверить загрузчик "правильнее" или перезапишите загрузчик от UNO и выбирайте плату как УНО..

ВН
Offline
Зарегистрирован: 25.02.2016

он же писал, что одиночные тесты проходили.

1. ТС. положите фотку места соединения лент.

2. Попробуйте тестировать вторую ленту отдельно от первой.

3. Есть уверенность, что ленты одного типа?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Есть подозрение что ленты (чипы) разные.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

smesher пишет:

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

Если не работает 7-й диод, возможно, неисправен именно он. Но возможно, что неисправен выход у 6-го диода.

Попытайтесь подключитоь фрагмент ленты к выходу 5-го.

MYFRIEND
MYFRIEND аватар
Offline
Зарегистрирован: 31.01.2017

#define NUM_LEDS 144 проверили? должно стоять не 6 а 144 или сколько там у вас 

Мультиметром прозвоните после 6 светодиода GND VCC, обрыв скорее всего, скетчем простейшим любым проверяется вся лента сразу в 1 клик. например таким

#define NUM_LEDS 144
#include "FastLED.h"
#define PIN 3
CRGB leds[NUM_LEDS];
byte counter;
void setup() {
  FastLED.addLeds<WS2811, PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(50);
  pinMode(13, OUTPUT);
}
void loop() {
  for (int i = 0; i < NUM_LEDS; i++ ) {         // от 0 до первой трети
    leds[i] = CHSV(counter + i * 2, 255, 255);  // HSV. Увеличивать HUE (цвет)
    // умножение i уменьшает шаг радуги
  //  leds[3] = CHSV(counter + i * 2, 255, 255);  // HSV. Увеличивать HUE (цвет)
    // умножение i уменьшает шаг радуги
 //      leds[37] = CHSV( 32, 255, 255);  // HSV. Увеличивать HUE (цвет)
    // умножение i уменьшает шаг радуги
 //     leds[39] = CHSV( 32, 32, 255);  // HSV. Увеличивать HUE (цвет)
    // умножение i уменьшает шаг радуги  
     
  }
  counter++;        // counter меняется от 0 до 255 (тип данных byte)
  FastLED.show();
  delay(5);         // скорость движения радуги
}

Далее отрезаете дохлый кусок от 6 светодиодов и если не запустится выбрасывайте или поштучно выпаивайте. 

Проверьте чипы, припаяв data после 6 светодиода где есть возможность припаять если тишина, то сгорели все значит.  Они горят как бенагальские огни. 144 светодиода сгорело за 1 секунду от 12 вольт. Блок питания думал 5вольт как недосмотрел не представляю. Вся лента вылетела в 1 секунду. Сижу "оживляю" как и вы ленту. А ей уже не помочь. Как и вашей скорее всего. Что то её "пальнуло".  

похоже 6й светодиод не передает дальше сигнал по причине однодневной китайской пайки и китайских технологий plug&pray

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Очень странно... "Освоил" сотни метров WS2812, что то таких проблем не ощущал. Один раз в партии из 30 метров попался "горелый" чип, именно горелый - черный. Лента была в силиконе. Может питание выше нормы, вот и горят от перегрева....

MYFRIEND
MYFRIEND аватар
Offline
Зарегистрирован: 31.01.2017

Способ починить любую светодиодную ленту с такими чипами, как знал заказал 100шт. светодиодов отдельно, убитые светодиоды перепаиваете на очень дешевые из мешка, и светодиодная лента сможет вечно работать. Сгорел светодиод - выпаяли, впаяли из мешка 100шт. за 5$ 

smesher
Offline
Зарегистрирован: 22.01.2019

 

 

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

smesher
Offline
Зарегистрирован: 22.01.2019

А можно пожалуйста ссылку на кучу дешевых светодиодов?

b707
Offline
Зарегистрирован: 26.05.2017

MYFRIEND пишет:

 впаяли из мешка 100шт. за 5$ 

а можно ссылочку на 2812 по 5 баксов за сотню?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

А другую плату Arduino прововал?

leks
Offline
Зарегистрирован: 22.10.2017

b707 пишет:

MYFRIEND пишет:

 впаяли из мешка 100шт. за 5$ 

а можно ссылочку на 2812 по 5 баксов за сотню?

Да это полный беспредел ценовой, где такой?

smesher
Offline
Зарегистрирован: 22.01.2019

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

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

leks пишет:

b707 пишет:

MYFRIEND пишет:

 впаяли из мешка 100шт. за 5$ 

а можно ссылочку на 2812 по 5 баксов за сотню?

Да это полный беспредел ценовой, где такой?

На помойке светодиодного завода ))

Гриша
Offline
Зарегистрирован: 27.04.2014

smesher пишет:

 Подал управляющий сигнал на другое место цепи, не работает вообще ничего, кроме этой лампочки.

нечем проверить эту теорию, но вариант такой. если есть кусок рабочей ленты - те самые 6 диодов, берем ультрояркий светодиод и сопротивление 1к. Светодиод минусом на землю, а сопротивление на сигнальную линию, во время передачи сигнала там некое подобие ШИМ и светодиод должен как-то светиться (не очень ярко) таким образрм проверить  по всей цепочки. если светится очень тускло, уменьшать сопротивление (не ниже 220 Ом) при этом постараться, чтобы сигналы управления на светодиоды проходили.   

smesher пишет:

 А то при проверке мультиметром ничего не происходит, если прикладывать щупы в началу ленты Din и концу ленты Dout.

измерения происходят относительно какого-нибудь потенциала, в данном случае относительно +5В и/или -5В.

НА ФОТО видно, что вы забыли оторвать Dout в месте подачи управляющего сигнала, и я немогу утветждать, что вы не зашунтировали сигнал управления выходом впередистоящего, если учесть что он под питанием и должен держать линию воизбежание передачи ложных импульсов на вход следующего диода.

 

smesher
Offline
Зарегистрирован: 22.01.2019

Ну вот, я смог в эту ленту, вот плоды моих стараний во тьме ночной перед экзаменами во время сессии и при свете дня, когда все отмечают сданную/несданную сессии. Вся суть оказалась в следующем: в самом начале коротнул диод номер 7 И номер 8. Но на вид лопнутый был только 7, и обнаружить , что не работает именно 8 было сложно, ведь по всем признакам он был рабочий. Чтобы проверить ленту, распаял все участки соединения ленты , коих было 4, и каждый по отдельности паял к ардуино и проверял работу в программе, которая проверяет каждый диод по отдельности. В итоге неисправна была только та лента, где и было два сгоревших диода,заменил 8 диод на рабочий и вуа-ля.

 -ZWaFD87tqU.jpg 
fEoXy3BYA2c.jpg 
BwHqzx3wqtY.jpg 
Всем большое спасибо за помочь, надеюсь, не обидел ничем)

 

 

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Я аж вздрогнул, увидев банку с икрой...

Присмотрелся - не... не она.

smesher
Offline
Зарегистрирован: 22.01.2019

Хех, скорее всего это была канифоль))

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

белковая ! :)))