Съдържание:

Как да взаимодействаме с MAX7219 управлявана LED матрица 8x8 с микроконтролер ATtiny85: 7 стъпки
Как да взаимодействаме с MAX7219 управлявана LED матрица 8x8 с микроконтролер ATtiny85: 7 стъпки

Видео: Как да взаимодействаме с MAX7219 управлявана LED матрица 8x8 с микроконтролер ATtiny85: 7 стъпки

Видео: Как да взаимодействаме с MAX7219 управлявана LED матрица 8x8 с микроконтролер ATtiny85: 7 стъпки
Видео: Программирование МК ESP32. Урок 18. FreeRTOS. Event Groups 2024, Юли
Anonim
Как да взаимодействаме с MAX7219 управлявана LED матрица 8x8 с микроконтролер ATtiny85
Как да взаимодействаме с MAX7219 управлявана LED матрица 8x8 с микроконтролер ATtiny85

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

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

Стъпка 1: Хардуерът

Хардуерът
Хардуерът
Хардуерът
Хардуерът

Модулите MAX7219 обикновено изглеждат така. Те имат входна шина от едната страна и изходна шина от другата. Това ви позволява да свържете последователно 2 или повече модула, т.е. един след друг, за да създадете по -сложни настройки.

Модулите, които използваме, могат да се свързват във верига с помощта на 5 малки джъмпера. Вижте снимката по -долу.

Стъпка 2: Pinout и сигнали

Модулът 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 данни) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Задайте CLK на LOW, ако (данни & 0x80) // Маскирайте MSB на данните PORTB | = (1 << MAX7219_DIN); // Задайте DIN на HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Задайте DIN на LOW PORTB | = (1 << MAX7219_CLK); // Задайте CLK на HIGH data << = 1; // Преместване наляво}}

Сега, когато можем да изпращаме байтове към MAX7219, можем да започнем да изпращаме команди. Това става чрез изпращане на 2 бай - първи за адреса на вътрешния регистър и втори за данните, които бихме искали да изпратим.

В контролера MAX7219 има повече от дузина регистър.

Изпращането на команда или дума е основно изпращане на 2 последователни байта. Изпълнението на тази функция е много просто.

void max7219_word (uint8_t адрес, uint8_t данни) {PORTB & = ~ (1 << MAX7219_CS); // Задайте CS на LOW max7219_byte (адрес); // Изпращане на адреса max7219_byte (данни); // Изпращане на данните 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 команди в последователност като двойки адрес/данни. Следваща стъпка - осветяване на ред светодиоди.

Това е много просто - просто пишем една команда, където първият байт е адресът (от 0 до 7), а вторият байт е 8 -те бита, представляващи 8 -те светодиода в реда.

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

Важно е да се отбележи, че това ще работи само за 1 матрица. Ако свържем повече матрици във верига, всички те ще показват едни и същи данни. Причината за това е, че след изпращането на командата ние връщаме CS сигнала обратно на HIGH, което кара всички контролери MAX7219 във веригата да се заключат и да покажат каквато и да е последната команда.

Препоръчано: