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

led

Итак, я построил свой Первый светодиодный куб, и эта штука включается!!! Я очень рад этому, но вот в чем моя проблема.

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

Сдвиговые регистры, которые я связал вместе, дают правильный дисплей в 80% случаев, но остальные 20% дают совершенно неправильное освещение светодиодов.

Я использовал 4 сдвиговых регистра 74HC595, соединенных вместе, поэтому я использую только 3 порта Arduino для управления 5*5*5 Куб. Основная форма есть, но те, которые не предназначены для освещения, вызывают много мерцания (или призраков?) В центре куба.

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

Есть ли у кого-нибудь опыт работы со светодиодными кубиками?

Кроме того, я использую только выходные данные enable и disable, чтобы использовать неправильно это не отображается, когда я переношу данные, должен ли я использовать clear?

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

Мой код находится ниже

int clockPin = 8;
int dataPin = 7;
int set = 6;

void setup() 
{
  //set pins to output so you can control the shift register
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(set,OUTPUT);     
}

void loop() 
{
      digitalWrite(set,HIGH); // DISABLES OUTPUT
  // level 1 ( top )
      shiftOut(dataPin, clockPin, MSBFIRST, B00000011);//from left 3rd to the 7th = levels 5-1,, The right first LED
      shiftOut(dataPin, clockPin, MSBFIRST, B11111000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B11000110);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00111111);// Makes the " wire cube "
      digitalWrite(set,LOW);  // enables output
      delay(2);

       digitalWrite(set,HIGH); // DISABLES OUTPUT
 // level 2
      shiftOut(dataPin, clockPin, MSBFIRST, B00000101);//from left 3rd to the 7th = levels 5-1,, The right first LED
      shiftOut(dataPin, clockPin, MSBFIRST, B00010000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00000000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00010001);// Makes the " wire cube "
      digitalWrite(set,LOW);  // enables output 
      delay(2);

      digitalWrite(set,HIGH); // DISABLES OUTPUT     
 // level 3
      shiftOut(dataPin, clockPin, MSBFIRST, B00001001);//from left 3rd to the 7th = levels 5-1,, The right first LED
      shiftOut(dataPin, clockPin, MSBFIRST, B00010000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00000000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00010001);// Makes the " wire cube "
      digitalWrite(set,LOW);   // enables output
      delay(2);

      digitalWrite(set,HIGH); // DISABLES OUTPUT 
 // level 4
      shiftOut(dataPin, clockPin, MSBFIRST, B00010001);//from left 3rd to the 7th = levels 5-1,, The right first LED
      shiftOut(dataPin, clockPin, MSBFIRST, B00010000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00000000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00010001);// Makes the " wire cube "
      digitalWrite(set,LOW);   // enables output
      delay(2);

      digitalWrite(set,HIGH); // DISABLES OUTPUT 
 // level 5 ( bottom )
      shiftOut(dataPin, clockPin, MSBFIRST, B00100001);//from left 3rd to the 7th = levels 5-1,, The right first LED
      shiftOut(dataPin, clockPin, MSBFIRST, B11111000);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B11000110);// Makes the " wire cube "
      shiftOut(dataPin, clockPin, MSBFIRST, B00111111);// Makes the " wire cube "
      digitalWrite(set,LOW);   // enables output
      delay(2);        
}

Любая помощь будет оценена по достоинству

Спасибо

, 👍0


3 ответа


0

У меня есть похожая схема (работает 7-сегментный дисплей); я не использую reset, и для чего-то подобного (так как единственное состояние, которое он сохраняет, - это сброс при отправке новых данных, то есть каждого кадра).

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

Вы можете попробовать посмотреть, имеет ли эффект выдвижной резистор (try >10 Ком) между выводом данных и землей.

Если вы действительно впадаете в отчаяние, возможно, стоит обзавестись осциллографом - посмотреть, что на самом деле происходит на проводе.

,

1

У меня были похожие проблемы при создании этого инструктажа, светодиодного куба 8x8x8. Освещение некоторых светодиодов приводило к тому, что одновременно загорались неправильные светодиоды, хотя, согласно принципиальной схеме, они этого и не предполагали. Неправильные светодиоды, которые загорались, казались случайными, хотя это было воспроизводимо.

Основная причина заключалась в том, что после некоторой отладки с помощью теста непрерывности мультиметра некоторые светодиоды соприкасались там, где не должны были соприкасаться, и поэтому ток тек там, где не должен был течь. Я настоятельно рекомендую исследовать это направление, проверяя, что наземные пути и пути Vcc должным образом изолированы друг от друга. Это должно быть легче сделать с кубом 5x5x5.

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

,

2

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

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

На недавно припаянном процессоре с питанием и заземлением (и сбросом на землю) удержание светодиода на каждом из двух соседних выводов покажет короткую пару, в то время как один светодиод на одном выводе покажет разомкнутое или короткое замыкание на землю (или на +5, если вы ориентируете свой светодиод+резистор таким образом). Я держу несколько светодиодов с резистором, припаянным к катодной или заземленной ножке, чтобы использовать их в качестве цифровых зондов.

,