Matrici di LED con MAX7219: configurazioni diverse.

Ciao a tutti

Ieri, dopo appena 24 giorni (avendo pagato circa 2€ extra per la spedizione) mi sono arrivati 6 moduli con 4 matrici 8x8 ciascuno dalla Cina. Purtroppo, però, appena ho collegato un modulo mi sono reso conto che le matrici sono collegate diversamente ai MAX7219, perciò i caratteri appaiono e scorrono ruotati di 90°.

Ho letto che la libreria MD_MAX72xx ha un #define apposito per impostare il modello di scheda in uso, ma nella libreria MaxMatrix che era usata nel progetto da cui sono partito, e che ho continuato a usare, non è previsto.

Che cosa mi consigliate di fare per usare quei moduli?

  • Modificare la libreria per indirizzare le righe al posto delle colonne e viceversa (più ci penso, più mi convinco che sia la cosa più semplice)

  • Modificare il programma (qui allegato) per scambiare le righe con le colonne (nel verso giusto, e deve funzionare anche nello scorrimento)

  • Cambiare la libreria con la MD_MAX (cosa non facile, perché bisogna adattare il programma ai nuovi comandi)

  • ?...

Comunque voglio conservare (ben funzionante, come adesso) il programma che ho già scritto, al quale dovrò anche aggiungere la lettura dei messaggi da microSD.

Grazie
Gianluca

Scritte_scorrevoli_v1.3p5.zip (11.8 KB)

Beh, scusa non ho risposte non avendoli mai usati, ma devo dirlo: anche questo è uno dei motivi per cui non mi piace acquistare dalla Cina...

Il primo è che quando ho un progetto in testa non mi va di aspettare 2 mesi (:slight_smile: ), il secondo è che, appunto, rischi di ricevere cose sbagliate o non funzionanti, ed andare ad acchiappare il venditore a Pechino (ok, ok, a Shenzhen...) è un casino e comunque gli eventuali resi sono complicati, lenti, incerti.

Preferisco pagare qualche soldo in più ad un rivenditore italiano che, anche se dovesse vendere comunque roba cinese, è più raggiungibile e rapido. E magari rivenditore italiano (o al massimo europeo) su eBay o Amazon che danno qualche sicurezza in più.

Li vendono, uguali, anche in Italia. A quanto ho capito, è normale che funzionino in quel modo; è particolare, invece, quello a cifra singola che ho acquistato inizialmente io (da un venditore italiano! :slight_smile: ). D'altra parte, non c'è un modo giusto o sbagliato: ci sono 8 anodi comuni e 8 catodi comuni, per un totale di 16 "fili", da collegare ad altrettanti piedini del MAX7219.
Nel datasheet dell'integrato, d'altra parte, si fa riferimento solo al pilotaggio di 8 display a 7 segmenti più il punto: è comunque una matrice 8x8, ma ogni corrispondenza con una matrice di 8x8 LED è puramente arbitraria.

Ho fatto un tentativo, ma al momento non ho modo di testarlo :slight_smile:

Prova a usare la matrice dei caratteri in allegato e fammi sapere se va.
Ho provato a ruotare i caratteri, ma potrebbero essere spostati a destra, inoltre come vedi è un mattone in quanto ci sono tutte le righe e colonne!!

esempio

//prima
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
//ruotato
8, 8, B00010001, B00010001, B00010001, B00010101, B00010101, B00010101, B00001010, B00000000, //W

Federico

MaxMatrix_char.txt (9.63 KB)

Ti ringrazio, Federico, ma fare la trasposta della matrice dei caratteri non è una buona soluzione, perché poi rimane il problema dello scorrimento, che non avverrà nel verso desiderato!
Comunque Teo, il mio gatto, ne è affascinato... :)!

Datman:
Ti ringrazio, Federico, ma fare la trasposta della matrice dei caratteri non è una buona soluzione, perché poi rimane il problema dello scorrimento, che non avverrà nel verso desiderato

Bhe, ma se l'orientamento é corretto, fai lo scorrimento verso l'alto (a basso) , se la libreria lo prevede.

Simpatico Teo, un mio cane si chiama Tea :slight_smile:

Federico

Pure tu hai ragione...

Ho fatto qualche prova:

  • Con la tua tabella dei caratteri, così com'è, escono solo sgorbi... :frowning:
  • Inoltre, ogni tanto lo scorrimento si blocca per un attimo o più.
  • Sono tornato alla tabella originale e ho sostituito la T, primo carattere del testo memorizzato, con la riga della tua tabella: esce, ma capovolta (poco male, anche perché dipende da come metto i display...)

Con la tabella trasposta, però, perdo la larghezza dei caratteri.

Ho provato a modificare la libreria MaxMatrix, ma anche lì non ho ottenuto subito qualche risultato promettente, seppur minimo. Mi piacerebbe riuscire a reindirizzare i LED scambiando righe e colonne, ma non è così semplice!

Ho provato anche a sostituire shiftLeft con shiftDown, ma il compilatore non è d'accordo:
f_funz_di_scritt:33:51: error: no matching function for call to 'MaxMatrix::shiftDown(bool, bool)'
Eppure la funzione esiste...
Ah, ecco: vedo che Up e Down vogliono un parametro solo.

shiftRight lo accetta, ma non esce nulla.

No, non si può fare così: c'è anche il setColumn da modificare!
Probabilmente, per una persona pratica sarebbe abbastanza semplice modificare la libreria...

Ho trovato questa nuova MaxMatrix, che consente l'impostazione dell'orientamento! :slight_smile:

...Ma quante decine di Megabyte sono???...!!!
A 94MB ho fermato! In LED ci sono pezzi di IDE... C'è una cartella ArduinoCore!

Ho copiato solo il .h e il .cpp nella cartella libraries/MaxMatrix, ma l'IDE dice:
'class MaxMatrix' has no member named 'shiftTask'; did you mean 'shiftLeft'?

AIUTOOO!!! :slight_smile:

Scritte_scorrevoli_v2.1_p1_non_funziona.zip (12.7 KB)

Comunque, ripensandoci, il problema non sta nei display, ma nella libreria (e nel cervello di chi l'ha scritta): costui ha pensato di collegarli con fili che escono dal basso di ogni display e rientrano dall'alto del successivo (!), anziché collegarli semplicemente in fila! Mi viene da pensare che abbia fatto le prime prove con un solo display, mettendolo "in piedi" su una breadboard, e abbia scritto tutta la libreria senza rendersi conto che poi, per collegare più display in serie, avrebbe dovuto ruotarli! A dimostrazione di ciò, il data in sta in basso, che va nella breadboard, e il data out sta in alto!

Datman:

  • Con la tua tabella dei caratteri, così com'è, escono solo sgorbi... :frowning:

Ho dato un'occhiata al codice, vanno fatte alcune modifiche:

byte buffer[10];
diventa
byte buffer[13];

memcpy_P(buffer, CH + 7 * c, 7);
diventa
memcpy_P(buffer, CH + 10 * c, 10);

In questo modo le lettere sono ok, ma il problema è lo scorrimento; onestamente a meno di modificare pesantemente la libreria, non credo ci sia soluzione, in quanto questa inserisce i dati per colonna.

Datman:
Comunque, ripensandoci, il problema non sta nei display, ma nella libreria...

Concordo, lui si basato solo sull'accoppiamento dei moduli singoli secondo questo schema

i moduli da quattro, invece sono accoppiati con i pin sull'asse orizzontale!

IMHO, se cambi libreria fai meno fatica, ho dato un'occhiata a questa, e mi sembra la migliore (molto configurabile)

Federico

Sì, ma mi sembra che non sia immediatamente sostituibile. Credo che la cosa migliore, purtroppo, sia prendere un esempio funzionante e, su quello, copiare tutto quello che avevo scritto adattandolo.

Datman:
Sì, ma mi sembra che non sia immediatamente sostituibile. Credo che la cosa migliore, purtroppo, sia prendere un esempio funzionante e, su quello, copiare tutto quello che avevo scritto adattandolo.

Dai un'occhiata a questa, è dello stesso autore e include l'altra. Serve solo per gestire semplicemente lo scrolling :wink:

Qui un esempio per variare la velocità con uno slider.

Federico

A proposito delle lettere accentate, dai un'occhiata a questo esempio :wink:

Federico

Dai un'occhiata qui.

Se fai qualche test e funziona bene, devi fare veramente poche modifiche al tuo programma.

Federico