Multiplexing e PWM

Ciao! Dovrei realizzare un timer utilizzando il display a 7 segmenti con 4 cifre (che tra le altre cose ho anche una discreta difficoltà a reperire). Il display ha già i pin dei segmenti collegati così da poter lavorare in multiplexing senza dover fare altri collegamenti, vorrei però fare in modo di poter controllare la luminosità. Il modo più semplice che mi è venuto in mente è quello di collegare i transistor dei singoli anodi delle cifre ai pin pwm di arduino, così da mandare il valore a 0 nel momento in cui la cifra è spenta e al valore desiderato quando è visibile. Il dubbio è che avendo un refresh abbastanza alto (ditemi voi quanto dovrebbe stare accesa ogni singola cifra) il pwm lavora correttamente??

I display a 7 segmenti a 4 cifre li trovi abbastanza comunemente, a meno che tu non voglia roba di discrete dimensioni. Robot Italy, per esempio, ne ha di diversi colori.

Per il pilotaggio in PWM, si può fare, ma per i collegamenti va visto di che tipo è il display, se ad anodo o a catodo comune.

Sul refresh non ho capito la domanda. Del PWM, in questo caso, non te ne devi preoccupare, il PWM regola la luminosità della cifra accesa. A te serve multiplexare le cifre, ossia devi accedendere periodicamente per un breve intervallo di tempo i segmenti della cifra che intendi visualizzare, ciclicamente dalla 1a all'ultima e ricominciare. Considera che sotto ad una frequenza di 30 Hz l'occhio umano percepisce lo sfarfallìo.

bene grazie! No mi chiedevo se il procedimento per il pwm fosse corretto, di solito ho sempre usato display ad anodo comune e comandavo un bjt tipo interruttore quando dovevo accendere quella cifra, non sapevo se usando il pwm, che lavora con frequenze elevate, unendolo alle frequenze elevate del refresh ci sarebbero stati problemi. Dovendo usare la cosa per un display per un oggetto di scena per un corto, mi chiedevo quale fosse la maggior frequenza possibile, perché con le videocamere è facile andare in contro a flickering che fanno sfarfallare tutto. Quanti millisecondi dovrei tenere accese come minimo le singole cifre per avere una visualizzazione corretta??

Artal: Ciao! Dovrei realizzare un timer utilizzando il display a 7 segmenti con 4 cifre (che tra le altre cose ho anche una discreta difficoltà a reperire). Il display ha già i pin dei segmenti collegati così da poter lavorare in multiplexing senza dover fare altri collegamenti, vorrei però fare in modo di poter controllare la luminosità. Il modo più semplice che mi è venuto in mente è quello di collegare i transistor dei singoli anodi delle cifre ai pin pwm di arduino, così da mandare il valore a 0 nel momento in cui la cifra è spenta e al valore desiderato quando è visibile. Il dubbio è che avendo un refresh abbastanza alto (ditemi voi quanto dovrebbe stare accesa ogni singola cifra) il pwm lavora correttamente??

mah... tempo fa m'era venuta in mente l'idea di alimentare i display con un alimentazione regolabile separata ( LM317 seguito da diodi se necessario) ed arduino lo usavo solo come pilotaggio dei transistor (tipo bc 547) sia su i segmenti che sul comune ma non l'ho mai messa in pratica

@Artal: non so neanch'io che frequenze ti servono perché una telecamera non riprenda lo sfarfallio del multiplexing. Non penso però che dovrai salire parecchio, tempo fa ho realizzato il Micrologio (cercalo sul forum in Megatopic oppure sul mio sito, link in calce) e con una fotocamera in modalità video non notavo sfarfallii sulla ripresa del display (non mi ricordo su che frequenze ero, ma considera che non sarò stato oltre i 50 Hz). Ma l'apparecchio che usi non ti dice la frequenza di ripresa? Prova raddoppiandola e fai delle prove.

Ho preso quattro display singoli ed ho provato in attesa di quello a quattro cifre, la coppia pwm + multiplexing non funziona, sfarfalla in maniera visibilissima anche ad occhio! Credo che farò come suggerito da gingardu.

Per quanto riguarda la frequenza dovrò girare per forza con tempi di 1/50 di secondo perchè altrimenti rischio che sfarfallino le luci che vanno con i 50 Hz della linea elettrica. Per ora ho lasciato stare il pwm ed ho collegato l'arduino ad uno shift register che gestisce i valori e 4 pin ai bjt che determinano la cifra in uso, giocando un po' con i tempi di accensione sono riuscito a ridurre di molto il flickering, ma un po' è comunque presente, soprattutto nelle riprese molto ravvicinate e con poca luce. Ho notato che già passando da tempi di 1/50 a 1/60 la cosa cambia moltissimo perchè se la frequenza di aggiornamento non è moooolto vicina a quella dell'otturatore l'effetto è evidentissimo. Magari eliminando lo shift register migliora qualcosa?! L'alternativa altrimenti è usare 4 display singoli con i suoi shrift register o driver e via....saldature come se piovesse!! (so che elettronicamente non ha senso, ma si sa che al cinema è tutto finto!) :D

I tempi sono importanti. Col 7219 hai sicuramente una frequenza di aggiornamento molto più elevata. Forse potresti risolvere.

Come regola generale, sarebbe da stare su 10:1 fra frequenza di PWM e frequenza di multiplexing (delle singole cifre) ... se multiplexi a 50HZ, dovresti usare un PWM minimo a 2KHz (50 hz di multiplexing, per 4 cifre, significa che ogni cifra viene pilotata per 1/4 del tempo di quei 50Hz), per non vedere nessun tipo di sfarfallio in nessuna condizione, incluse le riprese video ...

leo72: I tempi sono importanti. Col 7219 hai sicuramente una frequenza di aggiornamento molto più elevata. Forse potresti risolvere.

Ma tanto ho pin sufficienti, se bypassassi il driver e usassi semplicemente i pin arduino sarei più lento che con il 7219? Magari lavorando direttamente su PORTD così da non avere ritardi nell'inserimento dei singoli valori nei pin del sette segmenti

Etemenanki: Come regola generale, sarebbe da stare su 10:1 fra frequenza di PWM e frequenza di multiplexing (delle singole cifre) ... se multiplexi a 50HZ, dovresti usare un PWM minimo a 2KHz (50 hz di multiplexing, per 4 cifre, significa che ogni cifra viene pilotata per 1/4 del tempo di quei 50Hz), per non vedere nessun tipo di sfarfallio in nessuna condizione, incluse le riprese video ...

Ma posso cambiare la frequenza del pwm? Non è relativa al valore che si da in uscita?

Quando tu modifichi il duty-cycle del PWM per cambiare la luminosita’, la sua frequenza rimane fissa, quello che cambi e’ il rapporto fra il tempo “high” e quello “low” dell’onda … se imposti la frequenza a 2 KHz, rimangono 2KHz per qualsiasi valore del duty-cycle …

Si possono cambiare le frequenze dei timer 1 e 2, se cambi quella del timer 0 poi ti saltano tutte le funzioni basate sui tempi di Arduino perché al timer 0 c'è agganciato il contatore di millisecondi.

Per cambiare frequenza un metodo indolore e rapido, che non altera il resto dei settaggi del timer, è quello di cambiare il prescaler ;)