Disegno su matrice LED 8x32 con 74HC154


8

Come posso inviare un motivo in una matrice LED 8x32? Sto usando il microcontrollore AT89S52 con un decodificatore di linea 4-16 74HC154 , programmando in C con l'IDE Keil. Ho eseguito la scansione verticale, ma sono sconcertato al passaggio successivo. Includerò lo schema se necessario. Il circuito è lo stesso con quello che includo solo sotto Non uso 74HC138, matrice di anodi comuni e utilizzo UN2803 come driver, non sto usando la memoria

La porta 1 è la colonna, la porta 2 è la riga ... il codice:

 row = 0xFF;
     //for (j=0x01; j< 0x08; j<<=1)  {   /* scan left to right */
     for (j=0x00; j<=0x0F; j++)
     {
          E1=0;
          E2=0;
          P1 = j;
          P2 = row;
                                   /* Output to LED Port */
          for (i = 0; i < 100; i++) 
           {  /* Delay for 100 ms */
              delay ();                       /* call delay function */

           }

inserisci qui la descrizione dell'immagine

Risposte:


3

Lo schema normale per pilotare un display a LED multiplex MxN è quello di designare una direzione come "file" e l'altra come "colonne", indipendentemente dal layout fisico sullo schermo, in modo tale che il sistema ecciti i fili "fila" uno alla volta e, mentre ogni riga è sequenziata, il sistema ecciterà i fili della "colonna" per tutti i LED su quella riga che dovrebbero essere accesi.

Ogni filo di colonna deve includere un dispositivo per regolare la corrente quando viene attivato (un resistore può funzionare qui) e ogni filo di fila deve avere un driver in grado di fornire corrente sufficiente per alimentare tutte le colonne contemporaneamente. L'hardware non deve consentire il pilotaggio di più di una riga alla volta, ma deve consentire il pilotaggio di qualsiasi combinazione di colonne.

I chip 74HC154 potrebbero funzionare correttamente nella logica di selezione delle righe, ma poiché può essere attivo solo un output alla volta, non sono adatti per il controllo delle colonne. Se volessi scansionare il tuo "lateralmente", in modo che fosse logicamente accessibile come 32 righe e 8 colonne, il 74HC154 potrebbe essere adatto per selezionare una riga, ma quindi dovresti aggiungere hardware aggiuntivo per consentire a ciascuna riga di fornire abbastanza corrente per pilotare otto LED e dovresti anche aggiungere qualcosa a ciascuna uscita dell'UN2803 per limitare le correnti.

Più probabilmente ciò che vorresti fare sarebbe sostituire i 74HC154 con un gruppo di chip 74HC595 (registri a scorrimento) e resistori, oppure uno o più chip driver LED con limitazione di corrente incorporata (ad esempio quattro TLC5916 Texas Instruments , disponibile da Digi-Key). Collega quei chip a una porta SPI dal tuo controller e sposta ogni fila di dati in serie. Se si utilizza un chip driver low-side (come il summenzionato TLC5916), è necessario modificare i driver di riga in sorgente di corrente anziché affondarlo. Il modo più semplice per farlo sarebbe semplicemente quello di utilizzare otto transistor NPN, ciascuno con il collettore legato alla guida positiva (è possibile utilizzare un'alimentazione non regolamentata se lo si desidera), la base legata all'uscita del controller o un chip di decodifica, e l'emettitore legato a una fila di LED.


quindi devo invertire la logica? P2 = colonna; P1 = Row? ".... allora il 74HC154 potrebbe essere adatto per selezionare una riga ..." Presto proverò questa logica nel software ...
Rick Ant

Se si desidera avere 32 "file" verticali, è possibile utilizzare un 74HC154 per selezionarle, ma il 74HC154 non è in grado di approvvigionare molta corrente (né affondare molto per quel motivo) e guidare con un ciclo di lavoro 1/8 è quasi sicuramente meglio che guidare con un ciclo di lavoro 1/16. Non si indica se i LED sono cablati con la direzione orizzontale come anodi o catodi, ma si consiglia di utilizzare driver potenti (possibilmente transistor discreti) per le righe e driver limitatori di corrente per le colonne (indipendentemente dal fatto che le righe finiscono per essere orizzontale o verticale).
supercat

Se si desidera che il display sia luminoso, sarà probabilmente necessario che la corrente del convertitore di frequenza per ciascun filo della colonna sia superiore alla corrente massima che il LED può sostenere in modo sicuro. Per evitare che i LED vengano danneggiati se il codice smette di funzionare, è consigliabile progettare il driver di riga in modo che non guidi una riga per un periodo di tempo eccessivo anche se il processore non funziona correttamente. Ci sono molti modi in cui questo può essere realizzato. Se si utilizzano transistor discreti per i driver di riga, è possibile aggiungere un resistore e un cappuccio a ciascuno per limitare il ciclo di lavoro massimo.
supercat

In alternativa, se si utilizza un contatore per controllare le righe, è possibile utilizzare il circuito di temporizzazione per rilevare se trascorre un tempo eccessivo tra i conteggi e svuotare il display o generare un impulso di conteggio "automatico".
supercat

hai un esempio di codice per questo? Ad esempio, voglio visualizzare il carattere AAAA?
Rick Ant
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.