Андрей Смирнов
Время чтения: ~19 мин.
Просмотров: 2

Светодиодная матрица 11×10 на одном микроконтроллере

Исходный код программы на языке С (Си) с пояснениями

Представленная программа реализует горизонтальный скроллинг заданных символов на светодиодной матрице 8х8 под управлением микроконтроллера AVR ATmega32.

Чтобы изменить отображаемые символы просто замените значения в представленном символьном массиве ALPHA[] на необходимые вам.

К примеру, если вы хотите скроллить на светодиодной матрице слово «DAD», то вам необходимо будет заменить значения в символьном массиве ALPHA[] на следующие:

Также в программе вам будет необходимо заменить строку с циклом на следующую:

То есть просто заменить число 142 на число 42.

Таким образом, вы можете скроллить любой текст на светодиодной матрице, внеся соответствующие изменения в представленную программу.

Теперь код программы с комментариями.

Пробное подключение

У матрицы шестнадцать выводов, что представляет определённую проблему при прототипировании. Приходится задействовать практически все выводы платы. Но так как все светодиоды в матрице независимы, мы можем поиграться с одной. Соединим матрицу с платой по следующей схеме: вывод 9 от матрицы соединяем с выводом 2 на плате, а вывод 13 от матрицы с GND через резистор.

При таком подключении мы задействуем самый верхний левый светодиод матрицы. Запускаем скетч мигания светодиодом Blink, чтобы увидеть работу одного светодиода.

В реальных проектах мы должны соединить все выводы матрицы. Так как их шестнадцать, то кроме цифровых портов нам нужно задействовать и аналоговые, которые могут работать как цифровые. В этом случае порт A0 становится 14, A1 — 15 и т.д. Соединив все выводы матрицы, можно включить нужный светодиод, подавая HIGH на вывод ряда и LOW на вывод столбца. Включим светодиод из второй строки и первой колонки.

Работа схемы

Итак, у нас есть 64 светодиода, упорядоченных в форме матрицы. То есть у нас есть 8 столбцов и 8 строк. Все положительные выводы строк соединены вместе. То есть для каждой строки у нас есть один общий положительный вывод для всех 8 светодиодов в ней как показано на следующем рисунке.

Фактически, для 8 строк мы имеем 8 общих положительных выводов. Если рассматривать первую строку, как показано на рисунке, 8 светодиодов с D57 по D64 имеют общий положительный вывод обозначенный ‘POSITIVE0’. Теперь, если мы хотим зажечь один или все светодиоды в первой строке, мы должны подать питание на контакт PIN0 светодиодной матрицы. Аналогично, если мы хотим зажечь светодиод(ы) в любой другой строке, нам необходимо будет подать питание на общий положительный вывод соответствующей строки.

Но это еще не все – кроме этого необходимо еще подать землю на те светодиоды, которые мы хотим зажечь. В светодиодной матрице 8х8 все отрицательные выводы светодиодов в каждом столбце соединены вместе и образуют, таким образом, 8 общих отрицательных выводов

К примеру, все отрицательные выводы в первом столбце соединены вместе в общий контакт PIN-A1 (NEGATIVE7) как показано на следующем рисунке.
Следует обратить внимание на этот факт когда будете спаивать светодиоды на макетной плате (с контактными отверстиями)

Теперь, если мы хотим подать землю на какой-нибудь светодиод в первом столбце нам необходимо ее подать на общий отрицательный вывод PIN-A1 (NEGATIVE7) первого столбца матрицы. Аналогично и для других столбцов матрицы.

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

Управление светодиодной матрицей 8х8 с использованием технологии мультиплексирования

Допустим, мы хотим зажечь светодиод LED57 – для этого нам необходимо подать питание (напряжение высокого уровня) на контакт PIN0 платы Arduino и землю (напряжение низкого уровня) на ее контакт PIN8. Если же мы хотим зажечь одновременно светодиоды LED57 и LED50, то нам будет необходимо подать питание на PIN0, PIN1 и землю на PIN8, PIN9. Но при этом кроме светодиодов D57, D50 также зажгутся светодиоды D49, D58. Чтобы предотвратить это мы будем использовать так называемую технологию мультиплексирования. Подробно эта технология описана в статье про подключение светодиодной матрицы 8х8 к микроконтроллеру AVR ATmega8, здесь же рассмотрим ее кратко.

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

