Оглавление:

Как подключить управляемую светодиодную матрицу MAX7219 8x8 к микроконтроллеру ATtiny85: 7 шагов
Как подключить управляемую светодиодную матрицу MAX7219 8x8 к микроконтроллеру ATtiny85: 7 шагов

Видео: Как подключить управляемую светодиодную матрицу MAX7219 8x8 к микроконтроллеру ATtiny85: 7 шагов

Видео: Как подключить управляемую светодиодную матрицу MAX7219 8x8 к микроконтроллеру ATtiny85: 7 шагов
Видео: Светодиодная адресная RGB матрица лента 2024, Июль
Anonim
Как подключить управляемую светодиодную матрицу MAX7219 8x8 к микроконтроллеру ATtiny85
Как подключить управляемую светодиодную матрицу MAX7219 8x8 к микроконтроллеру ATtiny85

Контроллер MAX7219, производимый компанией Maxim Integrated, представляет собой компактный драйвер дисплея с общим катодом последовательного ввода / вывода, который может сопрягать микроконтроллеры с 64 отдельными светодиодами, 7-сегментными цифровыми светодиодными дисплеями до 8 цифр, гистограммами и т. Д. -чип представляет собой декодер BCD-кода-B, схему мультиплексного сканирования, драйверы сегментов и цифр и статическое ОЗУ 8 × 8, в котором хранится каждая цифра.

Модули MAX7219 очень удобны в использовании с такими микроконтроллерами, как ATtiny85 или, в нашем случае, Tinusaur Board.

Шаг 1. Аппаратное обеспечение

Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение
Аппаратное обеспечение

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

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

Шаг 2: распиновка и сигналы

Модуль MAX7219 имеет 5 контактов:

  • VCC - мощность (+)
  • GND - земля (-)
  • DIN - ввод данных
  • CS - выбор чипа
  • CLK - Часы

Это означает, что нам нужно 3 контакта на стороне микроконтроллера ATtiny85 для управления модулем. Это будут:

  • PB0 - подключен к CLK
  • PB1 - подключен к CS
  • PB2 - подключен к DIN

Этого достаточно для подключения к модулю MAX7219 и его программирования.

Шаг 3: Протокол

Протокол
Протокол

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

Другими словами, мы отправляем в биты 2 параллельные последовательности - одну для часов, а другую для данных. Это то, что делает программа.

Шаг 4: Программное обеспечение

Программное обеспечение
Программное обеспечение

Этот модуль MAX7219 работает следующим образом:

  • Записываем байты в его внутренний регистр.
  • MAX7219 интерпретирует данные.
  • MAX7219 управляет светодиодами в матрице.

Это также означает, что нам не нужно постоянно обходить массив светодиодов, чтобы зажечь их - контроллер MAX7219 позаботится об этом. Он также может управлять яркостью светодиодов.

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

Во-первых, нам понадобятся некоторые базовые функции для записи в регистры MAX7219.

  • Запись байта в MAX7219.
  • Запись слова (2 байта) в MAX7219.

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

void max7219_byte (данные uint8_t) {для (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Установите для CLK значение LOW if (data & 0x80) // Маскируйте старший бит данных PORTB | = (1 << MAX7219_DIN); // Установите для DIN значение HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Установите для DIN значение LOW PORTB | = (1 << MAX7219_CLK); // Установите для CLK значение HIGH data << = 1; // Сдвиг влево}}

Теперь, когда мы можем отправлять байты на MAX7219, мы можем начать отправку команд. Это делается путем отправки двух байтов - первое - для адреса внутреннего регистра, а второе - для данных, которые мы хотим отправить.

Регистров в контроллере MAX7219 больше десятка.

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

void max7219_word (адрес uint8_t, данные uint8_t) {PORTB & = ~ (1 << MAX7219_CS); // Установить CS на LOW max7219_byte (address); // Отправляем адрес max7219_byte (data); // Отправка данных PORTB | = (1 << MAX7219_CS); // Установить CS на HIGH PORTB & = ~ (1 << MAX7219_CLK); // Установите для CLK значение LOW}

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

uint8_t initseq = {0x09, 0x00, // Регистр режима декодирования, 00 = Без декодирования 0x0a, 0x01, // Регистр интенсивности, 0x00.. 0x0f 0x0b, 0x07, // Регистр ограничения сканирования, 0x07 для отображения всех строк 0x0c, 0x01, // Регистр выключения, 0x01 = Нормальная работа 0x0f, 0x00, // Регистр тестирования дисплея, 0x00 = Нормальная работа};

Нам просто нужно отправить 5 команд выше в последовательности в виде пар адрес / данные. Следующий шаг - зажечь ряд светодиодов.

Это очень просто - мы просто пишем одну команду, где 1-й байт - это адрес (от 0 до 7), а 2-й байт - это 8 бит, представляющих 8 светодиодов в строке.

void max7219_row (адрес uint8_t, данные uint8_t) {if (адрес> = 1 && адрес <= 8) max7219_word (адрес, данные); }

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

Рекомендуемые: