Рейтинг@Mail.ru

Как подключить MAX7219 к Arduino

aave by aave
Станьте первым комментатором! Arduino
Print Friendly, PDF & Email
Разбираемся, как подключить к Arduino драйвер 8-и разрядного светодиодного индикатора с последовательным интерфейсом MAX7219 и как им управлять. Сделаем часы реального времени с помощью нескольких объединённых LED-матриц.

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

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

Микросхема MAX7219 – это компактный драйвер дисплея, который позволяет управлять 7-сегментными индикаторами разрядностью до 8 цифр или 64 отдельными светодиодами. Сам драйвер управляется по последовательному интерфейсу (чаще всего SPI) с помощью микроконтроллера, например, Arduino. MAX7219 позволяет изменять состояние каждого сегмента или светодиода без обновления состояния всех остальных выводов. А также он позволяет создавать цепочку из аналогичных драйверов, чтобы управлять большим количеством подключённых светодиодов.

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

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

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

Назначение выводов драйвера MAX7219
Название выводаНазначение
DINВход последовательных данных для управления драйвером.
DOUTВыход последовательных данных для соединения в цепочку со следующим драйвером.
DIG 0...DIG 7Выходы управления разрядами 8-символьного сегментного дисплея.
SEG A...SEG G, DPВыходы управления отдельными сегментами и десятичной точкой.
CLKВход тактовой частоты последовательного интерфейса, до 10 МГц.
LOADВход загрузки данных. Данные «защёлкиваются» по фронту отрицательного импульса.
ISETРегулировка максимального потребляемого тока на один сегмент (следовательно, яркости).
V+Питание, 5±0.5 В.
GNDЗемля.

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

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

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

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

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

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

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

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

MSB означает most significant bit, т.е. наиболее значимый бит. Это старший бит в байте. Напротив, LSB означает least significant bit, т.е. наименее значимый бит. Это младший бит байта.

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, и для быстрого знакомства с новым устройством это очень удобно.

Для начала переведём все драйверы MAX7219 в цепочке в режим теста. Для этого необходимо в каждое из устройств в нашей цепочке передать команду 0F 01. В драйвере MAX7219 имеется сдвиговый регистр, и нам нужно «протолкнуть» команду по всем регистрам в цепочке. Чтобы команда прошла по всей цепочке, необходимо повторить её выдачу 8 раз (по числу драйверов в цепочке).

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

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

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

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

Кстати, если в поле количества раз поставить 8, то можно записать команду за одно нажатие на кнопку «Записать».

После включения драйвер 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). Кроме того, мы имеем сдвиговый регистр, поэтому команда, которую мы пошлём первой, окажется в последнем регистре. То есть сначала мы управляем последним регистром, затем предпоследним, и так далее. Таким образом, вот последовательность команд:

    01 01 (00000001)
    01 03 (00000011)
    01 07 (00000111)
    01 0F (00001111)
    01 1F (00011111)
    01 3F (00111111)
    01 7F (01111111)
    01 FF (11111111)

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

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

Теперь давайте изменим яркость свечения LED панели. Для этого необходимо в регистр Intensity (0x0A) записать число от 0 до 15 (0x0F), где "0" соответствует минимальной яркости, а 0x0F – максимальной (см. таблицу 7 технического описания). Я поставлю что-то около нуля, например, 1. Для этого нужно 8 раз отправить команду 0A 01.

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

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

5Подключение драйвера MAX7219к Arduino

Продолжение следует...

Скачать вложения:

Последнее изменениеСреда, 03 Март 2021 22:14 Прочитано 3019 раз

Поделиться

Print Friendly, PDF & Email

Оставить комментарий