К примеру, нам нужно зажечь светодиоды LED57 и LED50, но чтобы при этом не зажигались светодиоды D49 и D58. Фокус здесь будет состоять в том, что мы сначала подадим питание чтобы зажечь LED57, затем подождем 1 мс, и затем выключим его. Затем мы подадим питание на вторую строку чтобы включить LED50, подождем 1 мс, и выключим его. Этот цикл будет продолжаться на высокой скорости и светодиоды LED57 & LED50 будут включаться и выключаться, в результате чего нашему глазу будет казаться что они постоянно горят. То есть в один момент времени мы подаем питание только на одну строку матрицы, исключая благодаря этому возможность включения светодиодов в других строках матрицы. Таким образом мы сможем отобразить на матрице все необходимые нам символы.

Мы в нашем проекте будем использовать библиотеку LedControlMS.h для того, чтобы нас не заботили все сложности этой технологии мультиплексирования. С использованием данной библиотеки нам всего лишь будет нужно вводить число или символ, который мы хотим отобразить на светодиодной матрице, а все остальное библиотека сделает самостоятельно.

07.Display: RowColumnScanning

В состав Android IDE входит пример для светодиодной матрицы File | Examples | 07.Display | RowColumnScanning. Суть в следующем — с помощью двух потенциометров считываем показания с аналоговых выводов в интервале от 0 до 7. Показания от первого потенциометра указывают на вывод из ряда, а от второго на вывод из колонки матрицы. Таким образом, мы можем крутить ручки двух потенциометров и выбирать, какой светодиод из матрицы следует включить.

Я предлагаю упростить пример. Уберём потенциометры и удалим функцию readSensors() из скетча. Теперь, чтобы включить любой светодиод, нужно указать номер ряда и номер колонки в двумерном массиве и подать на него LOW.

Включим светодиоды по диагонали.

Визуальный редактор

Рассмотрим ещё один пример создания бегущей строки со словами «Я кота». Символы для фразы уже подготовлены. Вы можете создать собственные символы и добавить в код.

Редактор для создания собственных символов для матрицы с драйвером MAX7219

Щёлкайте по квадратам для генерации кода.

Результат

byte customChar = {
	B00000000,
	B00000000,
	B00000000,
	B00000000,
	B00000000,
	B00000000,
	B00000000,
	B00000000
};
8×8 MAX7219Arduino Pin
DIN
CLK
CS

Код для скетча Arduino

#include "LedControl.h"

// initialize the library
/*
  pin 12 is connected to the DIN
  pin 11 is connected to the CLK
  pin 10 is connected to CS
*/
LedControl lc = LedControl(12, 11, 10, 1);

/* we always wait a bit between updates of the display */
unsigned long delaytime = 600;
void setup()
{
  lc.shutdown(0, false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0, 8);
  /* and clear the display */
  lc.clearDisplay(0);
}

void loop()
{
  writeText();
}

