Charlieplexing - это метод управления множеством светодиодов с помощью нескольких выводов ввода / вывода. Чарлиплексирование аналогично мультиплексированию, но в нем используется логика с тремя состояниями (высокий, низкий вход) для значительного уменьшения количества выводов и повышения эффективности по сравнению с мультиплексированием. Метод Charlieplexing назван в честь его изобретателя Чарли Аллена, который изобрел эту технику в 1995 году. Ранее мы использовали метод мультиплексирования в Arduino для сопряжения 4-значного 7-сегментного дисплея и управления светодиодной матрицей 8x8.
Charlieplexing позволяет управлять N * (N - 1) светодиодами, где N - количество контактов. Например, вы можете управлять 12 светодиодами с помощью 4 контактов Arduino 4 * (4-1) = 12. Светодиоды представляют собой диоды, а в диодах ток течет только в одном направлении. Таким образом, в Charlieplexing мы подключаем два светодиода параллельно друг другу, но с противоположной полярностью, так что одновременно включается только один светодиод. Когда дело доходит до Arduino или других плат микроконтроллера, у вас никогда не бывает достаточно контактов ввода / вывода. Если вы работаете над проектом, в котором вам нужно связать ЖК-дисплей, набор светодиодов и некоторые датчики, то у вас уже закончились контакты. В этой ситуации вы можете использовать светодиоды Charlieplex, чтобы уменьшить количество контактов.
В этом уроке мы собираемся использовать технику Charlieplexing для управления 12 светодиодами с помощью 4 контактов Arduino.
Необходимые компоненты
- Arduino UNO
- Светодиод (12)
- 4 резистора (330 Ом)
- Перемычки
- Макетная плата
Принципиальная электрическая схема
В основном, на этой принципиальной схеме 12 светодиодов соединены с 4 выводами Arduino через резисторы. Каждый вывод Arduino связан с тремя светодиодами. Есть шесть групп светодиодов, и в каждой группе подключено по 2 светодиода, и оба светодиода параллельны друг другу, но с противоположной полярностью, так что только один светодиод включается одновременно. Таким образом, согласно принципиальной схеме, чтобы включить светодиод 1, должен быть сигнал ВЫСОКИЙ на контакте A и сигнал НИЗКИЙ на контакте B, а контакты C и D должны быть отключены. Аналогичная процедура будет выполняться для других светодиодов. Полная таблица настроек контактов для каждого светодиода приведена ниже:
СВЕТОДИОД | Пин 8 | Пин 9 | Пин 10 | Штырь 11 |
1 | ВЫСОКО | НИЗКИЙ | ВВОД | ВВОД |
2 | НИЗКИЙ | ВЫСОКО | ВВОД | ВВОД |
3 | ВВОД | ВЫСОКО | НИЗКИЙ | ВВОД |
4 | ВВОД | НИЗКИЙ | ВЫСОКО | ВВОД |
5 | ВВОД | ВВОД | ВЫСОКО | НИЗКИЙ |
6 | ВВОД | ВВОД | НИЗКИЙ | ВЫСОКО |
7 | ВЫСОКО | ВВОД | НИЗКИЙ | ВВОД |
8 | НИЗКИЙ | ВВОД | ВЫСОКО | ВВОД |
9 | ВВОД | ВЫСОКО | ВВОД | НИЗКИЙ |
10 | ВВОД | НИЗКИЙ | ВВОД | ВЫСОКО |
11 | ВЫСОКО | ВВОД | ВВОД | НИЗКИЙ |
12 | НИЗКИЙ | ВВОД | ВВОД | ВЫСОКО |
После подключения мое оборудование выглядит как на изображении ниже. Как видно из изображения, имеется шесть групп светодиодов, в каждой группе по 2 светодиода подключены друг напротив друга. Модуль Arduino UNO питается от порта USB.
Код Пояснение
Полный код с рабочим видео дан в конце этого руководства, здесь мы объясняем полную программу, чтобы понять работу проекта.
В начале кода Arduino определите все контакты, к которым подключены светодиоды. После этого определите общее количество светодиодов и состояние светодиодов.
#define A 8 #define B 9 #define C 10 #define D 11 #define PIN_CONFIG 0 #define PIN_STATE 1 #define LED_Num 12
Теперь создайте матрицу для включения и выключения светодиодов в последовательности, вы можете изменить последовательность, изменив состояние контактов и конфигурацию контактов. Согласно этой матрице сначала включится LED1, затем LED2 и так далее.
int matrix = { // PIN_CONFIG PIN_STATE // ABCDABCD {{ВЫХОД, ВЫХОД, ВХОД, ВХОД}, {ВЫСОКИЙ, НИЗКИЙ, НИЗКИЙ, НИЗКИЙ}}, {{ВЫХОД, ВЫХОД, ВХОД, ВХОД}, {НИЗКИЙ, ВЫСОКИЙ, НИЗКИЙ, LOW}}, {{INPUT, OUTPUT, OUTPUT, INPUT}, {LOW, HIGH, LOW, LOW}}, ………………………………. ……………………………..
Теперь внутри цикла void программа выполнит матрицу LED_COUNT для включения и выключения светодиодов в заданной последовательности.
void loop () { для (int l = 0; l <LED_Num; l ++) { lightOn (l); задержка (1000 / LED_Num); }
Теперь подключите Arduino к ноутбуку, правильно выберите плату и порт, а затем нажмите кнопку «Загрузить». После загрузки кода ваши светодиоды должны начать мигать.
Вот как можно использовать метод Charlieplexing для управления множеством светодиодов с использованием меньшего количества контактов Arduino. Вы можете использовать этот метод для управления большим количеством светодиодов. Например, если вы хотите управлять 20 светодиодами, просто отредактируйте матрицу и добавьте условия для оставшихся светодиодов.
Найдите полный код и рабочее видео ниже.