Индивидуальная адресация светодиодов в мультиплексированной матрице
Я создал свой первый светодиодный проект с помощью светодиодной матрицы 4X4 ручной работы. Катоды соединяются горизонтально, образуя ряды, а аноды соединяются вертикально, образуя столбцы столбцами. Он управляется регистром сдвига, катоды (строки) которого подключены к контактам 0-3, а аноды (столбцы) подключены к контактам 4-7 регистра, управляемого Arduino Nano.
Все это работает, но я столкнулся с ограничением, которого не видел в различных видеороликах и руководствах по изготовлению светодиодных матриц, поэтому я подозреваю, что что-то упускаю.
Этот код зажжет нижний левый светодиод, который я назову позицией (0,0).
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00011110 );
digitalWrite(latchPin, HIGH);
Этот код зажжет светодиод в позиции (1,1), то есть один вверх и один вправо.
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00101101 );
digitalWrite(latchPin, HIGH);
Если я затем объединим их, как показано ниже:
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00111100 );
digitalWrite(latchPin, HIGH);
естественно загораются 4 светодиода: (0,0),(0,1),(1,0) и (1,1).
Это похоже на ограничение подключения светодиодов таким образом, потому что после того, как вы включите строку в данном столбце, вы не сможете отключить его в последующих столбцах или наоборот. т.е. освещение (X,Y) и (A,B) означает, что вы не можете оставить (X,B) и (A,Y) неосвещенными.
Однако в видеороликах, которые я видел вместе с учебными пособиями по созданию матриц аналогичной конструкции, я вижу, как они светятся так, как я не могу воспроизвести.
Как я могу зажечь светодиод в положениях (0,0) и (1,1), не загораясь при этом (0,1) и (1,0)?
Возможно ли это с этой конфигурацией?
@Ben Robinson, 👍2
Обсуждение1 ответ
Благодаря KIIV в комментариях я понял это. По-видимому, хитрость заключается в том, чтобы быстро переключаться между столбцами или строками, никогда не используя два одновременно.
С приведенным ниже кодом, работающим в основном цикле, кажется, что (0,0) и (1,1) горят одновременно, хотя на самом деле они быстро переключаются.
void loop()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00011110 );
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00101101 );
digitalWrite(latchPin, HIGH);
}
Ага. Это распространенная проблема с матричными дисплеями. Обратите внимание, что светодиоды могут загораться по одному ряду или по одному столбцу за раз. Вы меняете состояния всех светодиодов в 1 ряду, затем выключаете их и включаете светодиоды в следующем ряду и т. д., @Duncan C
- Питание светодиодной ленты - Сколько ампер?
- Как управлять встроенными светодиодами Arduino Nano 33 BLE Sense?
- Есть ли функция Adafruit для инвертирования цветов моего экрана для языка Arduino?
- Почему некоторые контакты Arduino Nano (D3, D4, A3, A4, A6, A7) не могут быть установлены на высокий уровень?
- Мигающий светодиод при движении сервопривода
- Не удалось преобразовать «digitalWrite(8u, 1u)» из «void» в «bool»
- Можно ли запитать 25 светодиодов через USB?
- Как погасить светодиод за определенное время с помощью FastLED
Вы ищете «переключение между 0,0 и 1,1 достаточно быстро, этот глаз не может видеть, что он не горит одновременно, но достаточно медленно, чтобы его было видно» - Мультиплексирование, @KIIV
В принципе, вам нужно как минимум 50 Гц, чтобы обмануть ваши глаза (или, на самом деле, мозги)., @Michel Keijzers
@KIIV Спасибо, похоже, работает хорошо., @Ben Robinson