Pic Micro, Arduino, Atmel, Microchip, Freescale, Texas Instrument, ecc. Strumenti di sviluppo, firmware e progetti.
#3663
mayo ha scritto:Dici che l'effetto latch viene svolto dal software ?

In pratica sì, anche se non esattamente nello stesso modo che sarebbe possibile con gli shift register HC595.
Non parlo spagnolo, ma a spanne credo d'aver capito che il catodo comune del display non è collegato fisso a massa, ma viene gestito da software attraverso un pin del micro.
Il "trucco" è quindi semplice da svelare: non hai bisogno della vera funzione latch perché, mentre fai scorrere i bit per cambiare i segmenti che vuoi vedere accesi, semplicemente togli energia al display.
In tal modo non percepisci il fastidioso effetto di "composizione a pezzi" delle cifre.
Immagina che il display sia spento, e tu voglia accendere il solo trattino centrale.
Sai che il 164 non ha un latch, e quindi, se vuoi far comparire un livello alto sull'ultimo pin della striscia di otto, dovrai accettare di veder passare tale bit in tutte le posizioni precedenti.
In altre parole: se non togliessi energia al catodo del display, vedresti lampeggiare per un attimo tutti i segmenti interessati a turno da quel bit 1 che sta solo passando nello shift register per poter arrivare sull'ultima posizione corrispondente al trattino che vuoi vedere.
Se ci fosse anche un vero latch non avresti bisogno di pilotare a parte il catodo del display, poiché mentre fai scorrere i nuovi bit le uscite fisiche resterebbero ferme.
Tanto per capirci: col 164 non puoi evitare che le uscite mostrino lo scorrimento dei bit, e quindi, ogni volta che vuoi comporre una nuova cifra, devi togliere energia al catodo con un pin a parte, altrimenti vedresti per un attimo il cosiddetto "ghosting", cioè il lampeggio flebile dei segmenti che dovrebbero restare al buio.
Finché conti lentamente i secondi come nel video, un eventuale ghosting dà poco fastidio, ma se dovessi contare i decimi vedresti un flebile otto in sottofondo.
Lo schema che hai postato nei primi messaggi mostrava due display collegati ai 595 (provvisti di latch), e quindi non adottava alcun accorgimento anti ghosting basato su pin aggiuntivi verso i catodi comuni.
La sostituzione dei 595 coi 164 (sprovvisti di latch) era sconsigliata proprio perché, lasciando il resto inalterato, avrebbe introdotto il ghosting.
A questo punto hai la massima libertà di sperimentazione: puoi seguire la via dei 164 con anti-ghosting gestito a parte spegnendo i catodi comuni, o puoi provare il multiplex, che a fronte del risparmio di pin chiede in cambio un po' d'impegno hardware e software in più.
Se scegli due HC164 e due display, tieni presente che i catodi comuni vedono passare la corrente di tutti i segmenti, per cui la somma potrebbe superare il limite previsto per un singolo pin del micro.
Il caso peggiore è il numero 88, che ha tutti i 14 segmenti accesi.
Per sicurezza potresti pilotare i catodi comuni attraverso un transistor, anziché direttamente dal micro.
A proposito di "pilotare", il mio invito a disegnare uno schema tuo su cui ragionare non era campato in aria, ma serviva per avere un'idea di base circa il taglio più o meno tecnico da dare al discorso.
Non conosco il tuo livello di coinvolgimento nell'hobby dell'elettronica, quindi ho sempre il dubbio di scrivere cose ovvie, cose incomprensibili, o cose ovvie incomprensibili. :)
#3666
Ok, alla fine ho optato per i 74HC595 al posto degli LS164 ma ho un piccolo dubbio sull'indirizzamento del display, essendo questo costituito da un doppio digit a 10 pin e con anodo comune, reduce di una cannibalizzazione, cioè questo http://www.artronic.com.pl/pic/TOD-3261Bx_rys.jpg.

Questo tipo di display contiene i 7 pin dei segmenti più i 2 anodi che fungono da chip select e il punto decimale che a me non serve, per cui utilizzerei solo 7 bit e a questo punto il dubbio è se, nel byte che devo inviare a ciascun shift register per la costituzione del digit da visualizzare, debba esserci anche l'1 relativo a ciascun anodo. Ma presumo che non può essere diversamente. O no ?
#3667
Per esserti d'aiuto dovrei sapere esattamente come collegheresti fra loro i vari oggetti.
Il display che citi ha solo 7 pin per i segmenti di entrambe le cifre, e ti mette a disposizione gli anodi comuni (uno per le decine e uno per le unità) affinché tu abbia modo di gestire una sequenza multiplex come quella descritta in un messaggio precedente.
Se non vuoi o non puoi collegare i segmenti direttamente al micro, hai bisogno di un solo shift register, non di due.
Gli anodi comuni dei display realizzano in effetti una sorta di "chip select", anche se la loro funzione non è di puro comando ma di vero passaggio fisico di una corrente destinata ai segmenti.
In pratica, se vuoi che i segmenti si accendano devi agire su due fronti: da un lato devi far comparire una tensione positiva su uno dei due terminali di anodo comune; e dall'altro devi far comparire una tensione vicina a zero (chiamala "massa" se il termine ti è più gradito) su uno o più catodi dell'unico gruppo di sette che hai a disposizione.
Come primo tentativo potresti collegare i due anodi a due pin d'uscita del micro, e i sette catodi alle uscite dello shift register, attraverso i resistori di limitazione già comparsi negli schemi precedenti.
Probabilmente, specie se il display non è modernissimo, la corrente richiesta ai pin collegati agli anodi sarà un po' più alta del consentito, ma non credo che arriverà ad un livello tale da produrre un danno fisico permanente.
In seguito, una volta afferrato il meccanismo, potrai decidere di togliere lo shift register e collegare i segmenti direttamente al micro.
Buona sperimentazione. :)
#3668
Aspè aspè...però cosi l'uso di un solo shift register mi spiazza perchè mi chiedo come facciano i segmenti di uno dei due display a rimanere accesi quando sto indirizzando i segmenti dell'altro :sick:
#3669
mayo ha scritto:Aspè aspè...però cosi l'uso di un solo shift register mi spiazza perchè mi chiedo come facciano i segmenti di uno dei due display a rimanere accesi quando sto indirizzando i segmenti dell'altro :sick:

Se mi mostri come collegheresti sedici o quattordici uscite di due shift register a soli sette pin di catodo disponibili ti mostro come fanno i segmenti di due display a rimanere accesi (apparentemente) insieme . :)

Scherzi a parte, pensavo di aver già chiarito la faccenda del multiplex: i due display non vanno accesi insieme, ma uno dopo l'altro in sequenza, con "turni" di qualche centesimo di secondo per volta.
Se proprio devi usare questo benedetto shift register, puoi scrivere nel micro il necessario per i passi seguenti:
1) Spegni le due uscite del micro collegate ai due anodi comuni;
2) Invii allo shift register gli impulsi per "caricare" sulle sette uscite lo stato dei segmenti che desideri per le decine;
3) Attivi la sola uscita del micro collegata all'anodo delle decine;
4) Lasci passare qualche centesimo di secondo (leggi come fare in qualche forum di Arduino);
5) Spegni le due uscite del micro collegate ai due anodi comuni;
6) Invii allo shift register gli impulsi per "caricare" sulle sette uscite lo stato dei segmenti che desideri per le unità;
7) Attivi la sola uscita del micro collegata all'anodo delle unità;
8) Lasci passare qualche centesimo di secondo (leggi come fare in qualche forum di Arduino);
9) Torni al passo 1 e ripeti all'infinito.

A proposito di ripetere, non ho ancora chiaro in mente uno schema definitivo di ciò che vorresti realizzare, visto che di volta in volta compaiono e scompaiono pezzi diversi e connessioni diverse. :?
In uno schema mi pare di aver notato parecchi LED singoli oltre ai display, ciascuno alimentato per conto proprio da un'uscita del micro, e parecchi pulsanti, ciascuno collegato per conto proprio ad un ingresso. Ebbene, anche se probabilmente mi sto dando la zappa sui piedi, ti anticipo che potresti gestire tutto (LED singoli, doppio display e pulsanti) sfruttando solo 12 pin del micro.
Se provi a disegnare (non copiare, citare, incollare, importare) uno schema di massima credibile, sarò ben lieto di aiutarti a completarlo. :D
#3671
Sì, certo che i due display non possono essere accesi contemporaneamente ma seguono la sequenza del codice, ma il mio problema è che di Arduino mi rimangoo liberi soltanto 8 pin digitali e 1 analogico, mentre per multiplexare con i 2 transistor e senza shift register, se ho ben capito, avrei bisogno di 10 pin. Riguardo allo schema che mi chiedi, dovrei rifarti questo download/file.php?id=311&mode=view ma SENZA il pulsante BTN TUNER, SENZA il MUTE/VOLUME CONTROL e SENZA i LED D6 e D7. Ciò che dovrei aggiungere allo schema precedente, già funzionante, dovrebbe essere qualcosa del genere che ieri avevo abbozzato con Easyeda online http://imgur.com/a/093FF, che mi dà la possibilità di visualizzare il conteggio sui 2 display.
#3672
Il mio suggerimento riguarda la possibilità di gestire tutte le risorse esterne (LED, display, pulsanti) con 12 o forse 11 fili IN TOTALE, non con 10 fili DA AGGIUNGERE allo schema già funzionante che mostri.
Se non vuoi cambiare i collegamenti attuali verso LED e pulsanti, puoi usare i pochi pin liberi per gestire uno shift register.
Entrambe le soluzioni richiedono la scrittura di un nuovo firmware, quindi, visto che devi comunque metter mano al programma, tanto vale scegliere la più economica che non usa altri integrati, a meno che tu non voglia proprio sperimentare a fini didattici il funzionamento di uno shift register. La scelta è solo tua. :)
#3673
:oops: ... il numero di pin necessari per multiplexare sono 9 e non 10 come avevo scritto, purtroppo sempre insufficienti. Comunque, vedrò di capire come si possa utilizzare un solo shift register . Meglio one che two ;)
#3674
mayo ha scritto::oops: ... il numero di pin necessari per multiplexare sono 9 e non 10 come avevo scritto, purtroppo sempre insufficienti. Comunque, vedrò di capire come si possa utilizzare un solo shift register . Meglio one che two ;)

Siamo entrambi troppo giovani per ricordare i famosi fratelli De Rege, ma leggendo i nostri messaggi sembra proprio che ognuno parli una lingua propria che l'altro non riconosce.
Io dico che i bambini non nascono sotto i cavoli, e tu rispondi dicendo che lo sai benissimo, perché tutti sanno che i bambini li porta la cicogna.
Per gestire i due display, più tutti i pulsanti, più tutti i LED singoli, NON TI SERVE LO STRAMALEDETTISSIMO SHIFT REGISTER. :)
Una volta acclarato che lo shift register non ti serve, non hai bisogno di scoprire perché ne basti uno invece di due.
Vediamo se riusciamo a capirci con figure al posto delle parole.
Disegna un rettangolo e chiamalo Arduino.
Disegna un rettangolo diviso a metà da una linea verticale e chiamalo "display a due cifre".
Disegna un rettangolo e chiamalo "LED singoli".
Disegna un rettangolo e chiamalo "pulsanti".
Fatto ciò, traccia sette linee da Arduino a display a due cifre; falle proseguire verso LED singoli; falle proseguire verso pulsanti. Sono sempre le stesse sette linee che raggiungono i display, i LED singoli, e i pulsanti.
Totale di pin usati finora: 7.
Ora traccia due linee da Arduino a display, portando il totale pin a 9.
Ora traccia una linea da Arduino a LED singoli, portando il totale pin a 10.
Infine traccia una linea da Arduino a pulsanti, ottenendo la somma definitiva 11.
Salvo errori e omissioni, puoi gestire tutto il meccanismo con soli 11 pin da Arduino all'esterno. Fine della trasmissione. :)
Vendo

OWON HDS2202S nuovo imballo originale 190.00 eur[…]

Sono comuni interruttori a levetta DPDT. Se le due[…]

Visita il nostro canale telegram