Индивидуальная адресация светодиодов в мультиплексированной матрице

Я создал свой первый светодиодный проект с помощью светодиодной матрицы 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)?

Возможно ли это с этой конфигурацией?

, 👍2

Обсуждение

Вы ищете «переключение между 0,0 и 1,1 достаточно быстро, этот глаз не может видеть, что он не горит одновременно, но достаточно медленно, чтобы его было видно» - Мультиплексирование, @KIIV

В принципе, вам нужно как минимум 50 Гц, чтобы обмануть ваши глаза (или, на самом деле, мозги)., @Michel Keijzers

@KIIV Спасибо, похоже, работает хорошо., @Ben Robinson


1 ответ


5

Благодаря 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