Desenho na matriz de LED 8x32 com 74HC154

8

Como envio um padrão para uma matriz de LED 8x32? Estou usando o microcontrolador AT89S52 com um decodificador de linha 74HC154 4-16, programando em C com o Keil IDE. Eu fiz a digitalização vertical, mas estou perplexo na próxima etapa. Vou incluir o esquema, se necessário. O circuito é o mesmo que eu incluo abaixo apenas não uso 74HC138, matriz anódica comum e uso UN2803 como driver, não estou usando a memória

Porta 1 é a coluna, porta 2 é a linha ... o código:

 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 */

           }

insira a descrição da imagem aqui

Rick Ant
fonte

Respostas:

3

O padrão normal para acionar um display LED multiplexado MxN é designar uma direção como "linhas" e a outra como "colunas", independentemente do layout físico na tela, de modo que o sistema energize os fios de "linha" um de cada vez e, enquanto cada linha é sequenciada, o sistema energiza os fios da "coluna" para todos os campos nessa linha que devem estar acesos.

Cada fio da coluna deve incluir um dispositivo para regular a corrente quando é ativado (um resistor pode funcionar aqui), e cada fio da linha deve ter um driver que possa fornecer corrente suficiente para alimentar todas as colunas de uma só vez. O hardware não precisa permitir que mais de uma linha seja acionada por vez, mas deve permitir que qualquer combinação de colunas seja acionada.

Os chips 74HC154 podem funcionar bem na lógica de seleção de linha, mas como apenas uma saída pode estar ativa por vez, eles não são adequados para controlar colunas. Se você quisesse varrer seus "lados", para que eles fossem acessados ​​logicamente como 32 linhas e 8 colunas, o 74HC154 pode ser adequado para selecionar uma linha, mas você precisará adicionar hardware adicional para permitir que cada linha forneça corrente suficiente para acionar oito LEDs e você também teria que adicionar algo a cada saída do UN2803 para limitar as correntes.

Provavelmente, o que você gostaria de fazer seria substituir os 74HC154 por um monte de chips 74HC595 (registros de deslocamento) e resistores, ou então um ou mais chips de driver de LED com limitação de corrente embutida (por exemplo, quatro Texas Instruments TLC5916 , disponível na Digi-Key). Conecte esses chips a uma porta SPI do seu controlador e desloque cada linha de dados em série. Se você usar um chip de driver do lado inferior (como o TLC5916 mencionado anteriormente), precisará alterar os drivers de linha para obter a corrente de origem, em vez de afundá-la. A maneira mais simples de fazer isso seria usar oito transistores NPN, cada um com o coletor amarrado ao trilho positivo (você pode usar um suprimento não regulamentado, se desejar), a base amarrada à saída do controlador ou de um chip decodificador, e o emissor amarrado a uma linha de LED.

supercat
fonte
então eu devo reverter a lógica? P2 = colum; P1 = Linha? ".... o 74HC154 pode ser adequado para a seleção de uma linha ..." Tentarei essa lógica no software em breve ...
Rick Ant
Se você quiser ter 32 "linhas" verticais, poderá usar um 74HC154 para selecioná-los, mas o 74HC154 não é capaz de fornecer muita corrente (nem afundar muito para esse assunto) e dirigir com um ciclo de trabalho de 1/8 é quase certamente melhor do que dirigir com um ciclo de trabalho de 1/16. Você não indica se os LEDs estão conectados com a direção horizontal como ânodos ou catodos, mas eu recomendo que você use drivers fortes (possivelmente transistores discretos) para as linhas e drivers limitadores de corrente para as colunas (independentemente de as linhas acabam sendo horizontais ou verticais).
supercat
Se você deseja que seu monitor seja brilhante, provavelmente será necessário que a corrente do inversor para cada fio da coluna seja maior que a corrente máxima que o LED pode suportar com segurança. Para evitar que os LEDs sejam danificados se o código parar de ser executado, você provavelmente deve projetar seu driver de linha para que ele não conduza uma linha por um período excessivo de tempo, mesmo que o processador não funcione corretamente. Há várias maneiras de fazer isso. Se alguém estiver usando transistores discretos para acionadores de linha, poderá adicionar um resistor e uma tampa a cada um para limitar o ciclo de trabalho máximo.
supercat
Como alternativa, se alguém usa um contador para controlar as linhas, pode-se usar o circuito de temporização para detectar se um tempo excessivo decorre entre as contagens e apagar a tela ou gerar um pulso de contagem "automático".
supercat
você tem um exemplo de código para isso? Por exemplo, eu quero exibir o caractere AAAA?
9603 Rick Ant