Comment connecter une matrice LED à Arduino en utilisant MAX 7219?

9

J'ai:

Q: Je me demande simplement comment puis-je connecter cela à l' Arduino Duemilanove ?

J'ai fait des recherches sur Google, mais je n'ai pas pu savoir comment.

jusaca
la source
@Bruno - Vous avez supprimé le lien, j'ai donc pensé qu'il était mort. Mais c'est OK, et vous n'avez pas expliqué pourquoi vous avez supprimé, alors j'ai reculé. Si vous avez une bonne raison de supprimer le lien, veuillez le laisser dans le champ de commentaire.
stevenvh
@stevenvh Désolé, je l'ai testé avant et cela ne fonctionnait pas. Peut-être que j'avais des problèmes de connectivité Internet, mais ça fonctionne maintenant. Vous avez bien fait d'annuler mon montage.
Bruno Ferreira

Réponses:

11

Bryan Chung avait un tutoriel toujours disponible sur Internet Archive sur la façon de connecter une matrice LED à un Arduino en utilisant un MAX7219:

Voici une expérience avec une matrice LED 8 × 8, pilotée par un CI MAX7219, contrôlée par une carte micro-contrôleur Arduino. Un PCB personnalisé a été fabriqué par Tan de DinoTech pour ranger tous les fils reliant la matrice LED et le circuit intégré. Il est livré avec une alimentation 12V séparée, afin de ne pas tout vider de la carte Arduino.

Seuls 4 fils sont nécessaires pour contrôler le circuit intégré du pilote MAX7219. Ils sont les

Horloge de données Loquet / charge Masse

Les broches de données et d'horloge doivent correspondre à celles de la commande shiftOut () dans Arduino. La goupille de verrouillage donnera une impulsion LOW à HIGH après la commande shiftOut. J'ai écrit le programme original de Javelin Stamp. Comme Arduino ne peut décaler que 8 bits de données, je dois utiliser 2 commandes distinctes pour décaler les octets supérieur et inférieur vers le MAX7219, qui a besoin d'un contrôle de 2 octets pour chaque commande.

Pour la structure de données de la matrice LED 8 × 8, j'utilise un tableau d'octets - matrice de longueur 8. Chaque ligne de la matrice correspond à la dimension Y. Chaque bit consécutif correspond à la dimension X. Le chiffre 1 est activé; 0 est désactivé. La direction X est inversée et il y a aussi un décalage de 1 bit. La fonction updateLED () répond à cela.

Le premier programme est une animation d'un mouvement d'une seule ligne.

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];
  }
}
littlebirdceo
la source