Схема принципиальная светодиодной матрицы сетки 8х8. Подробнее о модуле. Модуль светодиодной матрицы с микросхемой MAX7219


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


Шаг 1: Элементы

8 х 8 Матрица
MAX7219 Драйвер
0.01 мкФ
10 мкФ
Макетная плата
28кОм резистор
перемычки

Шаг 2: Принцип работы светодиодной матрицы


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

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

Если мы хотим контролировать каждый светодиод индивидуально, каждый светодиод в матрице должнен иметь контакт. Для матрицы 8x8 потребуется 64 контакты. Это много! К счастью, есть что-то называют мультиплексированием , которое уменьшает число выводов до 16 для того, чтобы контролировать светодиодную матрицу. Затем могут быть переданы на номер строки или столбца, например, строки 1-8 (R1 - R8) или колонки 1-8 (C1 - C8).

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

Шаг 3: Подключение

Если мультиплексированная матрица подключается к микроконтроллеру, каждый из 16 контактов на матрице должен быть подключен к 16 цифровых линий ввода / вывода. Для этого удобно использовать микросхему MAX7219. Она принимает все 16 пинов матрицы 8х8 и уменьшает число контактов, подключенных к контакту микроконтроллера 3, the data in, Load (CS) and CLK.

Определение контактов на матрице

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

Подключение MAX7219 к матрице

После того, как контакты определены, они могут быть подключены к микросхеме. Глядя на даташит, мы видим, что есть Seg и Dig пины. Контакты Seg подключаются к анодам, контакты Dig подключаются к катодам.Чтобы было легче, на рисунке показана карта какие выводы матрицы подключить к контактам микросхемы MAX7219.

Подключение MAX7219 к Edison

контакты контроллера 4 и 9 -> GND
контакт контроллера 19 -> +5V
контакт контроллера 12 / Load (CS) -> 10
контакт контроллера 13 / Clock -> 11
контакт контроллера 1 / Data In -> контакт 12

Шаг 4: Код

Перед загрузкой программы, нужно загрузить и поместить в библиотеки Arduino библиотеку LedControl.h

Для включения светодиода, необходимо отправить целое число 0 или 1 с помощью ПО. Рисунок можно представить в виде сетки из светодиодов или пикселей. Светодиодам, которые должны быть включены - присваивается 1, светодиоды, которые должны быть выключены - присваивается 0.
Помните, что мы работаем с матрицей колонки катода, так что мы будем посылать данные рядами. Если одна строка выступает как массив, вы можете включить R1, посылая бинарную логику:

R1: 10011001

Затем вы можете включить строки 2 - 8, отправив следующее:

Путем включения и выключения светодиодов в сетке, может быть сделано любое статическое изображение, в пределах ограничений разрешения матрицы. Что делать, если вы хотите создать анимацию? Это проще, чем вы можете подумать. Каждый кадр анимации просто нужно рассматривать как статическое изображение. Загрузите функцию с массивами, которая удерживает каждый кадр анимации. Для того, чтобы изменять частоту кадров, ставьте delay () после каждого кадра со значением в миллисекундах.

Загрузите прилагаемый пример кода и перейдите к следующему шагу, чтобы узнать, как загрузить это в Edison. Программа отображает статический знак восклицания (!), Звездочку (*) и сердце и анимированное взрывающееся сердце.
Скачать файл: (cкачиваний: 225)

Эдисон может быть запрограммирован с помощью Eclipse, и Arduino IDE. Языки, которые могут быть использованы, это C / C ++, Arduino и javascript.

Intel имеет обширную документацию на своем веб-сайте для Edison и Galileo. Ниже перечислены некоторые из основных шагов, которые необходимо учитывать при подготовке к загрузке программы на Edison со ссылками на соответствующие страницы .

Arduino

Проверьте, что ваш Edison прошит до последней прошивки и узнайте, как подключиться к нему через USB. Для того, чтобы загрузить Eclipse, вам также необходимо подключить его к сети Wi-Fi, с Arduino это не обязательно. Скачать Arduino IDE от Intel , когда вы откроете его, вы увидите платы Intel Edison и Galileo в меню Tools. Рекомендуется понимание Arduino перед тем как начать работу с версией Intel.

Светодиодная матрица – удобное средство для отображения информации: во-первых, она ярче обычных TFT-дисплеев, во-вторых, больше по размеру, что в ряде случаев имеет преимущества (если нам не надо отображать фотографии).

При желании без особых затруднений можно найти готовую сборку – матрица 1088 (или любая подобная, 8×8 светодиодов) и в комплекте с ней контроллер MAX7219. Эта небольшая микросхема способна самостоятельно управлять не только отображением светодиодов, но и менять их яркость (для всей матрицы, а не по светодиодам), а также она «знает», как вывести цифры на семисегментный индикатор. Это означает, что разработчику будет меньше работы. Управление достаточно простое, по интерфейсу SPI по трём проводам – выбор устройства, данные и синхронизация.

Также часто такие сборки объединяют в блоки по 4 последовательно, получается мини-дисплей размером 32×8 пикселей, что достаточно удобно – можно отобразить слово длиной до 5 букв. Стоит отметить, что эта сборка умеет передавать данные дальше по цепочке, и 4 штуки последовательно – не предел. Я объединял 4 блока по 4 такие сборки, получался дисплей 128×8 (также можно получить 64×16 при соответствующей программной настройке, это просто), работавший без торможения и обновляющийся 50 раз в секунду. Хотя, в отличие от схемы , здесь программное обновление не нужно – за вывод информации отвечает контроллер на плате, дело программиста – указать, что выводить, а не как.

Для работы с такими сборками есть специальная библиотека для Arduino – Max72xxPanel, доступная на GitHub. Для её корректной работы также требуется подключение библиотек SPI и Adafruit_GFX, но это не проблема. Первая библиотека присутствует по умолчанию в дистрибутиве Arduino IDE, вторая доступна на GitHub.

Инициализируем матрицу

Для начала попробуем инициализировать нашу матрицу. Выводы питания VCC и GND соединяем с аналогичными на плате Arduino, DIN подключаем к выводу 11, CS – 9, CLK – 13. Учтите, что эта нумерация верна для платы Arduino UNO, для других моделей интерфейс SPI может находиться на выводах с другими номерами.

С этой сборкой удобнее работать, «повернув» её программно на 90 градусов. Фактически, у нас есть 4 блока по вертикали и 1 по горизонтали, но отображать будем, как будто она ориентирована горизонтально. Причина простая – 1 столбец занимает ровно 1 байт, удобнее строить изображение.

Пишем начальный программный код для инициализации:

#include #include #include #include #include #include int pinCS = 9; int hBlocks = 1; int vBlocks = 4; byte brightness = 1; Max72xxPanel matrix = Max72xxPanel(pinCS, hBlocks, vBlocks); void setup() { matrix.setIntensity(brightness); matrix.setRotation(0); matrix.fillScreen(LOW); matrix.write(); } void loop() { }

Нажимаем Ctrl+U, загружаем скетч в плату и смотрим на результат, точнее, на полностью погасший дисплей.

Так и должно быть, мы просто очистили его. Попробуйте сами изменить строку 18 следующим образом:

Matrix.fillScreen(HIGH);

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


Простейшую операцию мы выполнили, теперь давайте попробуем что-то написать.

Вывод статического изображения

Для примера возьмём слово из пяти букв, чтобы максимально заполнить матрицу. Можно, конечно, вывести по одному символу на матрицу, но для любой буквы хватает места 5*7 символов, поэтому с учётом интервала получится до 5 букв. Для примера возьмём слово «Старт».

Формируем изображение:


И модифицируем программный код, добавив туда массив с данными для включения определённых светодиодов (приводить не буду, скетч можно скачать для ознакомления по ссылке внизу). Рисовать будем по вертикали, старший бит – верхний ряд. Кроме этого, из кода можно исключить начальное заполнение матрицы, поскольку все светодиоды будут определены явно:

Void setup() { byte x, y; matrix.setIntensity(brightness); matrix.setRotation(0); for (y = 0; y < 32; y++) { for (x = 0; x < 8; x++) { matrix.drawPixel(x, y, leds[y] & (1<

Компилируем скетч, загружаем в плату и смотрим на результат:


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

В этом примере мы используем светодиодную матрицу, на которой будем включать-выключать светодиоды и отображать ASCII символы.

В конце гайда приведено видел с результатом работы, так что не поленитесь - загляните. Уверен, вас впечатлит и вы тут же приметесь за дело.

Необходимые материалы

Для данного небольшого проекта вам понадобятся следующие компоненты:

  • плата Arduino Uno;
  • модуль матричного дисплея с красными светодиодами MAX7219;
  • 5 коннекторов папа-мама;

В данном примере используется плата Arduino Uno, но вы можете использовать любую аналогичный или совместимый микроконтроллер.

Найти модуль матричного дисплея не составит труда. Китайцы уже давно и больших количествах продают из на eBay и Aliexpress. Кроме того, на многих радиорынках Украины и России они тоже есть в наличии. В состав этих модулей входят: 8х8 светодиодная матрица (красного цвета), чип MAX7219 для управления светодиодами, коннекторы, один резистор на 10 кОм, конденсатор на 100 нФ, электролитический конденсатор 10 uF, монтажная плата, на которой все это устанавливается. Можно заказать собранный модуль, можно самому распаять все компоненты. Зависит от вас.


ВАЖНО: матричный светодиодный дисплей является общим катодом. Модуль не работает матрицами, которые имеют общий анод!

Библиотека Arduino для работы с матричным светодиодным дисплеем

Светодиодная матрица (LED matrix) управляется с помощью чипа MAX7219 и библиотеки Arduino .

Самая потрясающая вещь в этой библиотеке - это возможность подключения до 8 матриц и реализовать большой дисплей (более детально будет рассмотрено в отдельном туториале)

Библиотека LedControl library была дополнена некоторыми новыми методами для упрощения отображения символов и строк. Новая версия библиотеки доступна для скачивания по ссылкам:

Для интегрирования библиотеки в вашу Arduino IDE:

Распакуйте файл библиотеки, который вы только что скачали;

Убедитесь, что вы закрыли все открытые окна Arduino IDE;

Найди папку libraries внутри папки, где у вас установлена Arduino IDE (смотрите на рисунке ниже);

Скопируйте разархивированную папку LedControlMS (папку со всем ее содержимым) в папку libraries.


Если все прошло хорошо, вы можете вновь открыть Arduino IDE. В меню File -> Examples должна появится вкладка под названием LedControlMS с четырьмя файлами внутри.

Если у вас возникли дополнительные вопросы по установке библиотек в Arduino IDE, ознакомьтесь со статьей Библиотеки Arduinoгде рассмотрены все возможные сложности и порядок установки библиотек Arduino. Да и вообще, что это такое - библиотеки.

После установки библиотеки можно подключать LED матрицу к плате Arduino .

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

Есть пять контактов, которые надо подключить к соответствующим пинам Arduino.. Подключаем с помощью коннекторов папа-мама:


На рисунке ниже коннекторы имеют цвета, приведенные в пояснениях. Так что можете смело перепроверить подключение с помощью рисунка.




Пример скетча для Arduino

Библиотека LedControl library может работать как с 7-ми сегментными светодиодными дисплеями, так и со светодиодными матрицами. В нашем случае будут использоваться методы для работы со светодиодными матрицами.

Обновленная библиотека, которая была создана для Makespace Madrid позволяет определять алфавит/шрифт символов, которые отображаются на светодиодном матричном дисплее. Кроме того, включено два новых метода: writeString и displayChar. Практические примеры работы различных методов вы можете увидеть в примере MakeSpace_LEDMatrix, который включен в состав библиотеки.

Открыть скетч можно выбрав в Arduino IDE File -> Examples -> LedControlMS -> MakeSpace_ LEDMatrix

Можете загрузить пример на вашу плату Arduino и повосхищаться результатом.

Примечание 1: если у вас на ПК стоит старая версия Arduino IDE (0.x), вам придется изменить расширение скетчей, которые входят в состав библиотеки. Измените расширение файлов с.ino на.pde (MakeSpace_ LEDMatrix.ino -> MakeSpace_ LEDMatrix.pde). В таком случае ваша Arduino IDE сможет прочитать и открырь эти файлы (возможно, вам опять таки надо будет закрыть окно Arduino IDE и только после этого изменить расширение файла).

Примечание 2: перед загрузкой скетча убедитесь, что вы выбрали корректный COM-порт.

Резутьтат!

Обещанный результат на видео ниже:

Если все прошло успешно, ваша светодиодная матрица начнет отрабатывать последовательность операций, включая/выключая светодиоды и отображая различные символы. Уверен, вы с легкостью сможете сопоставить код в скетче с действиями, которые отрабатывает матричный дисплей на базе MAX 7219. Дальше предлагаю вам изменять скетч, экспериментировать с представлеными в библиотеке методами и отображать ваши собственные идеи с помощью матричного дисплея.


В помощь прилагаю ниже в PDF файле некоторые данные о светодиодах, строках и колонках, которые пронумерованы и зашиты в библиотеку LEDControl library. Не бойтесь ошибок! Именно ошибки часто ускоряют процесс обучения!

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Два года назад, когда я только начал заниматься мультикоптерами, мне пришлось сделать небольшой . Поскольку квадрокоптер задумывался сугубо автономным, все что требовалось от этого пульта - это управлять беспилотником во время испытаний и настройки.

В принципе, пульт со всеми возложенными на него задачами справлялся вполне успешно . Но были и серьезные недостатки.

  1. Батарейки в корпус никак не влазили, поэтому приходилось их приматывать к корпусу изолентой:)
  2. Настройка параметров была вынесена на четыре потенциометра, которые оказались очень чувствительными к температуре. В помещении настраиваешь одни значения, выходишь на улицу - а они уже другие, уплыли.
  3. У Arduino Nano, которую я использовал в пульте, есть всего 8 аналоговых входов. Четыре были заняты настроечными потенциометрами. Один потенциометр служил газом. Два входа были подключены к джойстику. Оставался свободен только один выход, а параметров для настройки гораздо больше.
  4. Единственный джойстик был вовсе не пилотным. Управление газом с помощью потенциометра тоже весьма угнетало.
  5. А еще пульт не издавал никаких звуков, что иногда бывает крайне полезно.

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

  • Сделать большой корпус, чтобы в него можно было запихнуть все что хочется сейчас (включая батарейки), и что захочется позже.
  • Как-то решить проблему с настройками, не за счет увеличения числа потенциометров. Плюс, добавить возможность сохранения параметров в пульте.
  • Сделать два джойстика, как на нормальных пилотных пультах. Ну и сами джойстики поставить православные.

Новый корпус

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

Элементы управления и меню

Чтобы управлять кучей параметров, нужно либо разместить на пульте кучу потенциометров и добавить АЦП, либо делать все настройки через меню. Как я уже говорил, настройка потенциометрами не всегда хорошая идея, но и отказываться от нее не стоит. Так что, решено было оставить в пульте четыре потенциометра, и добавить полноценное меню.

Чтобы перемешаться по меню, и менять параметры обычно используют кнопки. Влево, вправо, вверх, вниз. Но мне захотелось использовать вместо кнопок энкодер. Эту идею я подсмотрел у контроллера 3D-принтера.


Разумеется, за счет добавления меню, код пульта распух в несколько раз. Для начала я добавил всего три пункта меню: "Telemetry", "Parameters" и "Store params". В первом окне отображается до восьми разных показателей. Пока я использую только три: заряд батареи, компас и высота.

Во втором окне доступны шесть параметров: коэффициенты PID регулятора для осей X/Y,Z и корректировочные углы акселерометра.

Третий пункт позволяет сохранять параметры в EEPROM.

Джойстики

Над выбором пилотных джойстиков я долго не размышлял. Так получилось, что первый джойстик Turnigy 9XR я добыл у коллеги по квадрокоптерному делу - Александра Васильева, хозяина небезызвестного сайта alex-exe.ru . Второй такой же заказал напрямую на Hobbyking.


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

Питание

В старом пульте я использовал простой регулятор напряжения LM7805, который кормил связкой из 8 батареек AA. Жутко неэффективный вариант, при котором 7 вольт уходили на нагрев регулятора. 8 батареек - потому что под рукой был только такой отсек, а LM7805 - потому что в то время этот вариант мне представлялся самым простым, и главное быстрым.

Теперь же я решил поступить мудрее, и поставил достаточной эффективный регулятор на LM2596S. А вместо 8-ми AA батареек, установил отсек на два LiIon аккумулятора 18650.


Результат

Собрав все воедино, получился вот такой аппарат. Вид изнутри.


А вот с закрытой крышкой.


Не хватает колпачка на одном потенциометре и колпачков на джойстиках.

Наконец, видеоролик о том, как происходит настройка параметров через меню.


Итог

Физически пульт собран. Сейчас я занимаюсь тем, что дорабатываю код пульта и квадрокоптера, чтобы вернуть им былую крепкую дружбу.

По ходу настройки пульта, были выявлены недостатки. Во-первых, нижние углы пульта упираются в руки:(Наверное я немного перепроектирую пластины, сглажу углы. Во-вторых, даже дисплея 16х4 не хватает для красивого вывода телеметрии - приходится названия параметров сокращать до двух букв. В следующей версии девайса установлю точечный дисплей, либо сразу TFT матрицу.




Top