Help: Arduino LED MATRIX 8x48

Ho 6 moduli dot-matrix bicolore vorrei fare una scritta rossa scorrevole affiancando i 6 moduli,
ho quindi 8 righe e 48 colonne

Per ora sto provando 1 solo modulo e facendo i collegamenti diretti ai pin di Arduino no problem...
quando provo con gli shift-registers invece non riesco
sto utilizzando ULN2803 e 74HC595 con relative resistenze

ho provato tre volte questi collegamenti tra ieri e oggi (staccando completamente e riassemblando il tutto da zero) ma nada!
I 74HC595 sono collegati correttamente tra di loro infatti girano ancora bene con il tutorial shiftout del playground

Queto è il tutorial: LED matrix projector – tinkerlog

E questo il wiring:

Sono corretti questi collegamenti? :fearful:

Non conoscete un tutorial semplice semplice a prova di niubbo che usi ULN2803 e 74HC595 dal quale possa capire meglio i collegamenti?

Eppure sono convinto di farli uguali allo schema posto sopra... bah!

Per iniziare mi basta anche un solo modulo o due!

Ciao, come hai collegato il pin 10 del ULN2803?
Occhio che non deve restare scollegato, se ce lo hai lasciato ecco dove sta il problema

:smiley: non l'ho collegato quello

perchè ho confrontato un po di schemi che usano quell'integrato (tipo questo sotto) e vedo che non lo collegano
EDIT:rimosso schema errato

Anche se qui... (trovato ora) lo collegano al catodo
Boh nn ci sapisco + niente con tutti sti filacci :slight_smile:

EDIT:rimosso schema inutile

Non saprei che dirti, occorre qualcuno in gamba che spiega questa faccenda...
Ogni volta che lo ho usato l'ho sempre collegato verso l'alimentazione quel pin

Occhio che quello però è un altro integrato se vedi bene lo schema, è un ULN2003

KrashNet:
Per ora sto provando 1 solo modulo e facendo i collegamenti diretti ai pin di Arduino no problem...

Ma prelevi anche l'alimentazione (5V)?

quando provo con gli shift-registers invece non riesco

Ma che significa "non riesco"? Cos'è che ottieni, esattamente?

leo72:
Ma che significa "non riesco"? Cos'è che ottieni, esattamente?

Un attacco isterico dopo l'altro :grin:

Per oggi sono cotto... domani se gli impegni lo permettono rifaccio qualche prova con un po di lucidità in +

Michele ha ragione... qui la sindrome di Calimero dilaga.... ti avevo chiesto:

leo72:

KrashNet:
Per ora sto provando 1 solo modulo e facendo i collegamenti diretti ai pin di Arduino no problem...

Ma prelevi anche l'alimentazione (5V)?

i 5V vanno da arduino ai 74hc595 come da schema del shiftout del playground e il pin 10 dell'ULNinvece resta scollegato

Prima ho fatto l'ennesima riprova e una sequenza rosso e verde mischati partiva anche se non era "comprensibile" e avevo 2 righe e 1 colonna spenti
ho provato a ricaricare lo sketch, senza toccare i collegamenti e mi rimaneva un quadratino 2x2 rosso acceso quindi penso che ci sia più di un problema...
(ho anche provato ad invertire i collegamineti del primo 74hc595 con quelli del secondo)

Per ora accantono un po il progetto e ci tornerò su appena riesco a ritagliarmi un po di tempo e faccio anche gli schemini in Fritzing!
(ho ritestato i componenti su altre applicazioni e funzionano, quindi dovrebbe essere solo un problema di collegamenti)

Ti ho fatto la domanda perché il regolatore dell'Arduino può erogare max 500 mA (compreso l'Atmega328) quando è collegato alla porta USB e potrebbe darsi che tutto il circuito sia in "debito" di corrente.

