Опубликовано

Светодиодная матрица 8×8 с драйвером MAX7219

По материалам руководства для набора “Умный дом на базе Arduino. Большой набор + КНИГА

Светодиодная матрица представляет собой набор светодиодов, сгруппированных в квадратную или прямоугольную матрицу. Каждый светодиод имеет отрицательный вывод (катод), который подключен к «земле», и положительный (анод), подключенный к источнику питания. Аноды и катоды соединены так, что образуют столбцы и строки. Таким образом, подавая питание от Arduino на определенные строки и столбцы, мы можем «зажигать» нужный светодиод.

Внешний вид, назначение контактов

Для управления матрицей 8×8 требуются 16 контактов (рис. L3.1, слева). Однако задействовать 16 контактов Arduino UNO для вывода символов на матрицу очень расточительно. Лучшим решением является использование специального расширителя выводов на базе микросхемы MAX7219. В этом случае для управления матрицей достаточно пяти контактов. Такие модули выпускаются в различном исполнении (рис. L3.1, справа).

04-03-1-8x8

Рис. L3.1. Светодиодная матрица 8×8 с модулем MAX7219

Схема подключения

04-03-2-8x8

Рис. L3.2. Схема подключения cветодиодной матрицы 8×8 с модулем MAX7219

Программный код

  1. Загрузите библиотеку LedControl для работы Arduino с модулем MAX7219. Для этого откройте Менеджер библиотек, выполнив команду Инструменты | Управлять библиотеками. Справа вверху в строке поиска введите LedControl. В открывшемся списке выберите LedControl by Eberhard Fahle. Нажмите кнопку Установка.
  2. Загрузите скетч из листинга L3.1 — на матрице появится смайлик, изменяющий «мимику» через каждую секунду.

Листинг L3.1. Вывод динамического смайла на светодиодную матрицу

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "LedControl.h"
 
#include "binary.h"
 
/*
 
DIN подключен к пину 11
 
CLK подключен к пину 13
 
CS подключен к пину 8
 
*/
 
LedControl matr=LedControl(11,13,8,1);
 
// Счастливый смайл
 
byte hf[8]= {B00111100,B01000010,B10011001,B10100101,B10000001,B10100101,B01000010,B00111100};
 
// Нейтральный смайл
 
byte nf[8]= {B00111100,B01000010,B10000001,B10111101,B10000001,B10100101,B01000010,B00111100};
 
// Печальный смайл
 
byte sf[8]= {B00111100,B01000010,B10100101,B10011001,B10000001,B10100101,B01000010,B00111100};
 
void setup() {
 
matr.shutdown(0,false); //Включаем светодиодную матрицу
 
matr.setIntensity(0,8); // Установка яркости на среднее значение
 
matr.clearDisplay(0); // Очистка матрицы
 
Serial.begin(9600);
 
}
 
void loop(){
 
//Вывод счастливого смайла
 
matr.setRow(0,0,hf[0]);
 
matr.setRow(0,1,hf[1]);
 
matr.setRow(0,2,hf[2]);
 
matr.setRow(0,3,hf[3]);
 
matr.setRow(0,4,hf[4]);
 
matr.setRow(0,5,hf[5]);
 
matr.setRow(0,6,hf[6]);
 
matr.setRow(0,7,hf[7]);
 
delay(1000); //задержка 1 с
 
//Вывод нейтрального смайла
 
matr.setRow(0,0,nf[0]);
 
matr.setRow(0,1,nf[1]);
 
matr.setRow(0,2,nf[2]);
 
matr.setRow(0,3,nf[3]);
 
matr.setRow(0,4,nf[4]);
 
matr.setRow(0,5,nf[5]);
 
matr.setRow(0,6,nf[6]);
 
matr.setRow(0,7,nf[7]);
 
delay(1000); //задержка 1 с
 
//Вывод печального смайла
 
matr.setRow(0,0,sf[0]);
 
matr.setRow(0,1,sf[1]);
 
matr.setRow(0,2,sf[2]);
 
matr.setRow(0,3,sf[3]);
 
matr.setRow(0,4,sf[4]);
 
matr.setRow(0,5,sf[5]);
 
matr.setRow(0,6,sf[6]);
 
matr.setRow(0,7,sf[7]);
 
delay(1000); //задержка 1 с
 
}

Вы можете самостоятельно создавать собственные изображения для вывода на матрицу 8×8. Изображение можно смоделировать на обычном листке в клетку, в табличном редакторе MS Excel или онлайн. Например, на ресурсе http://arduino.on.kg/matrix-font можно создать и получить программный код собственного изображения или выбрать готовый символ (рис. L3.3).

04-03-3-8x8

Рис. L3.3. Моделирование изображения на матрице 8×8

Опубликовано

Управление светодиодной матрицей с использованием драйвера дисплея MAX72xx

Раздел из главы 7 “Управление светодиодными устройствами вывода данных” из книги “Arduino. Большая книга рецептов, 3-е изд.” (авторы Джепсон Брайан, Марголис Майкл, Уэлдин Николас Роберт)

ЗАДАЧА

Требуется управлять светодиодной матрицей 8×8, используя минимальное количество контактов платы Arduino.

РЕШЕНИЕ

Подобно решению из разд. 7.13, количество контактов для управления светодиодной матрицей можно уменьшить, применив микросхему драйвера дисплея. В этом решении используется популярная микросхема драйвера светодиодного дисплея MAX7219 или MAX7221. Подключение драйвера дисплея к плате Arduino и светодиодной матрицы к драйверу показано на рис. 7.16, а в листинге 7.19 приводится скетч для работы с этой схемой.

Подключение драйвера дисплея MAX72xx к плате Arduino для управления светодиодной матрицей 8×8Рис. 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).