void writeText() {
  // Символы для фразы Я люблю кота
  byte Ya = { B00111111,B00100001,B00100001,B00111111,B00000101,B00001001,B00010001,B00100001};
  byte love = { B00000000, B01100110, B10011001, B10011001, B10000001, B01000010, B00100100, B00011000};
  byte K = { B01000100,B01001000,B01010000,B01100000,B01010000,B01001000,B01000100,B01000010};
  byte O = {B00011000, B00100100, B01000010, B01000010, B01000010, B01000010, B00100100, B00011000};
  byte T = { B00111110,B00001000,B00001000,B00001000,B00001000,B00001000,B00001000,B00001000};
  byte A = {B00111000, B01000100, B10000010, B11111110, B10000010, B10000010, B10000010, B10000010};

  
  /* Я */
  for (int i = 0; i 

Ещё один визуальный редактор для создания анимационных эффектов LED Matrix Editor.

Библиотека LEDMatrixDriver

В описании говорится, что библиотека LEDMatrixDriver является наследником устаревшей LedControl. Также доступна через менеджер библиотек. На Гитхабе есть несколько примеров с применением библиотеки. Я использовал пример SetPixel, который заполняет все ряды светодиодов светом поочерёдно.

При подключении использовались пины DIN=11, CS=9, CLK=13.

Дополнительные материалы

Arduino-er: Arduino Uno: scan LED Matrix in Timer Interrupt (+видео)

Arduino-er: Beating Heart animation on 8×8 LED Matrix + Arduino Uno (+видео)

Arduino 8×8 LED Matrix Pong — YouTube (исходники)

Старая библиотека, давно не обновляется.

Элементы платы

Контактные колодки для RPI

Контактные штыри «2×20 PLS» через которые драйвер подключается к микрокомпьютеру Raspberry Pi.

Контроллер матрицы использует почти все пины одноплатника. Свободными остаются контакты: –, , , и .

Разъём подключения источника питания матрицы

Гнездо под штекер «DC Barrel jack» для подключения источника питания светодиодной панели.

Каждая LED панель питается строго от 5 вольт. Потребление тока зависит от вида матрицы.

Рекомендуем использовать встроенный блок питания с выходным напряжением 5 вольт и током до 4 ампер. При подключении наверняка понадобится штекер питания 2,1 мм с клеммником

При подключении нескольких светодиодных панелей, соответственно увеличивайте запас по току в N-раз, где N — количество матриц в цепочке.

На схеме матрицы и контроллера нет встроенного регулятора напряжения. При подаче напряжения более 5 вольт — вы убьёте LED панель и драйвер.

Клеммник подключения питания матрицы

Выходной разъём для питания матрицы. В комплектацию LED панели входит силовой провод питания. Подключите один конец провода в клеммник на драйвере, а второй — в силовой разъём на матрице.

Обвязка защиты

На плате расположена обвязка для защиты модуля от перенапряжения.

Если вы перепутаете полярность проводов — защита не пропустит ток в управляющую цепь. А если вы превысите напряжения более 5 вольт — рискуете получить кирпич из драйвера.

Разъём подключения сигналов на матрицу

Выходной сигнальный разъём для подключения LED панели с интерфейсом «HUB-75».

Вывод Обозначение Контакт RPI Описание
1 R1 GPIO5 Сигнал данных красного цвета для верхней половины матрицы
2 G1 GPIO13 Сигнал данных зелёного цвета для верхней половины матрицы
3 B1 GPIO6 Сигнал данных синего цвета для верхней половины матрицы
4 GND GND Земля
5 R2 GPIO12 Сигнал данных красного цвета для нижней половины матрицы
6 G2 GPIO16 Сигнал данных зелёного цвета для нижней половины матрицы
7 B2 GPIO23 Сигнал данных синего цвета для нижней половины матрицы
8 GND GND Земля
9 A GPIO22 Выбор адреса строки
10 B GPIO26 Выбор адреса строки
11 C GPIO27 Выбор адреса строки
12 D GPIO20 Выбор адреса строки
13 CLK GPIO17 Тактовый сигнал для согласования скорости передачи
14 LAT GPIO20 Управляющий сигнал защёлки
15 OE GPIO4 Пин контроля отображения свечения всего дисплея
16 GND GND Земля

Логические буферы

На плате расположено два логических преобразователя уровней 74HC245. Буферы обеспечивают согласования логики между одноплатным компьютером Raspberry Pi и светодиодной панелью.

Выбор режима вывода

Для обеспечения градиентов цветов матрицы используется программный «ШИМ». В следствии чего при быстрой отрисовки картинки возникают блики и мерцания. Для улучшения качество изображения используйте возможности аппаратного «ШИМ».

Однако «ШИМ» в Raspberry Pi используется для воспроизведения музыки на аналоговом выходе. Соответственно порядок действий:

  1. Выгрузите аудио драйвер
  2. Установите джаммпер в положение «HQ MODE»
  3. Перезагрузите систему

Описание проекта

Этот проект основан на проекте AlexGyver «Матрица на адресных светодиодах с управлением по Bluetooth»
Дальнейшее развитие проекта — vvip-68 «ссылка на репозиторий»

Изменения по справнению с исходным проектом:

  • Поддержка только контроллера с большим объемом памятии наличием WiFi на борту — NodeMCU
  • Другие типы контроллеров (Arduino Mega + WiFi, Wemod D1) — не тестировались.
  • Удалена поддержка управления с кнопок
  • Оставлена одна кнопка управления для переключения режимов, отключения работающего будильника
  • Удалена поддержка управления по Bluetooth
  • Удалена поддержка платы часов реального времени
  • Управление матрицей — через WiFi (локальная сеть)
  • Синхронизация времени с NTP сервером через интернет
  • Адаптированная программа управления матрицей на Andrioid
  • Изменены настройки режимов воспроизведения эффектов
  • Настройки режимов можно изменять из программы со смартфона
    • Яркость матрицы — единая для всех режимов
    • Скорость эффектов — индивидуально для каждого режима
    • Наличие наложения часов на эффекты — индивидуально для каждого режима
    • Включение/исключение режима из списка любимых режимов
  • Настройки сохраняются в энергонезависимой памяти EEPROM
  • К режиму часов добавлен календарь — кратковременное отображение текущей даты поверх эффекта
  • Настройка сервера синхронизации времени
  • Будильник «рассвет», настройки через программу на смартфоне, 7 будильников на каждый день
  • Поддержка звука будильника / звука рассвета звуковой платой MP3 DFPlayer
  • Настройки сетевого подключения (SSID и пароль, статический IP) задаются в программе и сохраняются в EEPROM
  • Если не удается подключиться к сети (неверный пароль или имя сети) — запускается режим ,
    в течение 30 секунд контроллер пытается получить настройки от приложения ESPTOUCH SmartConfig, если этого не удается,
    то создается точка подключения с именем MatrixAP, пароль 12341234, IP 192.168.4.1. Подключившись к точке доступа из приложения
    можно настроить параметры сети. Если после задания параметиров сети WiFi соединение установлено —
    в приложении на смартфоне виден IP адрес подключения к сети WiFi.
  • Быстрое включение режимов лампы белого или заданного цвета из приложения (вся панель светится),
    выключение панели, комбинация лампы с отображением часов, ночные часы (пониженная яркость).
  • Автоматическая установка яркости матрицы в зависимости от уровня внешней освещенности.
  • Два программируемых по времени режима, позволяющие, например, настроить автоматическое выключение экрана матрицы в ночное время и автоматическое же включение матрицы утром.

Прямое подключение к микроконтроллеру.

По своему принципу действия, матричные LED-индикаторы полностью аналогичны семисегментным моделям, за исключением большего числа выводов. Это позволяет использовать классические схемы включения таких устройств, без использования каких-либо ухищрений. Простота реализации, в этом случае, имеет обратную сторону в виде необходимости использования большого числа выводов микроконтроллера. Так для индикатора 5х7 потребуется 12 линий, а 8х8 – 16 управляющих линий. Данный вариант требует также использования ресурсов микроконтроллера. В виду этого, прямое подключение LED матриц к микроконтроллеру наилучшим образом подходит для включения только одного индикатора. В случае необходимости увеличения размеров поля, лучше применять другие схемы. 

Управление матричными LED-индикаторами

Матричный индикатор, содержащий большое количество светодиодов, является интересным вариантом построения разнообразных дисплейных модулей. Основным его достоинством можно считать возможность отображения графической информации и нестандартных символов. Среди недостатков следует отметить необходимость задействования больших ресурсов системы, как на аппаратном, так и на программном уровне.  Связано это с потребностью генерации символов и организации режима динамической индикации. Ниже будут рассмотрены несколько вариантов схем реализации драйверов управления матричными LED-индикаторами. 

Ремонт светодиодного прожектора своими руками

Оригинальный светодиодный прожектор отработав почти четыре года и после месяца неустойчивой работы окончательно погас. Диагностика внешним осмотром не выявила конкретной поломки. Повреждений на деталях драйвера обнаружено не было.

  1. Разбираем прожектор. Снимаем крышку отсека драйвера светодиода и разбираем корпус драйвера.
  2. Откручиваем винты крепления рамки держателя стекла прожектора и винты крепления отражателя. Извлекаем отражатель.
  3. Откручиваем крепление светодиода к радиатору. В моем случае замечен косяк установки светодиода. Смотрите фото.
  4. Паяльником отсоединяем провода питания светодиода и драйвера.
  5. Соединяем провода питания 220 Вольт на драйвер с проводниками питания светодиода. Я это сделал при помощи двухполюсной клеммной колодки.
  6. Очищаем от термопасты место крепления светодиода.
  7. Приклеиваем тепло проводящим клеем LED COB чип. И оставляем клей застывать.
  8. Подрезаем ножницами на отражателе отверстие для установки светодиода для повышения безопасности схемы от замыкания проводов питания на корпус. Смотрите фото и видео.
  9. Припаиваем проводники питания LED COB чипа. Сделайте это аккуратно и ответственно! Дополнительно горячим клеем фиксируем на корпусе прожектора проводники питания чипа. Смотрите видео.
  10. Проверяем работу схемы. Подаем питание 220 Вольт на светодиод. LED COB чип должен светиться. Отключаем питание.
  11. Устанавливаем отражатель. Расстояние от места подключения питания чипа должно быть безопасным до металлических частей отражателя.
  12. Устанавливаем рамку со стеклом, прикручиваем проводник заземления корпуса светодиода и закрываем отсек драйвера прожектора. Делаем заключительную проверку работы отремонтированного прожектора.

Прожектор установлен на заданное место и управляется объемным датчиком движения. Стоимость ремонта с установкой 5 Вт LED COB чипа по деталям просто смешная. Смотрите результат работы по ремонту прожектора на видео.

Для нормальной работы чипа как и для всех светодиодов необходим щадящий температурный режим. Был проведен контроль температуры чипа при долговременной работе прожектора в комнатной температуре. Чип нагрелся только до 30º С.

LED COB чип со встроенным драйвером питания от сети 220 Вольт хорошая альтернатива замены драйвера или светодиода при ремонте LED прожекторов.

sekret-mastera.ru

Исходный код программы

В тексте нашей программы мы запишем десятичные значения для каждого символа. Программа будет переключать эти значения со скоростью 0.2 сек., поэтому будет создаваться эффект скроллинга вверх.

Чтобы изменить набор отображаемых символов вам необходимо будет сменить значения в массиве ALPHA[] на те, которые вам будут нужны.

К примеру, если вы захотите отобразить (проскроллить) слово DAD на светодиодной матрице, то в этом случае массив ALPHA[] будет выглядеть следующим образом:

Общее число значений сейчас 5*10=50, поэтому

Далее приведен полный текст программы.

Arduino

char ground = {8,9,10,11,12,13,A0,A1};

char ALPHA[] = {0,0,0,0,0,0,0,0,0,0,0,
60,102,96,96,96,102,60,0,0,0,
60,24,24,24,24,24,60,0,0,0,
124,102,102,124,120,108,102,0,0,0,
60,102,96,96,96,102,60,0,0,0,
102,102,102,102,102,102,60,0,0,0,
60,24,24,24,24,24,60,0,0,0,
126,24,24,24,24,24,24,0,0,0,
120,108,102,102,102,108,120,0,0,0,
60,24,24,24,24,24,60,0,0,0,
60,102,96,110,102,102,60,0,0,0,
126,96,96,120,96,96,126,0,0,0,
60,102,96,60,6,102,60,0,0,0,
126,24,24,24,24,24,24,0,0,0,
0,0,0,0,0,0,0,0,0,0,0
};
void setup()
{
for (int x=8;x<14;x++)
{
pinMode(x, OUTPUT);
}
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);

for (int i=0;i<8;i++)
{
digitalWrite(ground,HIGH);
}
DDRD = 0xFF;
PORTD =0;
}

void loop()
{
for(int x=0;x<142;x++)
{
for(int a=0;a<20;a++)
{
for (int i=0;i<8;i++)
{
digitalWrite(ground,LOW);
PORTD = ALPHA;
delay(1);
digitalWrite(ground,HIGH);
}
}
}
delay(1000);
}

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

charground8={8,9,10,11,12,13,A0,A1};

charALPHA={,,,,,,,,,,,

60,102,96,96,96,102,60,,,,

60,24,24,24,24,24,60,,,,

124,102,102,124,120,108,102,,,,

60,102,96,96,96,102,60,,,,

102,102,102,102,102,102,60,,,,

60,24,24,24,24,24,60,,,,

126,24,24,24,24,24,24,,,,

120,108,102,102,102,108,120,,,,

60,24,24,24,24,24,60,,,,

60,102,96,110,102,102,60,,,,

126,96,96,120,96,96,126,,,,

60,102,96,60,6,102,60,,,,

126,24,24,24,24,24,24,,,,

,,,,,,,,,,

};

voidsetup()

{

for(intx=8;x<14;x++)

{

pinMode(x,OUTPUT);

}

pinMode(A0,OUTPUT);

pinMode(A1,OUTPUT);

for(inti=;i<8;i++)

{

digitalWrite(groundi,HIGH);

}

DDRD=0xFF;

PORTD=;

}
 

voidloop()

{

for(intx=;x<142;x++)

{

for(inta=;a<20;a++)

{

for(inti=;i<8;i++)

{

digitalWrite(groundi,LOW);

PORTD=ALPHAi+x;

delay(1);

digitalWrite(groundi,HIGH);

}

}

}

delay(1000);

}

Работа схемы

Итак, у нас есть 64 светодиода, объединенных в матрицу. То есть мы имеем 8 строк и 8 столбцов. Объединим все положительные выводы каждой строки в общий провод. Данная ситуация показана на следующем рисунке.

Таким образом, для 8 строк у нас есть 8 общих положительных выводов. Рассматривая первую строку (как показано на рисунке) мы видим что 8 светодиодов с D57 до D64 имеют общий положительный вывод, обозначенный как POSITIVE0. Теперь если мы хотим зажечь один или все светодиоды первой строки мы должны подать питание на контакт A0 светодиодной матрицы. Аналогичным образом, если мы хотим зажечь светодиоды в любой другой строке, мы должны подать питание на соответствующий ей общий вывод.

Но подать питание на общий вывод какой-либо строки еще недостаточно для того чтобы зажечь светодиоды в ней – мы должны подать еще землю на соответствующие светодиоды. В светодиодной матрице отрицательные выводы всех светодиодов конкретного столбца также сгруппированы (объединены) в общий отрицательный вывод этого столбца. Таким образом, мы имеем 8 общих отрицательных выводов столбцов. К примеру, общий отрицательный вывод первого столбца можно обозначить C7 (NEGATIVE7) как показано на рисунке ниже.

Необходимо учесть все эти моменты когда будете запаивать светодиоды в макетную плату.

Теперь, если мы хотим подать землю на любой светодиод в первом столбце, нам необходимо подать землю на контакт PIN-C7 (NEGATIVE7) светодиодной матрицы. Все это справедливо и для других столбцов матрицы.

Теперь, когда мы знаем, как работают общие положительные и отрицательные выводы в матрице, попробуем объединить их чтобы посмотреть как они будут работать вместе. Таким образом, финальная схема текстового дисплея на основе светодиодной матрицы 8х8 под управлением микроконтроллера ATmega32 представлена на следующем рисунке.

Управление светодиодной матрицей 8х8 с помощью мультиплексирования

В представленной схеме если мы хотим включить LED57 нам необходимо подать питание на PORTA0 микроконтроллера ATmega32 и землю на его PORTC0. Если мы хотим одновременно зажечь LED57 и LED50 нам необходимо подать питание на PINA0, PINA1 и землю на PINC0, PINC1. Но эта операция включит не только светодиоды D57, D50, но и светодиоды D49, D58. Чтобы избежать этого мы должны использовать технологию мультиплексирования. Более подробно эта технология рассмотрена в статье про подключение светодиодной матрицы 8х8 к микроконтроллеру AVR, поэтому здесь мы ее рассмотрим лишь кратко.

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

Давайте рассмотрим пример когда мы хотим включить только светодиоды LED57 и LED50, при этом светодиоды D49 и D58 должны оставаться в выключенном состоянии. Технология мультиплексирования заключается здесь в том, что мы сначала подаем питание на первую строку чтобы включить LED57 и ждем 1 мсек, а затем отключаем подачу питания на первую строку. Затем мы подаем питание на вторую строку чтобы включить LED50 и ждем 1 мсек, а затем отключаем подачу питания на вторую строку. Этот цикл мы будем повторять постоянно с высокой частотой, с этой же самой частотой светодиоды LED57 иLED50 будут включаться и выключаться, но человеческий глаз будет воспринимать их непрерывно горящими. То есть в один конкретный момент времени мы подаем питание только на одну строку светодиодной матрицы, что исключает возможность включения светодиодов в других строках матрицы. Эту технологию мы используем чтобы показать все нужные нам символы.

Мы запишем десятичные значения для каждого символа и будем использовать их в программе для микроконтроллера AVR ATmega32. Программа будет переключать эти значения для этого чтобы обеспечить скроллинг символов слева направо на светодиодной матрице.

Матрица с драйвером MAX7219

Существует более удобный вариант матрицы с драйвером MAX7219 в виде отдельного модуля. Есть полностью готовые модули, а есть вариант, когда детали поставляются в разобранном виде и нужно самостоятельно паять.

Благодаря применению SPI модуль имеет только пять выводов с двух сторон: питание, земля и три цифровых вывода.

Модули можно соединять между собой, получая большое табло.

Сначала попробуем вариант включения любого светодиода матрицы вручную. В коде используются несколько функций. Для одиночного модуля вызываем функцию maxSingle(). Если используется несколько модулей, то уберите комментарии с вызовов функций maxAll(), maxOne().

При вызове функции maxSingle() в первом аргументе указываем номер ряда, во втором число в степени двойки — 1, 2, 4, 8 и т.д.

Подключение и настройка

Железная часть

Перед подключением советуем

  1. Установите драйвер светодиодной ленты сверху на Raspberry Pi методом бутерброда.
  2. Скоммутируйте сигнальные линии между собой драйвером и светодиодной матрицей через шлейф. Один контакт шлейфа в выходной разъём на контроллере, а другой — в разъём входящих данных на матрице .
  3. Подключите питание от драйвера на светодиодную матрицу силовым проводом. Один конец провода в клеммник на контроллере, а второй — в разъём на матрице.
  4. Подключите питание на модуль через внешний разъём «DC Barrel jack». Каждая LED панель питается строго от 5 вольт. Потребление тока зависит от вида матрицы.

    Рекомендуем использовать блок питания с выходным напряжением 5 вольт и током не менее 4 ампер. Идеально подойдёт блок питания с выходным напряжением 5 вольт и током 5 ампер. При подключении удобно воспользоватся штекером питания 2,1 мм с клеммником

    При подключении нескольких светодиодных панелей, соответственно увеличивайте запас по току в N-раз, где N — количество матриц в цепочке.

    На схеме матрицы и контроллера нет встроенного регулятора напряжения. При подаче напряжения более 5 вольт — вы убьёте LED панель и драйвер.

  5. Железо собрано. Теперь можно переходить к

Цепочка из матриц

Матрицы легко соединять в цепочку (гирлянду). А потом программным методом выводить информацию на дисплей из матриц.

  1. Соедините сигнальным шлейфом выход первой матрицы ко входу второй матрицы .
  2. Подключите питание от драйвера на светодиодную матрицу силовым проводом. Один конец провода в клеммник на контроллере, а второй — в разъём на второй матрице.

    Максимальное количество матриц в цепочке 12.

Программная часть

  1. Заведите Raspberry Pi.
  2. Скачайте скрипт для настройки одноплатника с LED панелями.
    wget https://raw.githubusercontent.com/amperka/scriptsRPI/master/amperka-rpi-rgb-matrix.sh
  3. Запустите скрипт конфигурации платформы.
    sudo bash amperka-rpi-rgb-matrix.sh

    Откроется меню установки с предложением продолжить/отменить установку.

  4. Жмите смело «Y».
  5. Программа предложит вам выбор вывода изображения:
    1. Режим «High Quality». На матрице выводиться изображение без мерцаний и бликов. Но за качество необходимо платить — необходимо отключить аудио драйвер на вашем одноплатнике. Для активации режима выбирайте «1». Установите джампер на драйвер.Жмите «Y» на продолжения.
    2. Режим «Convenience». При выводе изображений возможны появления мерцаний. Но никаких дополнительных манипуляций делать не нужно и звук останется включенным. Для активации режима выбирайте «2». Снимите джампер с драйвера, если он там был.Жмите «Y» на продолжения.
  6. Начнётся процесс установки и компиляции.
  7. Дождитесь окончания процесса и нажмите кнопку «Y».После чего система перезагрузится.
  8. Залогинтесь в Raspberry Pi.
  9. Проверим наличие скаченной библиотеки. Для этого в домашней директории выполните команду
    ls

    В итоге вы должны увидеть папку «rpi-rgb-led-matrix».

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации