ЗАДАЧА
Требуется управлять светодиодной матрицей 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
/*
Скетч 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). При использовании другой светодиодной матрицы обратитесь к справочному листку на нее, чтобы определить контакты для ее строк и столбцов. Скетч также будет работать и с одноцветной матрицей, поскольку он использует только один из двух цветов матрицы. Если обнаружится, что матрица отображает текст в обратном направлении или не в ожидаемой ориентации, можно попробовать исправить эту ошибку, изменив тип устройства в строке:
#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-е изд.
2253₽
1622₽ В корзину -
Бесплатная доставкаУмный дом на базе Arduino. Большой набор + книга
16263₽
11900₽ В корзину -

Светодиодная матрица 8*8 с модулем MAX7219
140₽



