Как управлять 7-сегментным светодиодным модулем SPI MAX7219 с помощью удлинителя MCP23S17
Я использовал библиотеки Ника Гэммона (MAX7219) и (bitBangedSPI) для успешного управления 7-сегментными 8-разрядными светодиодными модулями SPI с Arduino Uno. Я хотел бы расширить количество вариантов выбора ведомого устройства (CS) с помощью чипа MCP23S17. Библиотеки Mcp23s17, которые можно использовать, могут быть https://github.com/dreamcat4/Mcp23s17 или https://github.com/MajenkoLibraries/MCP23S17. Я нашел полезную запись stackExchange Как использовать SPI на Arduino? и полезную запись http://www.ermicro.com/blog/?p=1050, но все примеры просто включают светодиоды, а не цифры 7-сегментных светодиодных модулей.
Я понимаю, что мне, возможно, придется модифицировать библиотеки MAX7219 и bitBangedSPI, где используется команда digitalWrite. Однако я не уверен, как модифицировать или управлять этими 7-сегментными модулями с использованием чипа MCP23S17.
Ниже показан скелетный скрипт для отображения PI, выбранного на выводе 6 на Uno и адресе 0x0 MCP23S17. Я хотел бы также выбрать, какую распиновку использовать, но не уверен, как это будет закодировано.
#include <SPI.h>
#include <bitBangedSPI.h>
#include <MAX7219.h>
// Библиотека Mcp23s17 доступна по адресу https://github.com/dreamcat4/Mcp23s17
#include <Mcp23s17.h>
// Подключите линии связи интерфейса SPI:
// #define SPI_MOSI 7 //arduino <-> SPI Master Out Slave In -> SI (контакт 13 на MCP23S17 DIP)
// #define SPI_MISO не используется 12 //arduino <-> SPI Master In Slave Out -> SO (контакт 14 на MCP23S17 DIP)
// #define SPI_CLOCK 8 //arduino <-> Вход ведомого тактового сигнала SPI -> SCK (контакт 12 на DIP-разъеме MCP23S17)
// Затем выберите любой другой свободный вывод в качестве выбора ведомого устройства (вывод 10, если он установлен по умолчанию, но это не обязательно)
#define MCP23S17_SLAVE_SELECT_PIN 6 //arduino <-> Выбор ведомого устройства SPI -> CS (контакт 11 на DIP-разъеме MCP23S17)
// НЕСКОЛЬКО УСТРОЙСТВ
// До 8 устройств MCP23S17 могут совместно использовать одну и ту же шину SPI и контакты выбора ведомого устройства.
// Назначить каждому чипу уникальный 3-битный адрес устройства (установив контакты A2,A1,A0)
// Далее, адрес устройства является необязательным вторым параметром конструктора fn...
// MCP23S17 Mcp23s17_0 = MCP23S17(MCP23S17_SLAVE_SELECT_PIN,0x0);
// ...
// MCP23S17 Mcp23s17_7 = MCP23S17(MCP23S17_SLAVE_SELECT_PIN,0x7);
// ОДНО УСТРОЙСТВО
// Создаем экземпляр одного объекта Mcp23s17
MCP23S17 Mcp23s17_0 = MCP23S17(MCP23S17_SLAVE_SELECT_PIN,0x0);
const byte chips = 1;
static char outputBuffer[20]; // outputBuffer[] скорее всего в 2 раза больше необходимого размера.
// 1 чип, бит-бэнг SPI на контактах 6, 7, 8
MAX7219 display(chips, 6, 7, 8); // Чипы / ЗАГРУЗКА / DIN / CLK
void setup()
{
// Установить все контакты как выходы (по умолчанию они все входы)
Mcp23s17_0.pinMode(OUTPUT);
display.begin();
display.setIntensity(1);
float pi = PI;
dtostrf(pi, 7, 7, outputBuffer);
display.sendString(outputBuffer);
} // конец настройки
void loop() { }
Пример 8-разрядного 7-сегментного дисплея. Они доступны на Amazon, Ebay, AliExpress и т. д. У этого модуля цифры 0,33 дюйма; у других модулей цифры 0,56 дюйма.
@GoEphs, 👍0
1 ответ
Просто подключите последовательно MAX7219, как уже упоминалось. Я всегда использую SPI напрямую с чипом, он отлично работает с режимами по умолчанию - тактовая частота 4 МГц, режим 0, MSBFIRST. Многие библиотеки используют программный SPI для связи с ним, что, по моему мнению, является пустой тратой оборудования SPI в семействе чипов '328P.
- Путаница с проводкой SPI
- Как использовать SPI на Arduino?
- Как увеличить скорость записи на SD-карту в Ардуино
- Как считывать данные с помощью Arduino SPI
- Как передать более 1 байта сразу по шине SPI?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522