Segnapunti con display 7 segmenti

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.

Grazie!
SCH_Schematic1_2024-03-20.pdf (376,4 KB)

Oltre al MAX c'è il modulo TM1637, a seguire il link al progetto sul simulatore online wokwi.

Ci dovrebbe essere anche il progetto con il MAX, sempre su wokwi.

Prova con il motore di ricerca "MAX7219 wokwi".

Ciao.

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

Facci sapere

Grazie ragazzi,

il mio problema è che non riesco a trovare quei moduli pre-assemblati con (stesso) driver ma digit diversi, 4/3/2 per l'appunto.

E che ti importa?
Costano talmente poco che li comperi tutti uguali e mascheri le cifre che non usi

mi pareva più professionale fare una cosa ad-hoc, meglio ancora con componenti preassemblate se esistono.

però il mascherarle può essere ottima come idea per dare forma e vita al progetto, per poi migliorarlo.

Comunque se qualcuno avesse voglia di comprendere meglio la mia richiesta, e se non è comprensibile dirmi dove essere più chiaro, vi ringrazio.

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.

Grazie in anticipo

Attenzione ai moduli con i 595 che in realtà vanno multiplexati a software, e non hanno un 595 dedicato esclusivamente ad ogni digit.

Sì: il 7219, invece, gestisce i display internamente. Non bisogna fare la scansione continua.

Ciao Claudio, grazie della risposta.

Volevo chiedere cosa intendi con

@Claudio_FF hanno un 595 dedicato esclusivamente ad ogni digit

Io ho trovato questi moduli e a vederli hanno un 595 su ogni digit :thinking:

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.

Grazie

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)

Ok. Quindi con questo tipo di componente dovrei pensarci io a multiplexarli via SW?

Qui c'è un esempio di multiplex:

A cui modifichi il codice aggiungendo un delay come di seguito:

void scanDigit(int index)
{
  registers = digits[time[index]] | bit(digitPins[index]);
  if (colon) {
    registers |= bit(colonPin);
  }
  writeRegisters();
  delay(200);  //<- aggiunto
}

Vedrai così il tutto a rallenty e ci sarà solo un digit accesso nella stessa unità di tempo.

Ciao.

1 Like

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).

Ora a quale componente ti riferisci?

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?

Un... "blink"???... Perché devi farlo lampeggiare?...

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.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.