Buscar

Código para usar vários displays com poucas saídas

esse artigo foi escrito para um blog antigo meu


Por ser muito pedido a mim e acatando os pedidos, acabo de disponibilizar um código fonte para multiplexação de display de sete segmentos.


Apesar de simples, vamos falar um pouco sobre como utilizar esse código.


Features

  • Suporte aos PIC16 e facilmente adaptável a qualquer microcontrolador de qualquer fabricante;

  • Exibe valores de 0 a 15 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f);

  • Suporte a até 8 displays de sete segmentos com ponto, economizando no pior caso 48 pinos do microcontrolador!

  • Suporta displays anodo comum e catodo comum;

  • Facilmente configurável.

O código pode ser encontrado no meu repositório! E é claro, se quiserem colaborar com o código, toda ajuda é bem vinda.


Configuração


Não é necessário que sejam feitas configurações, mas caso seja necessário, veremos agora como deve ser feita configuração correta:


#define CONFIG_NUMBER_OF_DISPLAYS  3
#define CONFIG_COMMON_TERMINAL     0

Nessas duas linhas configuramos primeiramente o número de displays que serão conectados ao microcontrolador e e então configuramos o tipo dos displays. Para configurar os número de displays deve ser um número de 1 a 8. Já para configurar o tipo, deve ser colocado "1" ou "0", para caso catodo comum ou anodo comum respectivamente.


#define CONFIG_DISPLAY_SEGMENTS_PORT_OUT    PORTB
#define CONFIG_DISPLAY_SEGMENTS_PORT_DIR    TRISB
#define CONFIG_DISPLAY_SELECTOR_PORT_OUT    PORTC
#define CONFIG_DISPLAY_SELECTOR_PORT_DIR    TRISC

Agora é necessário que configuremos onde serão conectados os displays. As duas primeiras linhas configuram as saídas que serão conectados ao display. As duas últimas configuram os pinos que controlam quais displays serão acionados, chamados de seletores. Nessas linhas devem ser definidos quais os registradores controlam o port.


#define CONFIG_SEG_A                        (0b00000001)
#define CONFIG_SEG_B                        (0b00000010)
#define CONFIG_SEG_C                        (0b00000100)
#define CONFIG_SEG_D                        (0b00001000)
#define CONFIG_SEG_E                        (0b00010000)
#define CONFIG_SEG_F                        (0b00100000)
#define CONFIG_SEG_G                        (0b01000000)
#define CONFIG_SEG_DOT                      (0b10000000)

Caso seja necessário alterar a posições de cada segmento no port, esse recurso é para facilitar o projeto do circuito eletrônico de ligação.


#define CONFIG_TURN_OFF     255

O display pode ser apagado, caso necessário, passando o valor CONFIG_TURN_OFF para ele.


#define CONFIG_DISPLAY_0_SELECTOR_POSITON     (0b00000001)
#define CONFIG_DISPLAY_1_SELECTOR_POSITON     (0b00000010)
#define CONFIG_DISPLAY_2_SELECTOR_POSITON     (0b00000100)

Assim como a posição dos segmentos no port, também é possível alterar a posição dos seletores. A finalidade desse recurso é a mesma, facilitar o projeto do circuito eletrônico.


Utilização


Depois de configurar, para utilizar são necessárias 3 chamadas de funções. Junto ao código, há os arquivos de exemplo para mostrar uma forma de utilizar a biblioteca.


void sevenseg_Init(void);
void sevenseg_SetValue(unsigned char num, unsigned char value, unsigned char dot);
void sevenseg_Multiplex(void);

A chamada da função sevenseg_Init() dever se chamada no início do código. Essa função faz as configurações básicas dos displays


Quando invocada a função sevenseg_SetValue() tal é possível configurar os valores a serem exibidos. Os parâmetros são:


unsigned char num // que serve para selecionar o display que será alterado.
unsigned char value // que é novo valor do display selecionado.
unsigned char dot // que serve para desligar e ligar o ponto decimal.

A função sevenseg_Multiplex() faz todo o trabalho sujo e deve ser chamada em um frequência alta o suficiente para que não seja perceptível o ligar e desligar dos displays.


Conhecia a técnica?

16 visualizações0 comentário

Posts Relacionados

Ver tudo