Vai al contenuto
PLC Forum


Matrice a LED e 16F876


Simons

Messaggi consigliati

salve a tutti..

avevo intenzione di costruirmi un pannellino a led a matrice composto da almeno 16 righe e 16 colonne di led da 3mm per visualizzare figure e scritte..

avevo intenzione di pilotarlo con un pic perchè non so programmare altro e vi chiedevo come posso fare per multiplexare le 16 righe con le 16 colonne avendo molte meno uscite (sul 16F876 mi pare 23 ma non volevo usarle tutte.)

come potrei fare?

grazie dell'aiuto

Link al commento
Condividi su altri siti


Premetto che non mi intendo di PIC , però se tu hai 16 righe e 16 colonne potresti usare 4 uscite come 4 bit per l'indirizzamento delle righe 4 per le colonne , lavorando in binario, e poi usare un altra uscita per abilitare o meno il punto della matrice scelto, quindi ti servirebbero due mux 4 a 16 (credo) , e 9 uscite!

Se AndreA passa di quà chiarirà molto meglio il concetto!! laugh.gif

Ciao

Link al commento
Condividi su altri siti

per l'uso dei multiplexer ok ho trovato già qualche integrato che mi sarà utile,

però una domanda.. con il multiplexer, o meglio con 1 di riga e 1 di colonna, si attiva un solo led, quindi se ho bisogno di accendere su una riga più di un led per volta devo multiplexare ogni volta la colonna.

mi spiego. accendo la riga 1. ho bisogno che i led 3 5 6 16 siano accesi. allora lasciando la riga 1 accesa, accendo in sequenza la colonna 3 poi la 5 e così via..

è questo il procedimento? perchè con 16 x 16 led mi sembra un po' complicato no?

Link al commento
Condividi su altri siti

si avevo già trovato in rete quel pannello tempo fa ma non so come possa aiutarmi perchè non so leggere il codice assembler del pic e quindi non so come accendere i vari led..

il problema è solo quello... sad.gif

Link al commento
Condividi su altri siti

Si .....dovrebbe essere il ragionamento giusto, tutto dipende dalla velocità di esecuzione e delle uscite del pic, devi essre in grado di inviare tutti i dati delle uscite , quindi 256 combinazioni suppongo , in un tempo breve , perchè non si veda il multiplex a occhio devi fare almeno 20 passaggi al secondo se non di più!

Link al commento
Condividi su altri siti

Ciao

Ho letto il tuo post precedente:

..non propio..se usi dei flip flop tri state (come i 74HC574 dello schema che ti ho linkato).

Due per fare le 16 righe e due per fare le 16 colonne.Tutti gli 8 ingressi di ciascun IC saranno interfacciati al bus dati ,mentre "multiplexi" solo il segnale CLK.Ciò che metti sul bus dati ,rimane poi memorizzato nei flip fop quando viene "sparato" in uscita dal segnale CLK.Quindi ,in questo caso ,mentre attivi supponiamo la riga 1,devi solo attivare in successione CLK colonna 1->8 e CLK colonna 9->16 wink.gif .. in questo modo con 32 step (azichè 256) ,"rinfreschi" tutti i led.. smile.gif

Potresti migliorare ulteriormente le cose con un bus a 16 dati (solo 16 step) con conseguente aumento della luminosità del display e probabile diminuzione nella complessità del programma ,ma dovresti usare 18 I/O..

Link al commento
Condividi su altri siti

cioè in pratica mi stai dicendo di usare invece che un multi plexer 4->16 un multiplexer più piccolo così è acceso più di un led su una riga?

non mi è ben chiaro il ragionamento del tuo ultimo post

Link al commento
Condividi su altri siti

Ciao

.. bè,non lo definerei "multiplexer più piccolo" sebbene la tecnica sia sempre basata sul multiplexing che però necessita di qualche I/O in più .

In pratica ,anzichè "puntare" un led alla volta (dei 256),le informazioni della matrice riguardanti righe o colonne , arrivano un Byte alla volta prima di essere memorizzate nei flip flop.

Per semplificare supponiamo di voler rappresentare in una matrice 8x8 una specie di bicchiere (mi è venuto così biggrin.gif), con un 74HC574 per le 8 righe e un'altro 74HC574 per le otto colonne,ciascuno con il suo CLK (il vero responsabile del multiplexing) ma con gli otto dati in ingresso in comune:totale 10 I/O

riga 1__ 10000001

riga 2__ 01000010

riga 3__ 00100100

riga 4__ 00011000

riga 5__ 00011000

riga 6__ 00011000

riga 7__ 00011000

riga 8__ 00111100

colonna 12345678

Ora,supponiamo di partire da zero con tutti i led spenti:se intendi procedere per righe, dovrai procedere come segue:

1) inviare sul bus dati il Byte "10000001"

2) un inpulso CLK sulla memoria "colonna"

3) inviare sul bus dati il Byte "00000001" (selezioni riga 1)

4) un inpulso CLK sulla memoria "righe"

5) si accendono tutti i led della riga 1

6) inviare sul bus dati il Byte "01000010"

7) un inpulso CLK sulla memoria "colonna"

8) inviare sul bus dati il Byte "00000010" (selezioni riga 2)

9) un inpulso CLK sulla memoria "righe"

10) si spegne la riga 1 e si accendono tutti i led della riga 2

e così via per tutte le righe (8 step).. il resto non lo scrivo biggrin.gif .. spero di essermi spiegato(e di non aver fatto confusione)..

Dimenticavo..tra una riga e l'altra dovrai prima spegnere i led della riga precedente per non avere sovrapposizioni....ma mi fermo qui perchè non doveva essere una lezione di programmazione di pic per la quale non sono di sicuro un asso .. non sapevo come altro spiegarmi.

Un'ultima cosa..nell'esempio precedente,ciascuna riga può essere interessata a pilotare fino a 8 led accesi (contrariamente alle colonne) quindi sarà necessario ricorrere a dei driver...

Link al commento
Condividi su altri siti

arrow+9/09/2008, 00:22--> (arrow @ 9/09/2008, 00:22)

grazie mille la spiegazione è perfetta ho capito..

il bus dati a 16 bit lo posso avere, visto che il pic ha 23 uscite , ne uso 16 per il bus dati e 2 per i due clock.

solo una cosa non mi torna. come mai devo spegnere i led tra una riga e l'altra?

per i driver pensavo agli ULN2803 .. sono open collector dovrebbero andare bene.

Link al commento
Condividi su altri siti

Ciao

..meno male..ciò impiegato una notte a metterla insieme biggrin.gifbiggrin.gif

..perchè,riferendoci sempre al mio esempio,nel punto 7) vedresti per un attimo la seconda stringa di dati di colonna (01000010) comparire sulla riga 1 e solo dopo il punto 9) comparirebbe in modo corretto sulla riga 2 (ricorda, rige e colonne rimangono memorizzate) wink.gif

..certo questi sono solo particolari..magari esistono tecniche di programmazione diverse,o più raffinate..non chiedermi come fare tutto il resto perchè ,come ti ripeto,ho davvero poca esperienza in merito..(anche se mi piacerebbe avere il tempo e la voglia per imparare) sad.gif

Lo penso anch'io..

Link al commento
Condividi su altri siti

ah ok adesso ho capito tutto!

eventualmente una domanda, per ampliare il pannello e inserire più di 16 led uso lo stesso metodo frazionando una riga in ad esempio 2 parti ognuna da 16 led .. giusto? almeno il bus dati rimane sempre a 16 bit.

grazie dell'aiuto smile.gif

Link al commento
Condividi su altri siti

arrow+9/09/2008, 13:28--> (arrow @ 9/09/2008, 13:28)

laugh.gif no no voglio fare un pannellone per visualizzare delle scritte e dei simboli quindi avevo bisogno di una certa definizione...

grazie dell'aiuto smile.gif

Link al commento
Condividi su altri siti

tesla88+9/09/2008, 22:41--> (tesla88 @ 9/09/2008, 22:41)

spero anche io di realizzarlo in un tempo relativamente breve. in realtà non è per me ma per un mio amico .. lui salda tutti i led e il circuito e io mi occupo della programmazione.. eventualmente farò un altro pannello per me.. tanto le spese sono a carico suo tongue.gif

Link al commento
Condividi su altri siti

ah una domanda...

eventualmente potrei aggiungere dei condensatori ad ogni riga per fare in modo che i led restino accesi un po' più a lungo e si eviti lo sfarfallino?

Link al commento
Condividi su altri siti

.. dry.gif ..avresti un fastidioso effetto di sovrapposizioni..o qualcosa del genere e perderesti in definizione,inoltre il carico che vedrebbe il condensatore,è funzione del n° di led accesi in quella riga..e avrebbe tempi di scarica non costanti...... dal mio punto di vista..TEORIA BOCCIATA biggrin.gif

Ricordati di scegliere led ad alta efficenza e di usare una routine del softw. che garantisca tempi di attivazione uguali per ciascuna riga!

..solo per curiosità:che linguaggio di programmazione usi per i pic?

Ciao.

Modificato: da arrow
Link al commento
Condividi su altri siti

arrow+10/09/2008, 09:02--> (arrow @ 10/09/2008, 09:02)

non avevo pensato alle sovrapposizioni.. ok niente cond happy.gif

utilizzo il C compilato con CCS C Compiler... lo so sarebbe meglio assembler ma non so un'acca di quel linguaggio sad.gif

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...