Di solito provo anche l'alimentazione esterna al posto della usb...
sia per gli eccessi di richiesta di corrente (come aapunto mi avete spiegato) ma soprattutto in quei casi dove ho tanti collegamenti
sulla breadboard e magari faccio qualeche scambio di cavetti, perkè è già capitato che collegassi qualcosa in maniera errata e il laptop mi disabilita tutte le USB =(

Cmq volevo fare una domanda stupida alla quel non ho trovato risposta online...
perchè in queste applicazioni utilizzano l'ULN2803 per le righe e gli shift registers per le colonne?
vedo che alcuni esempi usano 74hc595 sia per le colonne che per le righe... ma se non sbaglio, lo fanno solo in caso si utilizzi un solo modulo 8x8...

Ad esempio..
ora sto provando questa versione che usa un 74hc595 per le righe
e un 74hc595 che comanda un ULN2803 e controllano le colonne
(ho dovuto inventarmi i collegamenti perchè sicuramente usiamo 2 dot-matrix differenti quindi mi sono basato sul datasheet del mio perchè con i collegamenti così come nello schema si accendevano rosso e verde contemporaneamente e rimanevano parecchi led spenti... ho risolto... ma devo lavorarci ancora perchè lo scrolling giustamente scorre da destra verso sinistra... e se scrivo una H o una I pare tutto giusto ma se metto una U la vedo capovolta :smiley: )

  1. Problemi niubbi a parte...in base a quali parametri si decide se usare solo i 74hc595 o implementare anche l'ULN2803

Questo è il tutorial: Fun with 8×8 LED Matrix | Inside Gadgets
Questo è lo schema:

Pelletta:
Ciao, come hai collegato il pin 10 del ULN2803?
Occhio che non deve restare scollegato, se ce lo hai lasciato ecco dove sta il problema

Il pin 10 del ULN2803 sono gli anodi dei diodi di protezione. Per pilotare LED non servono e il Pin 10 puó restare scollegato.

KrashNet:
Cmq volevo fare una domanda stupida alla quel non ho trovato risposta online...
perchè in queste applicazioni utilizzano l'ULN2803 per le righe e gli shift registers per le colonne?
vedo che alcuni esempi usano 74hc595 sia per le colonne che per le righe... ma se non sbaglio, lo fanno solo in caso si utilizzi un solo modulo 8x8...

Molto semplice il ULN2803 puó comuteree 500mA verso massa. Il 74HC595 puó erogare ca 20 mA sia verso H che verso L. per questo si mette il 595 per pilotare i singoli LED di una riga e il 2805 la riga perche circola lí la somma delle correnti dei singoli LED. Se metti una riga in orizontale o in verticale da punto pratico non cambia, devi cambiare il programma che ti scrive i dati nel 595. Visto che é un multiplex Ti conviene non avere troppe righe per non vedere il farfallio.

Pensa anche a un alimentazione esterna di 5V per i LED (compresi i 595) perche tener accesi 48 LED alla volta Arduino non regge. Dico esterna da 5V per alimentare i 595 e non per alimentare Arduino con la presa di alimentazione esterna nera.

Ciao Uwe

Altra domanda:
Sono partito con 1 modulo dot-matrix 8x8 (e ho notato dei difetti anche nel codice usato in quel tutorial ma ci tornerò più avanti)

Ora voglio aggiungere il secondo modulo dot-matrix per arrivare a 8x16

Domanda... nella catena shift-register degi 74HC595, dato che uno controlla le righe mandando i dati all' ULN2803

dove devo aggiungere il nuovo 74HC595 per controllare le colonne del secondo modulo dot-matrix, all'inizio o alla fine?

Ora ho:
[ARDUINO]-----[74HC595 MATRIX_1]-----[74HC595 to ULN2803]

E' giusto se come catena faccio così?:
[ARDUINO]-----[74HC595 MATRIX_1]-----[74HC595 MATRIX_2]-----[74HC595 to ULN2803]

Edit:
No... ho provato e mi sa che la cosa è più complicata di quello che sembrava (almeno per me)... domani ricontrollerò tutto i collegamenti!

KrashNet:
Altra domanda:
Sono partito con 1 modulo dot-matrix 8x8 (e ho notato dei difetti anche nel codice usato in quel tutorial ma ci tornerò più avanti)

Ora voglio aggiungere il secondo modulo dot-matrix per arrivare a 8x16

Domanda... nella catena shift-register degi 74HC595, dato che uno controlla le righe mandando i dati all' ULN2803

dove devo aggiungere il nuovo 74HC595 per controllare le colonne del secondo modulo dot-matrix, all'inizio o alla fine?

Ora ho:
[ARDUINO]-----[74HC595 MATRIX_1]-----[74HC595 to ULN2803]

E' giusto se come catena faccio così?:
[ARDUINO]-----[74HC595 MATRIX_1]-----[74HC595 MATRIX_2]-----[74HC595 to ULN2803]

Edit:
No... ho provato e mi sa che la cosa è più complicata di quello che sembrava (almeno per me)... domani ricontrollerò tutto i collegamenti!

Ok ho fatto una bozza in Fritzing dei collegamenti allo stato attuale ma da qui non riesco a smuovermi...
Per girare gira.... poi se è corretto non so proprio :fearful:
Sono riuscito ad individuare le RIGHE perchè lettere tipo la "T" mi venivano rovesciate in questo modo invece lemostra giuste XD
Risolto anche problema di inversione 01 perchè come mandavo sequenze 01 il risultato sul modulo matrix era 10 (led accesi dove dovevano essere spenti e viceversa) XD

Ora come collegamenti... dove devo procedere per inserire il secondo modulo dot-matrix?
Davanti al primo modulo 74HC595 e sposto anche Latch,Clock e Data?
O posso metterlo tra il primo e il secondo 74HC595? EDIT: Penso sia indifferente
E i cavetti che vengono dall'ULN? (altro sclero)

Ho fatto delle prove ma è come se le lettere scorressero in diagonale "credo" con led più accesi e altri meno!
Quindi mi sono fermato prima di fare altri casini!

Scusate se rompo ancora ma proprio non ne vengo a capo!

Ho corretto alcune imprecisioni dello schema precedente e allego quello modificato...

Volevo chiedere...
Aggiungendo un secondo modulo dot-matrix quale valore dovrei incrementare nello sketch, per fargli capire che le colonne ora sono 16 e non più 8?

altro chiarimento
Se invece lascio il codice così com'è, sul secondo modulo, è giusto che vedo la stessa scritta con lo stesso scorrimento del primo, come fosse un clone?
(così da capire che i collegamenti sono corretti?)

/*
 LED Matrix - Display scrolling text
 Version: 1.0
 Author: electricteardown (http://insidegadgets.wordpress.com)
 Created: 6/11/2010
 Last Modified: 6/11/2010
 
*/

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
//Pin connected to DS of 74HC595
int dataPin = 11;

int counter = 0;
int movement = 0;

int LEDs[8][17] = {   
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}      
};

int letterK[8][8] = {  
  {0, 1, 1, 0, 0, 0, 1, 1},
  {0, 1, 1, 0, 0, 1, 1, 0},
  {0, 1, 1, 0, 1, 1, 0, 0},
  {0, 1, 1, 1, 1, 0, 0, 0},
  {0, 1, 1, 1, 1, 0, 0, 0},
  {0, 1, 1, 0, 1, 1, 0, 0},
  {0, 1, 1, 0, 0, 1, 1, 0},
  {0, 1, 1, 0, 0, 0, 1, 1},    
};

int letterT[8][8] = {   
  {0, 1, 1, 1, 1, 1, 1, 0},
  {0, 1, 1, 1, 1, 1, 1, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},
  {0, 0, 0, 1, 1, 0, 0, 0},     
};


void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  
  if (movement == 0) {
    int x;
    int y;
    for (x = 0; x < 8; x++) {
      for (y = 0; y < 8; y++) {
        LEDs[x][y+8] = letterK[x][y];
      }
    }
  } 
  if (movement == 8) {
    int x;
    int y;
    for (x = 0; x < 8; x++) {
      for (y = 0; y < 8; y++) {
        LEDs[x][y+8] = letterT[x][y];
      }
    }
  } 
  
  if (counter % 25 == 0) {
    movement++;
    int x;
    int y;
    for (x = 0; x < 8; x++) {
      for (y = 0; y < 16; y++) {
        LEDs[x][y] = LEDs[x][y+1];
      }
    }  
  }
  if (movement >= 16) {
    counter = 0;
    movement = 0;
  }
  
  lightLED();
  counter++;
}

void lightLED() {
  byte columnbitsToSend = 0;
  byte rowbitsToSend = 0;
  
  int x = 0;
  int y = 0;
  for (x = 0; x < 8; x++) {
    columnbitsToSend = 0;
    rowbitsToSend = 0;
      
    for (y = 0; y < 8; y ++) {
      if (LEDs[x][y] == 1) {
        bitWrite(rowbitsToSend, y, HIGH);
      } 
    }
    
    digitalWrite(latchPin, LOW);
    bitWrite(columnbitsToSend, x, HIGH);
    shiftOut(dataPin, clockPin, MSBFIRST, columnbitsToSend);
    shiftOut(dataPin, clockPin, MSBFIRST, rowbitsToSend);
    digitalWrite(latchPin, HIGH);   
    delay(2);
  }
}