Io ho:
- 2 matrice LED 8x8 e
- un chip MAX7219.
D: Mi chiedo solo come posso collegarlo ad Arduino Duemilanove ?
Ho cercato su Google ma non sono riuscito a scoprire come.
Io ho:
D: Mi chiedo solo come posso collegarlo ad Arduino Duemilanove ?
Ho cercato su Google ma non sono riuscito a scoprire come.
Risposte:
Bryan Chung aveva ancora un tutorial disponibile su Internet Archive su come collegare una matrice LED a un Arduino usando un MAX7219:
Ecco un esperimento con una matrice LED 8 × 8, guidata da un IC MAX7219, controllato attraverso una scheda micro-controller Arduino. Tan ha realizzato una PCB personalizzata da DinoTech per riordinare tutti i fili che collegano la matrice LED e l'IC. Viene fornito con un alimentatore a 12V separato, per non scaricare tutto dalla scheda Arduino.
Sono necessari solo 4 fili per controllare l'IC driver MAX7219. Loro sono il
Data Clock Latch / load Ground
I pin di dati e clock devono corrispondere a quelli per il comando shiftOut () in Arduino. Il perno di chiusura produrrà un impulso da BASSO AD ALTO dopo il comando shiftOut. Ho scritto il programma originale per Javelin Stamp. Poiché Arduino può spostare solo 8 bit di dati, devo usare 2 comandi separati per spostare i byte superiore e inferiore sul MAX7219, che richiede un controllo di 2 byte per ciascun comando.
Per la struttura dei dati della matrice LED 8 × 8, utilizzo una matrice di byte - matrice di lunghezza 8. Ogni riga nella matrice corrisponde alla dimensione Y. Ogni bit di una riga corrisponde alla dimensione X. La cifra 1 è attiva; 0 è spento. La direzione X è invertita e c'è anche uno spostamento di 1 bit. La funzione updateLED () si rivolge a questo.
Il primo programma è un'animazione di un movimento a linea singola.
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];
}
}
Scusa se è un po 'tardi per te, ma ho appena scritto un post sull'uso del MAX7219 con matrici LED e display a LED a 7 segmenti.