Led matrix 8x8 fai da te

ciao.
come da titolo sto cercando di costruirmi in casa una led matrix 8x8.
so che le vendono già assemblate e funzionanti, ma volevo capirne il funzionamento dall'interno prima di usare quelle già fatte, e già che ci sono farmi anche un po' di manualità con la saldatura a stagno...

ho scaricato da internet questo schema

quindi mi sono procurato una basetta millefori, un max7219 e un bel po' di led.

primo problema... il collegamento dei led...
per collegare tutti gli anodi della riga ho fatto le piste fondendo lo stagno, non è un lavoro esteticamente gradevole ma funziona.
per collegare i catodi invece l'unica soluzione che mi è venuta è quella di mettere dei ponticelli sul lato superiore della basetta fissandoli con lo stagno sull'altro lato e collegandoli con i catodi... per funzionare funziona, ma è un lavoro atroce... qualcuno saprebbe suggerirmi un altro metodo?

secondo problema... nello schema viene riportata anche una resistenza da 22K.
non ho una resistenza di quel valore, ma ne ho da 10K e da 1K. mi sembra di aver capito che se le collego in serie posso sommare i valori, quindi 10 + 10 + 1 + 1 = 22... è corretto?
poi sapete dirmi come è stato ricavato quel valore? non sono molto pratico con questo tipo di calcoli...
nel datasheet del max7219 fanno riferimento ad una resistenza da 9.53K ma non usano una matrice 8x8, quindi credo che il valore delle resistenza sia stato ricalcolato in qualche modo...

grazie in anticipo,
ciao

1- Piega direttamente i catodi fino a farli toccare fra loro e poi li saldi, come per i cubi fatti con i led, vedi QUI, oppure cerca con google "cubo led arduino).

2- Si metti in serie le resistenze e i valori si sommano.

3- Quì non ti so aiutare :confused:

Ciao

Attilio

grazie, faccio una prova e vedo se è più semplice.

Torno con un'altra domanda di teoria...
Ingenuamente credevo che i led fossero tutti uguali, invece poi mi sono accorto che non é così...
Quindi credo non sia scontato che con i miei led vada bene la resistenza da 22k indicata nello schema che sto seguendo...
Qualcuno saprebbe indicarmi come calcolare il valore corretto?
E c'é anche un modo per verificare il reale assorbimento della matrice?

Sul forum è stato spiegato diverse volte, ad ogni modo QUI ti spiega come calcolarla mentre QUI c'è un form per fare il calcolo on line.

Ciao

Attilio

azz, non avevo visto.
grazie della segnalazione, adesso e la guardo con calma.

ultimo_53:
Sul forum è stato spiegato diverse volte, ad ogni modo QUI ti spiega come calcolarla mentre QUI c'è un form per fare il calcolo on line.

Ciao Attilio

No, Attilio, in questo caso Ti stai sbagliando di grosso.

Qua si usa un MAX7219 che é un Driver LED multiplexing.
Contiene delle sorgenti di corrnete continua percui non servono resistenza sugli LED. Il MAX7219 ha un entrata dove si definisce la corrente della sorgente corrente continua. Il valore della corrente viene determinata dalla resistenza collegata tra i 5V e il PIN ISET
La spieganzine la trovi a pag 4 grafico SEGMENT DRIVER OUTPUT CURRENT vs. OUTPUT VOLTAGE in alto a destra del https://www.sparkfun.com/datasheets/Components/General/COM-09622-MAX7219-MAX7221.pdf dove la tensione di uscita é la tensione forward dei LED usati (dipende dal colore).
A Ppgina 10 nel capitolo "Selecting RSET Resistor and Using External Driverse" e a pagina 11 la tabella 11.

Ciao Uwe

uwefed:
No, Attilio, in questo caso Ti stai sbagliando di grosso.

Hai ragione: svista clamorosa!!! :cry: :cry: :cry:

Attilio

grazie anche a te Uwe.
il datasheet l'avevo già guardato... capendoci poco a dir la verità...
adesso me lo riguardo con più calma e pazienza.

nel frattempo ho comunque letto i link proposti da Attilio, almeno ho imparato qualcosa di nuovo sui led...

torno a chiedere aiuto su questo argomento...
sono riuscito a saldare tutti i led su una basetta millefori. e li ho collegati al max7219 segunedo lo schema che avevo postato all'inizio.
ho scaricato la libreria ledcontrol da qui
http://playground.arduino.cc/uploads/Main/LedControl.zip

ho preso la sketch di esempio e l'ho caricato sul mio arduino uno... però la matrice non fa quello che dovrebbe fare... ovvero si accendono tutti i led e rimangono perennemente accesi...

in teoria i led sono saldati correttamente, altrimenti non si accenderebbero... e dovrebbero anche essere collegati correttamente al max7219... e anche i pin mi sembrano corretti...

qualcuno saprebbe darmi una dritta per risolvere?

questo è lo sketch (ma ho preso l'esempio della libreria cambiando solo i pin DIN, CLK, CS)

//We always have to include the library
#include "LedControl.h"

/*
 Now we need a LedControl to work with.
 ***** These pin numbers will probably not work with your hardware *****
 pin 12 is connected to the DataIn 
 pin 11 is connected to the CLK 
 pin 10 is connected to LOAD 
 We have only a single MAX72XX.
 */
LedControl lc=LedControl(8,10,9,1);

/* we always wait a bit between updates of the display */
unsigned long delaytime=100;

void setup() {
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* Set the brightness to a medium values */
  lc.setIntensity(0,8);
  /* and clear the display */
  lc.clearDisplay(0);
}

/*
 This method will display the characters for the
 word "Arduino" one after the other on the matrix. 
 (you need at least 5x7 leds to see the whole chars)
 */
void writeArduinoOnMatrix() {
  /* here is the data for the characters */
  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
  byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
  byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
  byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
  byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
  byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

  /* now display them one by one with a small delay */
  lc.setRow(0,0,a[0]);
  lc.setRow(0,1,a[1]);
  lc.setRow(0,2,a[2]);
  lc.setRow(0,3,a[3]);
  lc.setRow(0,4,a[4]);
  delay(delaytime);
  lc.setRow(0,0,r[0]);
  lc.setRow(0,1,r[1]);
  lc.setRow(0,2,r[2]);
  lc.setRow(0,3,r[3]);
  lc.setRow(0,4,r[4]);
  delay(delaytime);
  lc.setRow(0,0,d[0]);
  lc.setRow(0,1,d[1]);
  lc.setRow(0,2,d[2]);
  lc.setRow(0,3,d[3]);
  lc.setRow(0,4,d[4]);
  delay(delaytime);
  lc.setRow(0,0,u[0]);
  lc.setRow(0,1,u[1]);
  lc.setRow(0,2,u[2]);
  lc.setRow(0,3,u[3]);
  lc.setRow(0,4,u[4]);
  delay(delaytime);
  lc.setRow(0,0,i[0]);
  lc.setRow(0,1,i[1]);
  lc.setRow(0,2,i[2]);
  lc.setRow(0,3,i[3]);
  lc.setRow(0,4,i[4]);
  delay(delaytime);
  lc.setRow(0,0,n[0]);
  lc.setRow(0,1,n[1]);
  lc.setRow(0,2,n[2]);
  lc.setRow(0,3,n[3]);
  lc.setRow(0,4,n[4]);
  delay(delaytime);
  lc.setRow(0,0,o[0]);
  lc.setRow(0,1,o[1]);
  lc.setRow(0,2,o[2]);
  lc.setRow(0,3,o[3]);
  lc.setRow(0,4,o[4]);
  delay(delaytime);
  lc.setRow(0,0,0);
  lc.setRow(0,1,0);
  lc.setRow(0,2,0);
  lc.setRow(0,3,0);
  lc.setRow(0,4,0);
  delay(delaytime);
}

/*
  This function lights up a some Leds in a row.
 The pattern will be repeated on every row.
 The pattern will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
void rows() {
  for(int row=0;row<8;row++) {
    delay(delaytime);
    lc.setRow(0,row,B10100000);
    delay(delaytime);
    lc.setRow(0,row,(byte)0);
    for(int i=0;i<row;i++) {
      delay(delaytime);
      lc.setRow(0,row,B10100000);
      delay(delaytime);
      lc.setRow(0,row,(byte)0);
    }
  }
}

/*
  This function lights up a some Leds in a column.
 The pattern will be repeated on every column.
 The pattern will blink along with the column-number.
 column number 4 (index==3) will blink 4 times etc.
 */
void columns() {
  for(int col=0;col<8;col++) {
    delay(delaytime);
    lc.setColumn(0,col,B10100000);
    delay(delaytime);
    lc.setColumn(0,col,(byte)0);
    for(int i=0;i<col;i++) {
      delay(delaytime);
      lc.setColumn(0,col,B10100000);
      delay(delaytime);
      lc.setColumn(0,col,(byte)0);
    }
  }
}

/* 
 This function will light up every Led on the matrix.
 The led will blink along with the row-number.
 row number 4 (index==3) will blink 4 times etc.
 */
void single() {
  for(int row=0;row<8;row++) {
    for(int col=0;col<8;col++) {
      delay(delaytime);
      lc.setLed(0,row,col,true);
      delay(delaytime);
      for(int i=0;i<col;i++) {
        lc.setLed(0,row,col,false);
        delay(delaytime);
        lc.setLed(0,row,col,true);
        delay(delaytime);
      }
    }
  }
}

void loop() { 
  writeArduinoOnMatrix();
  rows();
  columns();
  single();
}

allego anche qualche foto, ma credo si capisca poco...