Compartilhe Pictronics


AVISO DE SEGURANÇA:

INFORMAMOS AOS USUÁRIO QUE HAVERÁ NECESSIDADE DE CRIAR SEU USUÁRIO COM NOVO REGISTRO NO FÓRUM A PARTIR DE 23/05/13, ONDE SERÁ DECIDIDO A ATIVAÇÃO PELO ADMINISTRADOR DEVIDO A SPAMMERS. USUÁRIOS FALSOS SERÃO BANIDOS POR IP E DOMÍNIO

IR AO FORUM

receba nosso Newsletter

Receba todos os novos artigos publicados e fique por dentro das novidades.

Nome:

Email:

Busca de Datasheets

DataSheet Catalog em Potuguês

Atividades no fórum

Feeds

Feed Microchip

Microchip: PIC16 Microcontrollers
Recently Updated 8-bit PIC16 Microcontrollers from Microchip Technology Inc.

Quem está Online?

Nós temos 40 visitantes online

Linguagem



Siga-nos no Twitter e fique por dentro

Follow us on Twitter

Nos diga em que você está interessado

Qual seu nível de conhecimento?
 

O que procura?

Curtir Pictronics no Facebook

Share

Pictronics pelo mundo

PDF Imprimir E-mail

Multiplexando displays de 7 segmentos com PIC16F877A

A ligação de vários displays de 7 segmentos nos PICs podem ser feitas de diversas meneiras, uma bastante interessante é a que se segue.

A ligação de displays multiplexados tráz a vantagem de que utilizamos  poucos terminais de saída dos PICs, porém, o software deve ser escrito de forma a gerar a informação adequada para podermos ver, abaixo temos um esquema que mostra a ligação de dois displays de 7 segmentos em um PIC16F877A, observe que para a ligação dos displays apenas são utilizados 9 terminais do PIC e não 14 como seria se não fossem multiplexados.

display 7seg_3

Observe a ligação dos pinos do display em que cada pino "A" de cada display são ligados juntos e apenas um conjunto de resistores limitadores são necessários, mesmo que ligassemos três ou mais displays devemos fazer as mesmas ligações e ainda, no Proteus podemos utilizar os labels que são "ligações virtuais" que melhoram a construção do esquema e sua visualização, veja no detalhe:

display 7seg_3_labels

O label é colocado em cada fio que queremos nomear e então depois, para ligar outros fios juntos basta acionar a ferramenta lable e colocar  o mesmo nome que teremos uma ligação entre eles:

clique na ferramenta Label e depois clique no fio que deseja nomear, crie  um nome e depois clique nos outros fios e coloque o mesmo nome que teremos uma ligação entre eles. Neste exemplo criamos sete Labels "A", "B", "C", "D", "E", "F" e "G" e ligamos em cada segmento dos displays com a conexão adequada, "A" com "A" e assim por diante.

Logo após é a hora de criar o programa, abaixo temos um exemplo de programa criado para apresentar o resultado de uma soma de 0 á 99 nos displays multiplexados, veja que atualizamos as saídas para um display e mostramos um dígito, logo depois, mudamos para  o segundo dígito e ligamos o outro display, alternando de tempos em tempos para "criar" a imagem estática, no vídeo não dá pra percener devido à simulação mas se montarmos numa placa te teste o efeito é bem interessane, veja o código:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* Código de exemplo de ligação dois displays de 7 segmentos com PIC16F877A    *
 * multiplexados. Para ser compilada com o PICC-CCS *
 * Autor: Nelson Camilo de Almeida *
 * www.pictronics.com.br *
 * Data 04/03/2011 */
 
#include "main_7seg multiplexado.h"
 
#define Display1 pin_c6 // Display 1 ligado ao pino pin_c6
#define Display2 pin_c7 // Display 2 ligado ao pino pin_c7
 
byte const digito[] = { 0b10111111, // 0 Define cada segmento
0b10000110, // 1 dos valores mostrados
0b11011011, // 2 no display de LEDs
0b11001111, // 3 em binário para ficar
0b11100110, // 4 mais fácil de codificar
0b11101101, // 5 cada dígito dos valores
0b11111101, // 6 mostrados no display.
0b10000111, // 7
0b11111111, // 8
0b11100111};// 9
 
void main() // Função principal
{
int contador; // variável de contagem
int unidade, dezena; // unidades da variável contador
 
setup_adc_ports(NO_ANALOGS); // Configura analógicos
setup_adc(ADC_OFF); // ADC desligado
setup_psp(PSP_DISABLED); // PSP desligado
setup_spi(SPI_SS_DISABLED); // SPI delsigado
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Configura Timer 0
setup_timer_1(T1_DISABLED); // Configura Timer 1
setup_timer_2(T2_DISABLED,0,1); // Configura Timer 2
 
 
while (true) // Loop infinito
{
for (contador = 0; contador != 100; contador++) // Contagem de 00 até 99
{
unidade = contador / 10; // Calcula a unidade
dezena = contador - (unidade * 10); // Calcula a dezena
output_b (digito[unidade]); // Apresenta Digito[unidade_do_contador]
output_high (Display1); // Habilita display 1
delay_ms (50); // Aguarda 50ms para dar uma pausa no PIC
output_low (Display1); // Desabilita display 1
output_b (digito[dezena]); // Apresenta Digito[dezena_do_contador]
output_high (Display2); // Habilita display 2
delay_ms (50); // Aguarda 50ms para dar uma pausa no PIC
output_low (Display2); // Desabilita display 2
}
}
}

Desta meneira podemos  ligar vários displays nos PICs economizando picnos paramuitos displays mas aumentando a complexidade do software de controle e ainda existem outras formas de se fazer essa multiplexação, em outra ocasião iremos mostrar mas delas, continue verificando!!

Os arquivos necessários para esta experiência estão aqui, baixe e teste você mesmo (arquivo Proteus versão 7.7).

Veja o vídeo deste exemplo, os dígitos não aparecem ligados devido a um delay grande na simulação mas, se montar na protoboard você verá que os dígitos aparecem simultaneamente, muito legal!!!!