H P S P I N E l e t r ô n i c a D i g i t a l e P r o g r a m a ç ã o d e M i c r o c o n t r o l a d o r e s P I C |
HOME PROJETOS PROGRAMAÇÃO |
Normalmente, quando se deseja trabalhar com displays de 7 segmentos, utiliza-se um circuito driver decodificador de números em formato BCD para 7 segmentos. Esses drivers possuem 4 bits de entrada para o número BCD que se deseja exibir e 7 bits de saída para enviar o layout decodificado ao display de 7 segmentos. Quando se trata de multiplexação de displays, o uso desses drivers vão requerer 4 pinos do microcontrolador somente para os dados mais N pinos do microcontrolador para selecionar tantos quantos forem os displays usados no projeto e talvez outros pinos para os sinais de controle do próprio driver. Esse mecanismo de decodificação também pode ser conseguido usando-se usando-se um shift register de entrada serial e saídas paralelas que usará apenas dois pinos do microcontrolador para receber os dados.
Neste projeto veremos como conectar ao PIC dois displays de 7 segmentos usando um shift register 74LS164N para multiplexá-los através de processo serial.
Este projeto foi escrito para um microcontrolador "PIC16F628A" mas pode ser convertido facilmente para qualquer outro microntrolador dessa família.
Antes de continuar, faça o download do projeto do programa exemplo.
Descomprima o arquivo "mplx2.zip" no HD; será criada a pasta "mplx2". Entre na pasta "mplx2" e de 2 cliques no arquivo "mplx2hs510.mcp" para abrir o projeto no programa MPLAB.
Monte, numa placa PCB ou num Protoboard, o circuito mostrado no esquema elétrico abaixo para poder testar o programa exemplo.
ATENÇÃO:
Não ficou representado no esquema acima as conexões de alimentação do shift register 74LS164N.
Ao montar o circuito conecte o pino 7 desse integrado ao Ground e o pino 14 ao +5V (VCC).
Observando-se o esquema elétrico acima podemos notar que apenas 4 portas do microcontrolador serão usadas para obter o efeito de multiplexação requerido. Os pinos RB0 e RB1, quando em nível alto (alternadamente), selecionam o respectivo display, aterrando seu catodo através do respectivo transistor (Q1/Q2). Os pinos RB3 alimenta com dados a entrada serial do 74LS164N e o pino RB5 aciona o clock do 74LS164N durante o processo de carga do dado.
|
|
Primeiro, seleciona-se o display onde o valor deve ser exibido. Supondo-se que se deseja mostrar o valor no display de mais baixa ordem, levanta-se o sinal do pino RB0, fazendo o o transistor Q1 entrar em condução e abaixa-se o sinal do pino RB1 cortando-se o transistor Q2. Isso fará com que o catodo do display CS0, conectado ao transistor Q1, seja aterrado e o display acenda.
Se desejarmos mostrar o valor no display de mais alta ordem, abaixa-se o sinal do pino RB0, cortando o o transistor Q1 e levanta-se o sinal do pino RB1 fazendo com que o transistor Q2 entre en condução. Isso fará com que o catodo do display CS1, conectado ao transistor Q2, seja aterrado e o display acenda.
Em seguida, carrega-se o 74LS164N alimentando-se serialmente o pino 1 do mesmo com o layout do valor a ser exibido no display, bit a bit, levantando-se e abaixando-se o sinal de clock no pino 8 para cada bit a ser carregado. O valor, assim alimentado no 74LS164N, aparecerá paralelamente em seus pinos 3, 4, 5, 6, 10, 11, 12 e 13 que estão conectados simultaneamente aos pinos dos segmentos a, b, c, d, e, f, g e dp dos dois displays. O pino dp dos displays refere-se ao ponto decimal.
Para conseguir a multiplexação, os pinos RB0 e RB1 devem ser alternados rapidamente, digamos num intervalo de tempo de 10 milisegundos, enquanto o 74LS164N deve ser carregado com o valor a ser exibido no display selecionado.
O programa exemplo mostrará uma contagem de 2 dígitos hexadecimais nos dois displays de 7 segmentos CS0 para o dígito menos significativo e CS1 para o dígito mais significativo.
A contagem sera limitada ao valor 255 (0xFF) pelo símbolo "cntlim".
A multiplexação será obtida pela interrupção do TMR1 cujo valor inicial de contagem deve ser especificado no simbolo "mplxtimer". Neste programa, que usa frequência de clock (Fosc) de 4MHZ, o símbolo "mplxtimer" foi inicializado com o valor 55536 (decimal) que faz o TMR1 estourar a cada 10ms, tempo que proporciona um refrescamento ideal para que o display nao pisque. Se desejar mudar a frequência de operação do microcontrolador, esse número deverá se recalculado para que o TMR1 possa estourar em 10ms ou 0,01s (segundos), bastando dividir 0,01 pelo tempo do novo ciclo de instrução e subtrair o resultado de 65536. Por exemplo, se a nova frequência escolhida for 16MHz, calcule o cilo de instrução dividindo 4 por 16000000. Isso dará como resultado 250ns (nanosegundos) ou 0,00000025s (segundos). Dividindo 0,01 por 0,00000025 teremos como resultado 40000 que subtraido de 65536 vai dar 25536. Este deve ser o novo valor do símbolo "mplxtimer" para o TMR1 estourar em 10ms numa frequência de 16MHZ.
Conforme dito anteriormente, a seleção dos displays será feita através dos pinos RB0 para o dígito menos significativo e RB1 para o dígito mais significativo. Os dados serão enviados serialmente aos displays através dos pinos RB3 e RB5.
Os segmentos dos displays serão acionados conforme o layout contido na Table-Read "charset" residente na memória flash do microcontrolador.
O programa foi compilado e testado com sucesso antes de ser empacotado para distribuição. Assim, antes de modificar o programa por sua conta, grave no microcontrolador o arquivo original "mplx2hs510.hex" para verificar se seu circuito esta realmente funcionando. Se tudo correu bem, então sinta-se a vontade para alterar o programa e o circuito, por exemplo, inserindo mais um display no esquema.
Projeto MPLAB do programa exemplo mplx2.zip.
Índice dos circuitos |
H P S P I N Desde 04 de Março de 2010 Atualização: 08 de Dec de 2024 |