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 ответа
У меня есть похожая схема (работает 7-сегментный дисплей); я не использую reset, и для чего-то подобного (так как единственное состояние, которое он сохраняет, - это сброс при отправке новых данных, то есть каждого кадра).
Для отладки я бы предложил посмотреть, есть ли какие-либо шаблоны. Например, если это не происходит на светодиодах, управляемых первым сдвиговым регистром, то это, скорее всего, связано с соединением между ними.
Вы можете попробовать посмотреть, имеет ли эффект выдвижной резистор (try >10 Ком) между выводом данных и землей.
Если вы действительно впадаете в отчаяние, возможно, стоит обзавестись осциллографом - посмотреть, что на самом деле происходит на проводе.
У меня были похожие проблемы при создании этого инструктажа, светодиодного куба 8x8x8. Освещение некоторых светодиодов приводило к тому, что одновременно загорались неправильные светодиоды, хотя, согласно принципиальной схеме, они этого и не предполагали. Неправильные светодиоды, которые загорались, казались случайными, хотя это было воспроизводимо.
Основная причина заключалась в том, что после некоторой отладки с помощью теста непрерывности мультиметра некоторые светодиоды соприкасались там, где не должны были соприкасаться, и поэтому ток тек там, где не должен был течь. Я настоятельно рекомендую исследовать это направление, проверяя, что наземные пути и пути Vcc должным образом изолированы друг от друга. Это должно быть легче сделать с кубом 5x5x5.
Что касается задержки - я предлагаю вам взглянуть на код Arduino в этой инструкции - кажется, что между различными слоями код не использует никакой задержки, только между эффектами. Конечный результат, кажется, отлично работает.
Простой способ проверить короткое замыкание между светодиодами-написать цикл, который зажигает один из них за раз, один сразу за другим, в течение 50 мс или около того. Относительно легко заметить два светодиода, горящих вместе (короткий) или отсутствующее мигание в последовательности (открытый), предполагая, что вы можете видеть все светодиоды сразу.
Обновление (6 лет спустя, но эй - я, так как люди все еще читают этот вопрос):
Я использую скетч, который делает именно это, чтобы помочь найти шорты и открывается, когда я создаю новую плату. Ранее я подразумевал, что вам нужны все подключенные светодиоды, но вам нужно не более 2.
На недавно припаянном процессоре с питанием и заземлением (и сбросом на землю) удержание светодиода на каждом из двух соседних выводов покажет короткую пару, в то время как один светодиод на одном выводе покажет разомкнутое или короткое замыкание на землю (или на +5, если вы ориентируете свой светодиод+резистор таким образом). Я держу несколько светодиодов с резистором, припаянным к катодной или заземленной ножке, чтобы использовать их в качестве цифровых зондов.
- Питание светодиодной ленты - Сколько ампер?
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Светодиод L продолжает гореть
- Улучшенное циклическое переключение цветов RGB.
- Плавное мигание светодиодов
- Остановить мигание светодиодов
- FastLED - Как управлять определенными светодиодами