Я маю:
- 2 8x8 світлодіодна матриця та
- мікросхем MAX7219
З: Мені просто цікаво, як я можу це з'єднати з Arduino Duemilanove ?
Я гугла, але не могла дізнатися, як.
Я маю:
З: Мені просто цікаво, як я можу це з'єднати з Arduino Duemilanove ?
Я гугла, але не могла дізнатися, як.
Відповіді:
Брайан Чунг мав підручник, який ще доступний в Інтернет-архіві про те, як підключити світлодіодну матрицю до Arduino за допомогою MAX7219:
Ось експеримент із світлодіодною матрицею 8 × 8, керованою ІС MAX7219, керованою через плату мікроконтролера Arduino. Tan від DinoTech зробив спеціальну друковану плату, щоб привести в порядок всі дроти, що з'єднують світлодіодну матрицю та ІС. Він постачається з окремим джерелом живлення 12 В, щоб не злити все з плати Arduino.
Для управління MAX7219 драйвером необхідні лише 4 дроти. Вони є
Фіксація / завантаження наземних годин
Дані та тактові дані повинні відповідати тим, які використовуються для команди shiftOut () в Arduino. Шпилька засувки дасть імпульс НИЗЬКИЙ ВИСОКИЙ після команди shiftOut. Я написав оригінальну програму для Javelin Stamp. Оскільки Arduino може перенести лише 8 біт даних, я повинен використовувати 2 окремі команди для переміщення як верхнього, так і нижнього байтів на MAX7219, для якого потрібен 2-байтний контроль для кожної команди.
Для структури даних матриці 8 × 8 світлодіодів я використовую байтовий масив - матрицю довжиною 8. Кожен рядок у матриці відповідає розміру Y. Кожен біт підряд відповідає розміру X. Увімкнено цифру 1; 0 вимкнено. Напрямок X обернено і також є зміщення в 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-сегментними світлодіодними дисплеями.