Я имею:
- 2 8x8 светодиодных матрицы и
- Чип MAX7219.
Q: Мне просто интересно, как я могу подключить это к Arduino Duemilanove ?
Я гуглил, но не мог понять как.
Я имею:
Q: Мне просто интересно, как я могу подключить это к Arduino Duemilanove ?
Я гуглил, но не мог понять как.
Ответы:
У Брайана Чанга в Интернет-архиве все еще есть учебное пособие о том, как подключить светодиодную матрицу к Arduino с помощью MAX7219:
Вот эксперимент со светодиодной матрицей 8 × 8, управляемой микросхемой MAX7219, управляемой через плату микроконтроллера Arduino. Тан из DinoTech изготовил специальную печатную плату, чтобы привести в порядок все провода, соединяющие светодиодную матрицу и ИС. Он поставляется с отдельным источником питания 12 В, чтобы не слить все с платы Arduino.
Для управления микросхемой драйвера MAX7219 необходимо всего 4 провода. Они
Data Clock Latch / Load Ground
Данные и контакты синхронизации должны совпадать с выводами для команды shiftOut () в Arduino. Защелка выводит импульс от НИЗКОГО до ВЫСОКОГО после команды shiftOut. Я написал оригинальную программу для Javelin Stamp. Поскольку Arduino может сдвигать только 8 бит данных, мне нужно использовать две отдельные команды, чтобы сдвинуть как верхний, так и нижний байты в MAX7219, который нуждается в 2-байтовом управлении для каждой команды.
Для структуры данных светодиодной матрицы 8 × 8 я использую байтовый массив - матрицу длины 8. Каждая строка в матрице соответствует измерению Y. Каждый бит в строке соответствует измерению X. Цифра 1 включена; 0 выключен. Направление Х меняется на противоположное, также есть сдвиг на 1 бит. Функция updateLED () учитывает это.
Первая программа - это анимация движения одной строки.
int CLOCK = 12;
int LATCH = 13;
int DATA = 11;
byte matrix[8];
int idx = 0;
void setup() {
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(DATA, OUTPUT);
digitalWrite(CLOCK, LOW);
digitalWrite(LATCH, LOW);
digitalWrite(DATA, LOW);
initLED();
clearLED();
}
void loop() {
for (int j=0;j<8;j++) {
updateLED(idx, j, true);
}
refreshLED();
delay(200);
for (int j=0;j<8;j++) {
updateLED(idx, j, false);
}
refreshLED();
delay(100);
idx++;
idx %= 8;
}
void ledOut(int n) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, (n>>8));
shiftOut(DATA, CLOCK, MSBFIRST, (n));
digitalWrite(LATCH, HIGH);
delay(1);
digitalWrite(LATCH, LOW);
}
void initLED() {
ledOut(0x0B07);
ledOut(0x0A0C);
ledOut(0x0900);
ledOut(0x0C01);
}
void clearLED() {
for (int i=0;i<8;i++) {
matrix[i] = 0x00;
}
refreshLED();
}
void refreshLED() {
int n1, n2, n3;
for (int i=0;i<8;i++) {
n1 = i+1;
n2 = matrix[i];
n3 = (n1<<8)+n2;
ledOut(n3);
}
}
void updateLED(int i, int j, boolean b) {
int t = 1;
int n = 0;
int m = 0;
if (j==0) {
m = 7;
}
else {
m = j-1;
}
n = t<<m;
if (b) {
matrix[i] = n | matrix[i];
}
else {
n = ~n;
matrix[i] = n & matrix[i];
}
}
Извините, если уже немного поздно, но я только что написал пост об использовании MAX7219 со светодиодными матрицами и 7-сегментными светодиодными дисплеями.