Max7219 подключение 7 сегментного индикатора к arduino

Опубликовано 24.03.2016 9:55:00

Данный модуль собран на базе микросхемы MAX7219 и четырехразрядного семисегментного 0.56" индикатора.

MAX7219, в свою очередь, является светодиодным драйвером управляемым по трем проводам (SPI интерфейс).

Основные технические характеристики:

• Индикатор: Общий катод, 0.56", четырехразрядный

• Каскадное подключение модулей: Да

• Раздельное управление LED сегментами индикатора

• Наличие энергосберегающего/спящего режима с сохранением информации (150мкА).

• Управление яркостью свечения

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

Задействуемые пины Arduino:

• Любые 3 цифровые вывода контроллера

Работа в среде Arduino IDE

Для работы с данным модулем необходима библиотеке LedControl

В Arduino IDE 1.0.6 и выше, данная библиотека уже включена в список стандартных.

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

Информация которая пригодится в программном коде для включения отдельных сегмертов индикатора. Внутри каждого разряда индикатора имется по 7 сегментов (A-G) + 1 точка (DP).

Модуль оборудован пяти-пиновым разъемом стандарта 2.54мм

DIN: Последовательный ввод данных.

На дублирующем разъеме он меняется на DOUT. Служит для каскадного подключения

CLK: Вход тактирования

LOAD: Разрешение приема данных

Привет всем любителям Arduino.

На сегодняшний момент представленно очень много проектов связанных с ардуино, есть сложные и есть простые. Самый первый и простой это пример blink.
Любой из вас кто впервые взял плату ардуино, залил этот скетч, МОЛОДЦЫ, все работает.

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

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

Не в обиду, но оно так и есть, на своем опыте это прошел.

Как работать с драйверами индикаторов MAX7219 и MAX7221 через стандартную библиотеку LedControl с 7 segment индикатором?

Для выполнения своего проекта искал драйвер управления 7 segment индикатором, лучшим и удобным из них с минимальной обвязкой становится

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

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

ВИДЕО DEMO MAX7219 + Arduino + 7 segment

Для воплощения потребуется детали:
1. MAX7219 Display driver в любом корпусе dip или SO.
2. Резистор 10kom, если MAX7219 используется отдельно от готовой платы
3. Естественно ардуинку, чем меньше тем лучше, я собирал на нано.
4. 7 segment display индикатор с общим катодом(минус)
или взять готовую стоит около 160 рублей

По подключению особо говорить нечего подробно и с комментариями написано здесь

Фото взято с сайта, все понятно и доходчиво.

DEMO sketch MAX7219 + Arduino + 7 segment
скачиваем на здоровье на github.com

Копируем и вставляем в свой скетч.

#include "LedControl.h" // Подключаем библиотеку
LedControl lc=LedControl(12,11,10,1); // используемые пины ардуины для подключения, и сколько драйверов в цепочке.
// pin 12 is connected to the CS (CS)(LOAD)
// pin 11 is connected to the CLK (CLK)
// pin 10 is connected to LOAD(DIN)

Шапка скетча, Подключаем библиотеку LedControl.h и прописываем порты к которым подключается MAX7219,
LedControl(12,11,10,1) последняя цифра говорит о том сколько у вас будет подключено драйверов в одной цепочке, их может быть любое количество, и в комментарии напоминание пины ардуино.

void setup()
<
//Инициируем MAX7219
lc.shutdown(0,false);// включаем дисплей энергосбережение дисплей
lc.setIntensity(0,8);// устанавливаем яркость (0-минимум, 15-максимум)
lc.clearDisplay(0);// очищаем дисплей
>

Этот код тоже обязателен, в нем настраиваем энергосбережение, яркость светодиодов от 0 до 15, я выбрал 8 и мне этого достаточно, экспериментируйте и выбирайте нужный параметр.
Последняя строка, очистка дисплея очень нужная вещь, незабываем ей пользоваться, между кодами она часта используется, обратите внимание.

Ну и на по следок, как управлять индикатором и выводить на них хоть что-нибудь.

Первый
Зажигаем определенный LED * Установите статус одного Led
void setLed(int addr, int row, int col, boolean state);
* Params :
* addr адрес дисплея драйвера (количество драйверов подключенных последовательно)
* row сегмент-row(seg) (0.7)
* col цифра-col(dig) (0.7)
* boolean state : true включен led, false выключен led
* at col, row (0,цифра-col(dig), сегмент-row(seg), true) включен led
* at col, row (0,цифра-col(dig), сегмент-row(seg), false) выключен led
* в помощь картинка ниже для определения параметров led

Каждый отдельный светодиод сегмента зажигаем
Схема 4 digital 7 segment indicator/

Поможет вам определится с сегментом (пользуемся).

lc.setChar(0,3,’h’, false);
void setChar(int addr, int digit, char value, boolean dp);

(адрес драйвера, 0 для 7 индикатора номер цифры, hex значения символа, dp вкл и выкл);
отображение символов букв и цифр, а также формате (HEX).
Конечно на 7 сегментом индикаторе все буквы правильно отобразить не получится, хорошо читаются и понимаются
* ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘0’,
* ‘A’, ‘b’, ‘c’, ‘d’, ‘E’, ‘F’, ‘H’, ‘L’, ‘P’,
* ‘.’, ‘-‘, ‘_’, ‘ ‘

void setDigit(int addr, int digit, byte value, boolean dp);
отображение цифр.

Теперь фантазируем и придумываем интересные эффекты, есть идеи пишем в комментариях.


Всем удачи в ваших начинаниях.
С уважением serdgos .

Кто дочитал до конца, тот молодец. BONUS. (советую посмотреть видео).

PS В ближайшее время будет размещена статья о реализации часов с датчиком температуры и влажности DHT11, DS3231, MAX7219, Arduino Nano как это работает можно увидеть в видео.

Как говорится лучше один раз увидеть чем 100 раз услышать.

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

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

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

Модуль светодиодной матрицы с микросхемой MAX7219

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

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

Входной разъем / Выходной разъем :

  • VCC, GND — питание;
  • DIN — вход данных;
  • CS — выбор модуля (chip select);
  • CLK — синхроимпульс.

Работает модуль от напряжения 5 Вольт.

Вывод пикселей с помощью библиотеки Max72xxPanel

Для управления микросхемой MAX7219 воспользуемся библиотекой Max72xxPanel. Скачать её можно по ссылкам в конце статьи.

Установим библиотеку и напишем небольшой код, который будет выводить на дисплей всего одну точку с координатами x=3 и y=4. Точка будет мигать с периодом 600 миллисекунд.

Как уже говорилось ранее, матричные модули с микросхемой MAX7219 можно легко объединять. Именно для этой цели в начале программы мы задаем количество матриц по-горизонтали и по-вертикали. В данном случае используется одна матрица, так что оба этих параметра будут равны 1.

Важно отметить, что после включения и выключения пикселей с помощью функции drawPixel, необходимо вызвать функцию write. Без функции write, пиксели не высветятся на матрице!

Теперь напишем код, который отобразит на матрице смайл. Смайл зашифруем с помощью массива из восьми байт. Каждый байт массива будет отвечать за строку матрицы, а каждый бит в байте за точку в строке.

Примечание. В библиотеке Max72xxPanel есть функция setRotation, которая задает ориентацию изображения на матрице. Например, если мы захотим повернуть смайл на 90 градусов, нужно будет сразу после вызова функции setIntensity вызвать setRotation с соответствующими аргументами:

matrix.setRotation( 0, 1 );

первый параметр — это индекс матрицы, в нашем случае он равен нулю; второй параметр — количество поворотов на 90 градусов.

Вывод текста с помощью библиотеки Adafruit-GFX-Library

Подобным же образом можно выводить на матрицу и любой другой символ, например, букву. Но чтобы иметь возможность отображать любую букву английского алфавита, нам необходимо будет определить в программе целых 26 восьмибайтных массива! Это очень муторно, и разумеется кто-то это уже сделал до нас.

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

Отобразить символ на матрице можно с помощью функции drawChar.

drawChar( x, y, символ, цвет, фон, размер );

Первые два параметра функции отвечают за координаты верхнего левого угла символа. Третий параметр — это сам символ. Цвет символа в нашем случае будет равен 1 или HIGH, так как матрица двухцветная. Фон равен 0 или LOW. Последний параметр «размер» сделаем равным 1.

Напишем программу, которая будет по-очереди выводить на матрицу все буквы фразы: «HELLO WORLD!».

Примечание. В библиотеке Adafruit_GFX имеется множество функций для работы с графикой. Например, drawCircle( 3, 3, 2, HIGH ) начертит окружность с центром <3,3>и радиусом 2. Последний параметр — цвет, но в случае монохромной матрицы он равен 1 или HIGH. Функция drawLine( 0, 0, 3, 6, HIGH ) начертит отрезок между точками <0,0>и <3,6>.

Бегущая строка на max7219

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

Что потребуется?

Для реализации идеи потребуется совсем немного деталей:

  • два светодиодных модуля, состоящих из четырёх матриц 8 на 8 пикселей;
  • соединительные провода;
  • плата Arduino Nano;

Схема

На печатной плате используемого светодиодного модуля расположено 4 матрицы размером 8 на 8 пикселей. Каждое светодиодное табло управляется микросхемой MAX7219.

MAX7219 представляет собой контроллер управления led-дисплеями, матрицами с общим катодом и дискретными светодиодами в количестве до 64 шт. Для более комфортного восприятия информации, выводимой на светодиодное табло, рекомендуется устанавливать несколько модулей. Для этого их объединяют в последовательно включенные группы, то есть выход первого модуля (out) подключают к входу второго модуля (in). Моя сборка состоит из двух модулей (16 матриц), длины которых вполне хватит для удобного прочтения целых предложений. При этом подключение сборки к Arduino производиться точно также как и к одиночному модулю.

Программирование бегущей строки.

Бегущая строка из Arduino и светодиодных модулей под управлением MAX7219 практически готова. Настало время перейти к заключающей, программной части.

Расписывать код не вижу смысла. Он и так хорошо прокомментирован. Однако есть некоторые особенности, о которых стоит упомянуть.

Примечание. Важно. Стандартная библиотека Adafruit_GFX изначально поддерживает только английские шрифты, поэтому ребята из России постарались и переписали библиотеку добавив русские шрифты и всякие вкусняшки. Все библиотеки и скетч доступны у меня на странице в GitHUB.

Кусок кода для работы с com-портом, нужен для того чтобы оперативно менять текст сообщения выводимого на светодиодный модуль. Однако он нужен нам не только для этого. В дальнейшем посредством этой функции мы свяжем наш Telegram Bot и бегущую строку на Arduino.

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

Оцените статью
Topsamoe.ru
Добавить комментарий