ЗАДАЧА
Требуется управлять светодиодной матрицей 8×8, используя минимальное количество контактов платы Arduino.
РЕШЕНИЕ
Подобно решению из разд. 7.13, количество контактов для управления светодиодной матрицей можно уменьшить, применив микросхему драйвера дисплея. В этом решении используется популярная микросхема драйвера светодиодного дисплея MAX7219 или MAX7221. Подключение драйвера дисплея к плате Arduino и светодиодной матрицы к драйверу показано на рис. 7.16, а в листинге 7.19 приводится скетч для работы с этой схемой.
Рис. 7.16. Подключение драйвера дисплея MAX72xx к плате Arduino для управления светодиодной матрицей 8×8
В скетче используется библиотека с обширными возможностями MD_MAX72XX, которая поддерживает отображение на дисплее текста и фигур, а также выполнение различных трансформаций отображаемого содержимого. Библиотека MD_MAX72XX устанавливается с помощью Менеджера библиотек среды Arduino IDE (подробная информация по установке библиотек приведена в разд. 16.2).
Листинг 7.19. Управление светодиодной матрицей
с помощью драйвера дисплея MAX72xx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | /* Скетч 7219 Matrix demo */ #include <MD_MAX72xx.h> // Контакты платы Arduino для управления драйвером 7219 #define LOAD_PIN 2 #define CLK_PIN 3 #define DATA_PIN 4 // Конфигурируем устройство #define MAX_DEVICES 1 #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, LOAD_PIN, MAX_DEVICES); void setup() { mx.begin(); } void loop() { mx.clear(); // Очищаем дисплей // Отображаем строки и столбцы for (int r = 0; r < 8; r++) { for (int c = 0; c < 8; c++) { mx.setPoint(r, c, true); // Выключаем каждый светодиод модуля delay(50); } // Проходим в цикле по всем возможным уровням яркости for (int k = 0; k <= MAX_INTENSITY; k++) { mx.control(MD_MAX72XX::INTENSITY, k); delay(100); } } } |
Обсуждение работы решения и возможных проблем
В начале скетча создается экземпляр mx объекта MD_MAX72XX, которому в параметрах передается тип устройства, номера контактов для данных загрузки и сигнала тактирования, а также максимальное количество устройств (при последовательном соединении модулей). В главном цикле loop() выполняется очистка дисплея, а затем с помощью функции setPoint() включаются пикселы (светодиоды) матрицы. Включив строку матрицы, скетч проходит в цикле через все возможные уровни яркости, а затем переходит к обработке следующей строки.
В скетче указаны номера контактов для зеленых светодиодов двухцветной светодиодной матрицы 8×8 компании Adafruit (артикул 458). При использовании другой светодиодной матрицы обратитесь к справочному листку на нее, чтобы определить контакты для ее строк и столбцов. Скетч также будет работать и с одноцветной матрицей, поскольку он использует только один из двух цветов матрицы. Если обнаружится, что матрица отображает текст в обратном направлении или не в ожидаемой ориентации, можно попробовать исправить эту ошибку, изменив тип устройства в строке:
1 | #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW с PAROLA_HW |
на GENERIC_HW, ICSTATION_HW или FC16_HW. В примерах библиотеки MD_MAX72XX содержится тестовый скетч MD_MAX72xx_HW_Mapper, который выполняет тестирование и помогает определить, какой тип устройства использовать.
Резистор R1 на рис. 7.16 ограничивает максимальный ток, который может протекать через светодиод. В табл. 7.4 приведены данные номиналов токоограничивающих резисторов из справочного листка драйвера MAX72xx для нескольких значений прямого напряжения светодиода и величины протекающего через него тока.
Таблица 7.4. Номиналы токоограничивающих резисторов (из справочного листка драйвера MAX72xx)
Ток | Прямое напряжение светодиода | ||||
1,5 В | 2,0 В | 2,5 В | 3,0 В | 3,5 В | |
40 мА | 12 кОм | 12 кОм | 11 кОм | 10 кОм | 10кОм |
30 мА | 18 кОм | 17 кОм | 16 кОм | 15 кОм | 14 кОм |
20 мА | 30 кОм | 28 кОм | 26 кОм | 24 кОм | 22 кОм |
10 мА | 68 кОм | 64 кОм | 60 кОм | 56 кОм | 51 кОм |
Величина прямого напряжения зеленых светодиодов матрицы, представленной на рис. 7.16, составляет 2 вольта, а прямой ток — 20 мА. Согласно данным табл. 7.3, для этой комбинации напряжения и тока требуется резистор сопротивлением 38 кОм, но для надежности лучше использовать резистор номиналом 30 или 33 кОм. Конденсаторы емкостью 0,1 и 10 мкФ, подключенные параллельно линиям питания, требуются для того, чтобы предотвратить возникновение импульсных помех при включении и выключении светодиодов матрицы (дополнительная информация по таким конденсаторам приводится в разд. «Использование развязывающих конденсаторов» приложения 3).
Дополнительная информация
Подробная информация по микросхеме драйвера дисплея MAX72xx приведена в ее справочном листке (https://oreil.ly/IH7U7).
Вам могут понадобиться
-
4-х разрядный семисегментный индикатор на базе драйвера TM1637
120₽96₽ -
Arduino. Большая книга рецептов, 3-е изд.
1925 ₽
1501 ₽ -
Умный дом на базе Arduino. Большой набор + КНИГА
15568 ₽
12454 ₽ -
Светодиодная матрица 8*8 с модулем MAX7219
140₽112₽