MAX7219 с массивом 8digit 7seg
У меня есть беспокойство по поводу обработки порта библиотеки. Я успешно использовал прямую манипуляцию направлением порта в предыдущих проектах, но здесь, похоже, есть проблема.
// This code mostly taken from the example
#include "LedControl.h"
LedControl lc=LedControl(11,13,10,1);
//LedControl lc=LedControl(12,11,10,1); // original
// pin 12 is connected to the DIN pin (now MOSI 11)
// pin 11 is connected to the CLK pin (now SCK 13)
// pin 10 is connected to the CS pin (now SS 10)
// 1 as we are only using 1 MAX7219
// I am actually using all arduino pins except 12 for my project
#define PD_MSK B11111100 // Data pins PD2..7 (pins2..7)
#define PB_MSK B00000011 // Data pins PB0,1 (pins8,9)
#define PC_MSK B00001111 // Data pins PC0..3 (pins 14..17)
void setup()
{
// set pins 2..9 as inputs
DDRD = DDRD & !PD_MSK; // работает нормально
DDRB = DDRB & !PB_MSK; // настройка портов D,B входов *** не работает с этим
// pinMode(8, INPUT); //*** работает с этим
//pinMode(9, INPUT); //*** работает с этим
DDRC = DDRC | PC_MSK; // настройка PortC0..3 в качестве выходов
PORTC |= 0x0F; // set PortC0..3 high (default)
// ноль относится к числу MAX7219, он равен нулю для 1 чипа
lc.shutdown(0,false);// выключите энергосбережение, включите дисплей
lc.setIntensity(0,8);// устанавливает яркость (0~15 возможных значений)
lc.clearDisplay(0);// очистить экран
}
void loop()
{
//числа от 7 до 0
for (int a=0; a<8; a++)
{
lc.setDigit(0,a,a,false);
}
delay(1000);
//отображение номера 8 на всех сегментах
for (int a=0; a<8; a++)
{
lc.setDigit(0,a,8,false);
}
delay(1000);
// номера от 7 до 0 в обратном порядке
for (int a=8; a>=0; a--)
{
lc.setDigit(0,a,a,false);
//delay(100);
}
delay(1000);
}
Настройка направления прямого порта, похоже, не позволяет библиотеке работать, в то время как команды pinMode, выполняющие ту же работу, делают это. Я отмечаю, что библиотека использует программное обеспечение SPI, но я хотел бы использовать аппаратное обеспечение, если это возможно. Я, конечно, использовал аппаратный SPI с частыми изменениями направления порта на оставшихся выводах для других проектов. Есть ли какое-нибудь понимание того, почему возникает эта проблема?
- Спасибо.
@Ardathome, 👍0
Обсуждение1 ответ
Как всегда, я рекомендую старый RTFM (прочитайте чертово руководство) библиотеки LedControl.h.
В FAQ его четко указано:
Почему вы не используете аппаратную SPI-шину Arduino?
Когда я писал первую версию библиотеки , я мало что знал о процессорах Arduino или AVR в целом, и я ничего не знал о написании кода для аппаратной SPI-шины на ATmega. Но я знал, как работает протокол SPI и как я мог бы заставить это работать, используя простые команды digitalWrite (). Я обнаружил, что код библиотеки достаточно быстр для обычных случаев использования, поэтому нет необходимости в высокоскоростной связи.
Другими сильными сторонами в пользу (по общему признанию, тривиального) дизайна кода являются следующие: Используйте любые три свободных вывода ввода - вывода вашей платы для аппаратного обеспечения - Простая отладка. Намного проще, чем управлять 3 различными устройствами SPI подключенная к той же аппаратной шине библиотека легко переносима на другие платформы, так как использует только две очень простые функции из языка Arduino
Таким образом, с помощью этой библиотеки вы явно никогда не использовали аппаратный SPI (хотя вы могли бы использовать контакты, но только с помощью программного обеспечения).
В ответе № 2 указывалось, что я использовал неверного оператора для задания направления порта. (! вместо ~ - побитового.), @Ardathome
В ответе № 2 указывалось, что я использовал неверного оператора для задания направления порта. (! вместо ~ - побитового.) Моя ошибка! Я хочу использовать аппаратный SPI в своем конечном проекте (это был просто тест), так как это может быть быстрее. Я использовал эту библиотеку, чтобы убедиться, что внешнее оборудование работает-оно работает и сейчас. Использование разных контактов не имеет никакой пользы в моем случае, поэтому я, вероятно, напишу свой собственный (аппаратный) драйвер SPI. У меня уже есть система управления направлением портов для создания 8 - битной шины ввода-вывода для использования с другим внешним оборудованием-если я правильно скопирую ее на этот раз. Спасибо всем, кто нашел время и нашел мою ошибку., @Ardathome
- max7219 связанный дисплей, показывающий зеркальный текст
- Разница между 3,3 В и 5 В
- Путаница с проводкой SPI
- Возможно ли сделать таймер с точностью до 1 миллисекунды ? Использование светодиода MAX7219
- Гирляндное соединение нескольких блоков матрицы 4x(8x8) MAX7219
- Почему светодиоды заметно мерцают?
- Библиотека Parola и часы DS3231
- Прокрутка слева направо на дисплее MAX7219
Какая связь между "библиотека не работает, если я настраиваю порты вручную" и "я хотел бы использовать аппаратный SPI"?, @the busybee
Поскольку большинство библиотек выпускаются с открытым исходным кодом, заглядывали ли вы в их исходники? Этот открыт? Если да, то что показало ваше исследование?, @the busybee
Тот самый ! является логическим оператором. Побитовый вариант-это ~, @KIIV
Однако после запуска/перезапуска DDRx очищаются и настраиваются как входы, так что я не вижу никакого смысла в этих
&=
, @KIIVЧто говорит "LedControl.h" о том, что вы используете аппаратный SPI против программного SPI?, @CrossRoads