Два способа мультиплексирования светодиодов на примере микроконтроллеров AVR

13 февраля 2017

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

Матричная схема

Первой способ заключается в использовании матричной схемы:

Матричная схема мультиплексирования

Резисторы на этой схеме имеют сопротивление, типичное для подключаемых последовательно со светодиодом резисторов. Например, 220 Ом.

Светодиоды объединяются в матрицу, в соответствии с приведенной схемой. Строки и столбцы подключаются к пинам микроконтроллера. Например, если у микроконтроллера есть 16 свободных пинов, это позволяет сделать матрицу 8x8. Таким образом, используя всего лишь 16 пинов, можно управлять матрицей из 64 светодиодов.

Фокус заключается в том, что на самом деле одновременно горят светодиоды, принадлежащие только одной строке или одному столбцу. Допустим, что микроконтроллеру нужно зажечь LED1, LED3, LED5 и LED8. Сначала он подает высокое напряжение на первый столбец и низкое на второй и третий. В первом столбце нужно зажечь LED1 и LED3, поэтому микроконтроллер подает низкое напряжение на первую и третью строку, на вторую подается высокое. В результате ток начинает течь через LED1 и LED3. Через все остальные светодиоды ток не идет, так как диод пропускает ток только в одну сторону. Затем эти светодиоды гаснут и аналогичным образом зажигаются светодиоды в других столбцах.

При достаточно частой смене «кадров» человеческому глазу кажется, что светодиоды горят одновременно. Минимальный FPS в случае со светодиодами составляет 60, но на всякий случай лучше взять 70. В частности, при FPS 60 присутствует еле-еле заметная рябь. Кроме того, при FPS меньше 70-и если вы сфотографируете светодиоды на iPhone, то на фотографии скорее всего увидите мусор. В кино и видеоиграх требования к FPS попроще по той причине, что кадры похожи между собой.

Пример использования матричной схемы для управления семисегментными индикаторами:

Пример использования матричного мультиплексирования

Смотрите, все работает безо всяких счетчиков 4026, магия! Семисегментные индикаторы идеально вписываются в матричную схему. Как раз у нас три индикатора, в каждом по 7 светодиодов (светодиоды, зажигающие точку, в данном примере не используются) с общим катодом. Получаем матрицу 3x7. Всего при помощи десяти пинов происходит управление 21-м светодиодом.

В общем случае, используя N пинов, можно управлять до (N/2)**2 светодиодами. Кроме того, матричную схему легко модифицировать для считывания состояния кнопок. Наконец, ничто не помешает по аналогии сделать кубическую схему или схему еще большего порядка. В таких схемах дополнительно может потребоваться использовать транзисторы или чипы стандартной логики 74xx.

Чарлиплексинг

Чарлиплексинг (он же метод Чарли) легко объяснить на примере следующей схемы:

Схема чарлиплексинга

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

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

Пример использования чарлиплексинга для создания электронных игральных костей:

Пример использования чарлиплексинга

Чтобы было интереснее, в этом проекте я использовал микроконтроллер ATtiny85, который имеет лишь 8 пинов. Из них два используется для питания и еще один представляет собой Reset. Итого остается 5 пинов. Тем не менее, их оказывается достаточно для управления 14-ю светодиодами, и еще один пин остается для считывания кнопки.

На самом деле, при наличии N пинов, чарлиплексинг позволяет управлять до N*(N-1) светодиодов. То есть, если N равен 4, как в нашем случае, то можно управлять лишь 12-ю светодиодами. К счастью, специфика игральных костей такова, что все светодиоды, кроме центральных, загораются в паре с другим светодиодом. Поэтому получилось аж 14 светодиодов, и при этом довольно удобная разводка.

Чарлиплексинг позволяет управлять куда большим числом светодиодов, чем матричный метод. Однако он сложнее в разводке, и его применимость для управления семисегментными индикаторами или RGB-светодиодами ограничена из-за использования в них общего катода. Кроме того, его нельзя использовать для считывания состояния кнопок, как матричный метод. Тем не менее, можно исхитриться, и без использования дополнительных пинов считывать пару лишних кнопок, используя пины, находящиеся в данный момент в Z-состоянии.

Заключение

Исходники к этой заметке вы найдете на GitHub. Стоит отметить, что описанные методы нередко используют в сочетании с декодерами и сдвиговыми регистрами. Однако это уже тема для отдельной заметки.

Как всегда, буду рад любым вашим вопросам и дополнениям.

Дополнение: В продолжение темы мультиплексирования см пост Как я спаял электронные игральные кости на базе ATtiny85.

Метки: , , .

Подпишись через RSS, E-Mail, Google+, Facebook, Vk или Twitter!

Понравился пост? Поделись с другими: