Часы на светодиодной матрице max7219 своими руками

Добавил пользователь Cypher
Обновлено: 05.10.2024

Установка времени осуществляется кнопкой на Pin-6, зажать на пол сек и отпустить (будет мигать светодиод установленный на Pin-10) выставить время затем снова нажать на 5 сек чтобы время установилось .
Установка будильника кнопкой на Pin-9, зажать на 1 сек (будет мигать светодиод установленный на Pin-10) и отпустить выставить время затем снова нажать на 3 сек чтобы будильник установился, загорится светодиод на Pin-12.
Кнопка на Pin-8 выставляет часы.
Кнопка на Pin-5 выставляет мин.
Кнопка на Pin-А3 выключает будильник (если нажать повторно будильник опять установится на то время которое там уже было выставлено, если время было сбито установится на 00:00).
В 21:00 яркость на часах притухает (чтобы спать не мешало).

Начинка:
Ардуино-нано.
Часы-1307.
Датчик температуры 18В20.
Питание 5V.
Три дисплея на светодиодной матрицы 8х8 и драйвером MAX7219.

MAX7219 – микросхема для управления 7-сегментными индикаторами и матрицами 8х8. Благодаря встроенной динамической индикации и настройке тока этот чип в десятки раз упрощает работу и с теми, и с другими. На китайском рынке есть несколько вариантов исполнения матричных модулей на базе этой микросхемы:


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

Подключение

Модуль подключается к питанию (VCC, GND), остальные пины – управляющие, могут подключаться:

  • Все три (CLK, DI, CS) к любым цифровым пинам микроконтроллера
  • CLK и DI – к пинам шины SPI, а CS – на любой цифровой пин. Как в этом уроке

Рассмотрим подключение по SPI к Arduino Nano и Wemos mini. CS на пин 5 (D1 у Wemos)


Модули обоих типов можно объединять в дисплеи, подключая вход (сторона с пином DI) каждой следующей матрицы к выходу (сторона с пином DO) предыдущей, с синими модулями это сделать проще:


Библиотека GyverMAX7219 позволяет сделать дисплей любого размера, подключая модули зигзагом:


Библиотеки

    + Adafruit-GFX, нужно установить обе библиотеки + GyverGFX, нужно установить обе библиотеки. При установке GyverMAX7219 через менеджер библиотек GyverGFX подтянется автоматически

В примерах на этом сайте мы будем использовать GyverMAX7219 как гораздо более лёгкую и быструю библиотеку. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverMAX7219. Краткая документация находится по ссылкам выше, базовые примеры есть в самой библиотеке.

  • GyverMAX7219 – базовое взаимодействие с матрицей, возможность очистить и поставить точку по координатам
  • GyverGFX – вывод геометрии (линии, прямоугольники, окружности, кривые), вывод картинок из памяти, вывод текста (русский и английский шрифт нескольких размеров)

Объявление матрицы выглядит так:

Для начала работы нужно вызвать begin() . Опционально можно настроить яркость через setBright(0.. 15) и повернуть матрицу setRotation(0.. 3) . На матрицу можно выводить:

Чтобы матрица обновилась – нужно вызвать update() .

Примеры

Инициализируем библиотеку для работы с одной матрицей, подключенной по SPI, пин CS на D5 (D1 на Wemos)

Инициализация дисплея с размером 4х2 матрицы (32×16 точек) будет выглядеть так:

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


Что нам понадобится:

  • LED матрица MAX7219;
  • Соединительные провода;
  • Плата Arduino UNO;
  • USB кабель;
  • ПК.





Подключение

Процесс подключения совсем несложен. Необходимо подключить 5 контактов матрицы к плате:

  • Vcc - 5v
  • Gnd - Gnd
  • DIN (DataIN) - 11
  • CS (LOAD) - 10
  • CLK – 13

На этом все, процесс подключения окончен. Остается только программирование.

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


Тестирование

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

На этом возможности использования матрицы не заканчиваются. Одновременно можно подключить до восьми матриц одновременно. И для этого понадобиться всего 3 лишних контакта. CS, CLK, 5В и Gnd всех матриц можно соединить вместе, а DATAOUT первой матрицы подключить к DATAIN следующей матрицы и т.д.

aave

by aave

Для проекта нам понадобятся:

  • Ардуино UNO (или совместимая плата);
  • модуль с драйвером MAX7219 и LED-матрицей 1088AS (8x8); ;
  • соединительные провода (вот такие);
  • персональный компьютер или ноутбук.

1 Описание драйвера MAX7219

Микросхема MAX7219 выполнена в 24-выводном корпусе. Назначение и расположение выводов показаны ниже:

Конфигурация выводов и типичная схема подключения драйвера MAX7219

Конфигурация выводов и типичная схема подключения драйвера MAX7219

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

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

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

2 Принципы управления драйвером MAX7219

Драйвер MAX7219 управляется по последовательному интерфейсу SPI. Никаких неожиданностей здесь нет, всё стандартно, как мы уже не раз разбирали. Выбор ведомого (CS) низким уровнем, скорость обмена до 10 МГц.

Формат командной посылки драйвера MAX7219

Формат командной посылки драйвера MAX7219

Регистров всего 14, чуть позднее мы познакомимся с большинством из них подробнее. В таблице адреса регистров обозначены как, например, 0xX3. Что это значит? Сигнатура "0x" говорит о том, что дальнейшее число записано в шестнадцатеричном виде. Далее идёт "X", что означает, что первая половина байта не влияет и может быть любой. Я буду здесь всегда ставить ноль. И последнее число, собственно, адрес регистра. В рассматриваемом примере "0xX3" адрес регистра – "3", и будем записывать его как "0x03".

Карта регистров драйвера MAX7219

Карта регистров драйвера MAX7219

3 Подключение и работа с драйвером MAX7219

У меня в наличии есть готовый модуль с драйвером MAX7219 и светодиодной матрицей 1088AS (8 на 8 точек). У модуля есть 2 ряда выводов: VCC, GND, DIN, CS, CLK – это вход модуля, а с противоположной стороны VCC, GND, DOUT, CS, CLK – это выходы модуля.

Модуль с драйвером MAX7219ENG и LED матрицей 1088AS, вид сверху

Модуль с драйвером MAX7219ENG и LED матрицей 1088AS, вид сверху

Понятно, что VCC – это вход питания (5 В), а GND – земля. DIN – вход последовательных данных от микроконтроллера или от предыдущего в цепочке модуля; DOUT – это выход последовательных данных на следующий модуль. CS (он же LOAD) – загрузка данных в драйвер. CLK – вход тактовой частоты.

Модуль с драйвером MAX7219ENG и LED матрицей 1088AS, вид сбоку

Модуль с драйвером MAX7219ENG и LED матрицей 1088AS, вид сбоку

Точнее, под рукой нашлись восемь таких модулей Поэтому предлагаю сразу усложнить задачу: соединить в цепочку несколько драйверов MAX7219. Можно для примера сделать часы в формате ЧЧ:ММ:СС, по одному модулю на цифру или символ ":". Соединение будет предельно простым, каскадным. Это значит, что управляющий сигнал мы подадим только на вход первого модуля в цепочке, а далее соединим по цепочке выходы со входами всех модулей друг за другом. Для надёжности закрепим всю конструкцию на жёсткой основе из обрезка пластикового кабель-канала.

Кстати, 8 полностью включённых панелей при максимальной яркости светодиодов потребляют более 1 А. Необходимо их запитывать от блока питания.

Цепочка из LED матриц и драйверов MAX7219ENG

Цепочка из LED матриц и драйверов MAX7219ENG

Кроме того, раз делаем часы, то нужно откуда-то брать время. Значит, ещё нужен модуль с часами реального времени (RTC ). Например, DS1302. Он будет хранить время. Мы с помощью Arduino будем считывать его и выводить на LED матрицы.

Модуль с часами реального времени DS1302

Модуль с часами реального времени DS1302

4 Изучение драйвера MAX7219с помощью FT2232H

Но прежде чем подключать модули с MAX7219 к Arduino, попробуем поизучать их с помощью отладочной платы с микросхемой FT2232H. Она позволяет обмениваться по SPI с устройствами и не требует программирования. Все настройки делаются в программе SPI via FTDI, и для быстрого знакомства с новым устройством это очень удобно.

Почему команда именно такая? Смторим в документацию и видим, что адрес регистра Display Test – 0x0F. А чтобы перейти в режим теста, нужно в регистр Display Test записать 1 (см. таблицу 10 из технического описания драйвера MAX7219). В режиме теста должны загореться все светодиоды, подключённые к драйверу. Выполним команду один раз: зажглась первая LED панель, после второго выполнения команды уже горят две LED панели. После восьмикратного выполнения команды все восемь светодиодных панелей зажглись.

Цепочка из драйверов MAX7219 в режиме теста

Цепочка из драйверов MAX7219 в режиме теста

Чтобы выйти из режима теста, следует записать 8 раз команду 0F 00. Уже догадались, почему такая команда? Выход из тестового режима осуществляется записью нуля в регистр 0x0F.

После включения драйвер MAX7219 переходит в режим выключения, за который отвечает регистр Shutdown (0xXC). В этом режиме единственные команды, которые мы можем послать – это переход в режим теста и выход из него. Чтобы перевести устройство в рабочий режим, нужно в регистр 0x0C записать "1" (см. таблицу 3 технического описания):

Настройки программы для перевода MAX7219 в рабочий режим

Настройки программы для перевода MAX7219 в рабочий режим

Теперь устройство готово к приёму всех команд.

Драйвер MAX7219 может работать в режиме декодирования или без него. Причём можно включать и отключать режим декодирования для каждого из разрядов дисплея (или столбцов LED матрицы) индивидуально. Давайте отключим режим декодирования. Для этого нужно послать команду 09 00 восемь раз (см. таблицу 4 технического описания). В режиме без декодирования биты D0..D7 отвечают за сегменты индикатора. Или, как в нашем случае, за один ряд светодиодов LED панели.

Соответствие битов D0..D7 сегментам в режиме без декодирования

Соответствие битов D0..D7 сегментам в режиме без декодирования

Режим с декодированием используется, когда драйвер MAX7219 подключён к 7-сегментному индикатору. Этот режим позволяет передавать драйверу число, и он сам зажигает нужные сегменты дисплея, чтобы отобразить это число на дисплее. Но так как в нашем случае к драйверу подключена LED панель, то режим с декодированием нам не подходит.

Давайте для примера зажгём в первой строчке всех панелей убывающее число светодиодов: на первой панели в первой строчке будет гореть 8 светодиодов, на второй – 7, и так далее. Для этого мы должны так же послать 8 команд, но теперь они будут разные. За запись в первую строчку отвечает регистр Digit 0 (0x01). Кроме того, мы имеем сдвиговый регистр, поэтому команда, которую мы пошлём первой, окажется в последнем регистре. То есть сначала мы управляем последним регистром, затем предпоследним, и так далее. Таким образом, вот последовательность команд:

Первое число – номер регистра (Digit 0), второе число – то, что мы записываем в регистр. В скобках указано двоичное представление того, что записываем в регистр. Единицы будут горящими светодиодами на LED панели, нули – потухшими.

Горит первая строка с убывающим числом светодиодов

Горит первая строка с убывающим числом светодиодов

Максимальная и минимальная яркости: управление яркостью драйвером MAX7219

Максимальная и минимальная яркости: управление яркостью драйвером MAX7219

Теперь мы знаем, как управлять драйвером MAX7219 и уже почти готовы подключить его к Arduino. Осталось только освоить ещё одну деталь нашего проекта: часы реального времени DS1302. О том, как это сделать, подробно описано в этой статье.

Сегодня в уроке покажу как подключить к Arduino светодиодную матрицу на MAX7219. Матрица состоит из 8 рядов и 8 столбцов, всего 64 светодиода, которыми управляет драйвер MAX7219 . В этом Arduino уроке буду использовать модуль из 4 матриц на базе драйвера MAX7219 , но это все те же матрицы, просто установлены в модуль с 4 драйверами. В дальнейшем буду подключать и 16, и 32, и, возможно, 64 матрицы. А пока, в рамках данного урока, научу управлять 1 матрицей и поиграю с 4 матрицами данного модуля.

 В этом Arduino уроке буду использовать модуль из 4 матриц на базе драйвера MAX7219

Технические параметры матрицы 8х8.

  • Драйвер: MAX7219;
  • Количество светодиодов на индикаторе 1088BS: 64;
  • Тип индикаторов 1088BS: общий катод;
  • Цвет светодиодов: красный;
  • Диаметр одного светодиода: 3 мм;
  • Интерфейс подключения матрицы: SPI;
  • Напряжение питания: 5 В;
  • Размер матрицы: 32 х 32 х 14 мм;

Как устроена матрица 8х8

Как указывалось ранее, эта матрица имеет 8 столбцов и 8 строк. Каждый светодиод индексируется от 0 до 7. Вот рисунок для лучшего понимания:

Технические параметры матрицы 8х8 на базе драйвера MAX7219

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

Например, если вы хотите отобразить смайлик, вот что вам нужно сделать:

Например, если вы хотите отобразить смайлик, на матрицу MAX7219

Подключение светодиодной матрицы 8×8 на MAX7219 к Arduino.

Для выполнения Arduino урока нам понадобится :

    или Arduino NANO. 8×8 на MAX7219 или 32×8 на MAX7219.
  • Провода DuPont, 2,54 мм.

Для подключения необходимо пять проводов, которые чаше всего идут в комплекте с матрицей. Подключаем вывод CLK (MAX7219 ) к выводу 13 (Arduino), вывод CS подключаем к выводу 9, вывод DIN подключаем к выводу 11. Питание подключается VCC к +5В и GND к GND.

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

Подключение матрицы MAX7219 к Arduino NANO аналогично.

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

Схема подключения модуля с 4 матрицами ни чем не отличается. Все подключается к тем же пинам Arduino UNO .

Схема подключения модуля с 4 матрицами

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO будет вот такой.

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO

Установка библиотек Adafruit_GFX и Max72xxPanel.

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

Для установки этих библиотек выполните следующие действия.
1. Откройте Arduino IDE и перейдите в раздел Скетч > Подключить библиотеку > управление библиотеками .

Должен открыться менеджер библиотек.

2. Укажите “ GFX” в поле поиска, выберете из списка и установите библиотеку от Adafruit GFX.

Аналогично установите вторую библиотеку, для этого в поле поиска укажите “GFX”

 Библиотеку Max72xxPanel можно установить из zip архива

4. После установки библиотеки перезагрузите среду разработки Arduino.


Примеры кода работы с матрицей MAX7219

Пример 1. Вывод двух точек на матрицу MAX7219 в среде Arduino IDE.

Вывод двух точек на матрицу MAX7219 в среде Arduino IDE.

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

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

Пример 2 . Построчное заполнение матрицы MAX7219.

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

Пример 3 . Вывод линий по диагонали матрицы MAX7219.

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

Пример 4 . Рисуем квадрат по контуру матрицы MAX7219.

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

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

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

Пример 5 . Мигающий прямоугольник контура матрицы MAX7219.

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

Пример 6 . Вывод графических элементов на MAX7219 в среде Arduino IDE.

Выше уже был приведен пример вывода смайлика на матрицу. Если вы заметили, для каждого ряда справа представлен двоичный код. 1 - светодиод включен, 0 - выключен. Используя данный массив можно на матрицу вывести графические элементы. В нашем примере это 3 самйлика.

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

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

 программу PixelToMatrix

Итоги урока.

Как видно из примеров, выводить информацию на матрицу достаточно просто. В следующем уроке покажу как выводит текст на Русском языке на MAX7219 в среде Arduino IDE .

 как выводит текст на Русском языке на MAX7219 в среде Arduino IDE

Не забывайте оставлять ваше мнение и предложения в комментариях.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Читайте также: