Ciao a tutti.
Mi sto cimentando nella progettazione di un segnapunti elettronico per il gioco delle freccette.
Per chi non sapesse come funziona il gioco, si ha un punteggio iniziale (solitamente 501) e vince chi per primo arriva 0 esatto, sottraendo di volta in volta il punteggio fatto dal giocatore.
Inizio intanto con elencare i display che devo controllare:
due display 3 digit a 7 segmenti;
due display 2 digit a 7 segmenti;
un display 4 digit 7 segmenti (con punto digitale).
questi sono i display necessari per singolo giocatore, quindi sono da considerare X2.
un display 4 digit a 7 segmenti.
per completezza di progetto ci sarà anche un controller per i punteggi e l'interazione (ma non è il punto che voglio analizzare ora)
un display I2C OLED
un encoder rotativo che funge da navigatore e selettore
un tastierino numerico
Il mio principale dilemma al momento è come interfacciare tutti quei display? 32 elementi 7seg per lesattezza.
Questo limite arriva dalla mia inesperienza e dal fatto che nell'emulatore online che ho provato (ThinkerCad) si possono usare solo moduli singoli o componenti a 4 digit preassemblati con driver. (accetto consigli anche sull'emulatore)
Ho fatto alcune ricerche che mi hanno dato molte informazioni e creato diversa confusione.
Sono partito dal comandare un singolo display 7 segmenti con Arduino, al comandarlo tramite uno shift register (74HC595) per poi metterne in cascata 4 con 4 74HC595.
Qui ho pensato, dato anche che l'aggiornamento dei dati sul display è assai lento (un nuovo input ogni 10/20 sec), che mi bastava collegare 32 595 in serie e a ognuno collegare un 7 segmenti; mi è parsa inutilmente complicata come soluzione e non ho nemmeno la certezza che possa realmente funzionare.
Ho quindi scoperto il MAX7219, visto tutorial in giro, visto esempi e letto argomenti, giungendo a convincermi che può essere la soluzione che fa al caso mio, ma ancora penso possa esserci margine di miglioramento in quanto ho visto che ci sono display preassemblati da 2/3/4 elementi.
Questi penso possano essere la soluzione migliore, prenderli ovviamente con lo stesso modulo driver per la compatibilità e poterli collegare in cascata, ma non ne ho idea in pratica perchè appunto non ho potuto provare.
Vi allego un inizio di schema elettrico che sono riuscito a fare su EasyEDA che al più vi illustra l'idea alla base (realizzata con MAX7219).
Il lato programmazione sarà svolto penso con la libreria LedControl almeno per la gestione dei LED.
Ma a quello ci penserò dopo. Ho prima bisogno di fare chiarezza sull'hardware, con la programmazione sono più autonomo.
Guarda, ci sono dei modulini basati sul chip tm1637 che contengono già 4 display a 7 segmenti
Facili da usare e con degli esempi comprensibili
Dovrebbere essere concatenabili ovvero li colleghi uno dopo l'altro anche se non lo abbiamo mai fatto, sgrufola tra esempi e sorgenti di libreria
Alla mala parata sono solo 14 pin magari se va bene 7 piu un clock
Dunque, mettiamo che dalle varie ricerche fatte io abbia trovato queste due possibili soluzioni:
A. moduli pre assemblati a 4 digit con MAX7219, da implementare con maschere (ed eventualmente disabilitare i digit non utilizzati, anche se leggevo che potrebbero esserci difficoltà nella gestione dei moduli in cascata)
B. moduli pre assemblati con numero di digit custom (2/3/4 nel mio caso) con un 595 a gestione di ogni digit (es. il modulo 3 digit ha I 3 display 7seg ognuno con a bordo già il 595).
Il dubbio ora è quale configurazione può far di più al mio caso.
Ci sono elementi che dovrei considerare per scegliere una piuttosto che l'altra soluzione? Quali possono essere?
Ricordo che è un segnapunti, la frequenza di aggiornamento dei dati e' bassa.
@Claudio_FF hanno un 595 dedicato esclusivamente ad ogni digit
Io ho trovato questi moduli e a vederli hanno un 595 su ogni digit
Inoltre posto un piccolissimo esempio su ThinkerCad da me svolto per didattica, per farmi dire se quel "multiplexare in software" l'ho già involontariamente testato.
Si questi dovrebbero andare bene, completamente statici e digit completamente separati tra loro. Anche il circuito su Tinkercad è uguale.
Invece si parla di multiplex quando si condividono gli stessi fili per i segmenti di tutti i digit, e si accende velocemente a rotazione un solo digit alla volta per pochi millisecondi (è quello che il MAX7219 fa di suo in hardware)
Mi sono perso. Hai disegnato un circuito (e scelto dei moduli) che non richiedono nessun multiplex (ogni segmento di ogni digit è alimentato da un singolo filo dedicato solo a lui).
Mi riferivo al tuo commento sul multiplex, ma mi sembrava non necessario nel mio esempio ma mi ero confuso e pensavo ti intendessi quello e non mi stessi solo spiegando a cosa ti riferissi.
Con questa soluzione, in teoria comandando singolarmente ogni digit, non serve.
Può essere necessario dare un piccolo istante di blink ad ogni digit (una sorta di refresh) via SW?
Lo immagino come una sorta di display in cui c'è una frequenza di aggiornamento, intendevo questo. Farli spegnere e riaccendere 30 volte al sec (cifra a caso). Mi chiedevo se fosse necessario.