Display de 7 segmentos multiplexados
-
Upload
rodrigo-almeida -
Category
Technology
-
view
7.694 -
download
3
description
Transcript of Display de 7 segmentos multiplexados
Display de 7 segmentos
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajuba
ELT024 Display de 7 segmentos [email protected] 1 / 29
Programacao dos PerifericosAcesso as portas do microcontrolador
Porta Endereco dos dados Endereco de config. (TRIS)
PORTA 0xF80 0xF92
PORTB 0xF81 0xF93
PORTC 0xF82 0xF94
PORTD 0xF83 0xF95
PORTE 0xF84 0xF96
ELT024 Display de 7 segmentos [email protected] 3 / 29
Programacao dos PerifericosAcesso as portas do microcontrolador
1// d e f i n e s para p o r t a s de e n t r a d a e s a ı d a2#d e f i n e PORTD (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF83 )3#d e f i n e TRISD (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF95 )4// i n i c i o do programa5 v o i d main ( v o i d ) interrupt 06{7 // c o n f i g u r a n d o t o d o s os p i n o s como s a ı d a s8 TRISD = 0b00000000 ;9 // l i g a apenas os q u a t r o u l t i m o s l e d s
10 PORTD = 0b11110000 ;11 //mantem o s i s t e m a l i g a d o i n d e f i n i d a m e n t e12 f o r ( ; ; ) ;13}
ELT024 Display de 7 segmentos [email protected] 4 / 29
Programacao dos PerifericosAcesso as portas do microcontrolador
1// b a s i c o . h2// f u n c o e s de b i t3#d e f i n e B i t S e t ( arg , b i t ) ( ( a r g ) |= (1<< b i t ) )4#d e f i n e B i t C l r ( arg , b i t ) ( ( a r g ) &= ˜(1<< b i t ) )5#d e f i n e B i t F l p ( arg , b i t ) ( ( a r g ) ˆ= (1<< b i t ) )6#d e f i n e B i t T s t ( arg , b i t ) ( ( a r g ) & (1<< b i t ) )78// d e f i n e s para r e g i s t r o s e s p e c i a i s9#d e f i n e PORTA (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF80 )
10#d e f i n e PORTB (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF81 )11#d e f i n e PORTC (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF82 )12#d e f i n e PORTD (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF83 )13#d e f i n e PORTE (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF84 )1415#d e f i n e TRISA (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF92 )16#d e f i n e TRISB (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF93 )17#d e f i n e TRISC (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF94 )18#d e f i n e TRISD (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF95 )19#d e f i n e TRISE (∗ ( v o l a t i l e n e a r uns igned char ∗) 0 xF96 )
ELT024 Display de 7 segmentos [email protected] 5 / 29
Programacao dos Perifericos
Configuracao dos perifericos
ELT024 Display de 7 segmentos [email protected] 6 / 29
Programacao dos PerifericosConfiguracao dos perifericos
Term. DescricaoConfigurarcomo
Funcao
4 RA2/AN2/VREF-/CVREF RA2 Display 2
7 RA5/AN4/SS/C2OUT RA5 Display 1
8 RE0/AN5/CK1SPP RE0 RS-LCD / Display 3
10 RE2/AN7/OESPP RE2 RW-LCD / Display 4
19 RD0/SPP0 RD0Barramento de dadospara o LCD/7seg/Led
20 RD1/SPP1 RD1
21 RD2/SPP2 RD2
22 RD3/SPP3 RD3
27 RD4/SPP4 RD4Barramento de dadospara o LCD / 7seg /Led
28 RD5/SPP5/P1B RD5
29 RD6/SPP6/P1C RD6
30 RD7/SPP7/P1D RD7
ELT024 Display de 7 segmentos [email protected] 7 / 29
Display de 7 segmentos
Display de 7 segmentos
ELT024 Display de 7 segmentos [email protected] 8 / 29
Display de 7 segmentos
Evolucao das valvulas nixie
Objetivo: reproduzir algarismos (numeros) arabicos
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Efeito colateral: reproduzir letras
maiusculas: A, C, E, F, H, J, L, P, S, U, Zminusculas: a, b, c, d, h, i, n, o, r, t, u
Reproducao de pequenas mensagens
Reproducao de valores hexadecimal
digitos hex: A, b, C, d, E, F
ELT024 Display de 7 segmentos [email protected] 10 / 29
Display de 7 segmentos
http://www.hobbyprojects.com/the diode/seven segment display.html
ELT024 Display de 7 segmentos [email protected] 11 / 29
Display de 7 segmentos
A montagem dos algarismos e feita ligando ou desligando cada umdos 7 segmentos.
Por exemplo o numero 2: e necessario ligar apenas os segmentos/ledsa, b, g, e, d.1
Para acender o led e necessario saber se o display e de catodo ouanodo comum.
catodo comum: cada led e aceso com 0 voltsanodo comum: cada led e aceso com 5 volts
1Imagine a estrutura gfedcba, onde cada bit e um segmento. O numero 2 erepresentado por 0b1011011 ou 0x5B
ELT024 Display de 7 segmentos [email protected] 12 / 29
Display de 7 segmentos
Display g f e d c b a Hex. (0gfedcba)0 0 1 1 1 1 1 1 3F1 0 0 0 0 1 1 0 062 1 0 1 1 0 1 1 5B3 1 0 0 1 1 1 1 4F4 1 1 0 0 1 1 0 665 1 1 0 1 1 0 1 6D6 1 1 1 1 1 0 1 7D7 0 0 0 0 1 1 1 078 1 1 1 1 1 1 1 7F9 1 1 0 1 1 1 1 6FA 1 1 1 0 1 1 1 77b 1 1 1 1 1 0 0 7CC 0 1 1 1 0 0 1 39d 1 0 1 1 1 1 0 5EE 1 1 1 1 0 0 1 79F 1 1 1 0 0 0 1 71
ELT024 Display de 7 segmentos [email protected] 13 / 29
Display de 7 segmentos
Atencao
Alguns displays possuem o ponto decimal embutido como no caso danossa placa. Para liga-lo e necessario setar o bit 7 (MSB) da variavelPORTD, que esta ligada diretamente ao display.
Cada segmento opera com um led que possue caracterısticas similaresaos leds discretos. Portanto cada um consome de 15 a 20 mA decorrente. A ligacao direta aos terminais do micro deve seracompanhada de um resistor de limitacao de corrente.
ELT024 Display de 7 segmentos [email protected] 14 / 29
Display de 7 segmentos
1 v o i d main ( v o i d )2{3 // v e t o r que armazena a c o n v e r s a o4 // dos a l g a r i s m o s para o d i s p l a y 7 seg5 const char conv [ ] = {0x3F , 0x06 , 0x5B , 0x4F ,6 0x66 , 0x6D , 0x7D , 0x07 ,7 0x7F , 0x6F , 0x77 , 0x7C ,8 0x39 , 0x5E , 0x79 , 0x71 } ;9 uns igned i n t var , time ;
10 TRISD = 0x00 ;11 TRISA = 0x00 ;12 PORTA = 0xFF ;13 f o r ( var = 0 ; var < 1 6 ; var++)14 {15 // c o l o c a os c a r a c t e r e s em s e q u e n c i a na s a ı d a16 PORTD = conv [ var ] ;17 // apenas para c o n t a r tempo18 f o r ( time = 0 ; time < 65000 ; time++) ;19 }20}
ELT024 Display de 7 segmentos [email protected] 15 / 29
Display de 7 segmentos
Multiplexacao de displays
ELT024 Display de 7 segmentos [email protected] 16 / 29
Display de 7 segmentosMultiplexacao dos displays
Multiplexar: Consiste em combinar diversos sinais num unico canal detransmissao
Vantagens
Reducao de custos com cabeamento e tamanho de placaUtilizacao de uma quantidade maior de dispositivos que saıdasdisponıveis
Desvantagens
Perda de tamanho de banda devido a efeitos de overheadDiscretizacao do tempo no acionamento dos dispositivosAumento da complexidade do sistema
ELT024 Display de 7 segmentos [email protected] 17 / 29
Display de 7 segmentosMultiplexacao dos displays
Pelo esquema da ligacao dos displays na placa de desenvolvimentopodemos notar que os segmentos semelhantes de cada um dos 4displays estao ligados a um mesmo terminal
Os displays podem ser ativados/desativados atraves das linhas decomando que sao operadas cada uma por um bit:
Disp1 - RA5Disp2 - RA2Disp3 - RE0Disp4 - RE2
ELT024 Display de 7 segmentos [email protected] 19 / 29
Display de 7 segmentosMultiplexacao dos displays
Nao e possıvel apresentar numeros diferentes de modo simultaneoem cada um dos displays
A solucao e realizar uma multiplexacao temporal
E ligado apenas um display de cada vez.
O tempo ligado deve ser suficiente para que as celulas oculares sejamsensibilizadas (percepcao retiniana)
A mudanca deve ser rapida o suficiente para evitar flicker
ELT024 Display de 7 segmentos [email protected] 20 / 29
Display de 7 segmentosMultiplexacao dos displays
Rotina para acionar displays de 7 segmentos multiplexados:
1 colocar no barramento de dados o valor a ser mostrado no display X
2 ligar o display X atraves da linha de comando
3 esperar um tempo adequado para evitar flicker
4 desligar o display
5 escolher o proximo display (X+1)
6 voltar ao passo 1
ELT024 Display de 7 segmentos [email protected] 21 / 29
Display de 7 segmentosCriacao da biblioteca disp7seg
Funcoes necessarias para a criacao de uma biblioteca de acionamento deum conjunto de displays de 7 segmentos multiplexados:
Inicializacao()
Configura os terminais de dados e de controle
MudaDigito()
Recebe um numero entre 0 e F e uma posicaoArmazena internamente os 4 numeros a serem exibidos
AtualizaDisplay() 2
Desliga o display atual, muda o numero e liga o proximo display
2Nao e recomendado que o tempo de exibicao seja feito dentro da funcao. Isto podeatrapalhar em sistemas maiores, principalmente sistemas que possuem interrupcoes.
ELT024 Display de 7 segmentos [email protected] 22 / 29
Display de 7 segmentosCriacao da biblioteca disp7seg
Armazenamento de dados dentro de uma biblioteca
Usado sempre que for necessario passar valores entre funcoes dentrode um mesmo arquivo ou armazenar valores que nao podem serperdidos ao longo da execucao do programa. Ex: o display que estaatualmente ligadoE feito atraves de variaveis ”globais-locais”3
As variaveis devem possuir o atributo staticUsar sempre o menor tamanho possıvel pois estas variaveis saoalocadas permanentemente, reduzindo a memoria RAM disponıvel.Devem ser inicializadas dentro da funcao principal da biblioteca
3Global dentro do escopo da biblioteca, local pois nao pode ser acessada fora doarquivo
ELT024 Display de 7 segmentos [email protected] 23 / 29
Display de 7 segmentosCriacao da biblioteca disp7seg
1#i n c l u d e "disp7seg.h"
2// v e t o r para armazenar a c o n v e r s a o do d i s p l a y3 s t a t i c const char valor [ ] = {0x3F , 0x06 , 0x5B , 0x4F , 0x66 , 0x6D ,4 0x7D , 0x07 , 0x7F , 0x6F , 0x77 , 0x7C , 0x39 , 0x5E , 0x79 , 0x71 } ;5 s t a t i c char display ; // armazena q u a l e o d i s p l a y d i s p o n ı v e l6 s t a t i c char v0 , v1 , v2 , v3 ; // armazena o v a l o r a s e r e n v i a d o ao ←↩
d i s p l a y7 v o i d MudaDigito ( char val , char pos ) {8 i f ( pos == 0) {9 v0 = val ;
10 }11 i f ( pos == 1) {12 v1 = val ;13 }14 i f ( pos == 2) {15 v2 = val ;16 }17 i f ( pos == 3) {18 v3 = val ;19 }20}
ELT024 Display de 7 segmentos [email protected] 24 / 29
Display de 7 segmentosCriacao da biblioteca disp7seg
1 v o i d InicializaDisplays ( v o i d )2{3 // c o n f i g u r a c a o dos p i n o s de c o n t r o l e4 BitClr ( TRISA , 2 ) ;5 BitClr ( TRISA , 5 ) ;6 BitClr ( TRISE , 0 ) ;7 BitClr ( TRISE , 2 ) ;8 // i n i c i a l i z a c a o das v a r i a v e i s9 v0 = 0 ;
10 v1 = 0 ;11 v2 = 0 ;12 v3 = 0 ;13 disp = 0 ;14 // apenas AN0 e a n a l o g i c o15 ADCON1 = 0b00001110 ;16 // Porta de dados17 TRISD = 0b00000000 ;18}
ELT024 Display de 7 segmentos [email protected] 25 / 29
Display de 7 segmentosCriacao da biblioteca disp7seg
1 v o i d AtualizaDisplay ( v o i d ) {2 PORTA = 0x00 ; // d e s l i g a t o d o s os d i s p l a y s3 PORTE = 0x00 ;4 PORTD = 0x00 ; // d e s l i g a t o d o s os l e d s5 s w i t c h ( display ) { // l i g a apenas o d i s p l a y da vez6 case 0 :7 PORTD = valor [ v0 ] ; BitSet ( PORTA , 5 ) ; display = 1 ;8 break ;9 case 1 :
10 PORTD = valor [ v1 ] ; BitSet ( PORTA , 2 ) ; display = 2 ;11 break ;12 case 2 :13 PORTD = valor [ v2 ] ; BitSet ( PORTE , 0 ) ; display = 3 ;14 break ;15 case 3 :16 PORTD = valor [ v3 ] ; BitSet ( PORTE , 2 ) ; display = 0 ;17 break ;18 d e f a u l t :19 display = 0 ;20 break ;21 }22}
ELT024 Display de 7 segmentos [email protected] 26 / 29
Display de 7 segmentosCriacao da biblioteca disp7seg
Header4
1#i f n d e f DISP7SEG H2 #define DISP7SEG_H
3 v o i d MudaDigito ( char val , char pos ) ;4 v o i d AtualizaDisplay ( v o i d ) ;5 v o i d InicializaDisplays ( v o i d ) ;6#e n d i f
4E interessante notar que as variaveis foram declaradas apenas no arquivo .c,portanto nao sao acessıveis fora do disp7seg.c. A unica maneira de mudar o valor delase atraves da funcao MudaDigito() e AtualizaDisplay().
ELT024 Display de 7 segmentos [email protected] 27 / 29
Display de 7 segmentosUtilizacao da biblioteca disp7seg
Utilizacao da biblioteca
A funcao AtualizaDisplay() deve ser chamada em intervalos regularesdentro do programa principalEla deve ser repetida indefinidamente ate o termino da execucao doprograma
1// i n i c i o do programa2 v o i d main ( v o i d )3{4 // d e c l a r a c a o de v a r i a v e i s5 // execu c ao do c o d i g o6 // mudanca dos v a l o r e s dos d i s p l a y s7 f o r ( ; ; ) // l o o p i n f i n i t o8 {9 // a t u a l i z a c a o do d i s p l a y
10 }11}
ELT024 Display de 7 segmentos [email protected] 28 / 29
Display de 7 segmentosUtilizacao da biblioteca disp7seg
1// programa exemplo de u t i l i z a c a o da b i b l i o t e c a d i s p 7 s e g2#i n c l u d e "basico.h"
3#i n c l u d e "config.h"
4#i n c l u d e "disp7seg.h"
56// i n i c i o do programa7 v o i d main ( v o i d )8{9 uns igned i n t tempo ;
10 InicializaDisplays ( ) ;11 MudaDigito ( 0 , 0 ) ;12 MudaDigito ( 1 , 1 ) ;13 MudaDigito ( 2 , 2 ) ;14 MudaDigito ( 3 , 3 ) ;15 f o r ( ; ; )16 {17 AtualizaDisplay ( ) ;18 // g a s t a um tempo para e v i t a r o e f e i t o f l i c k e r19 f o r ( tempo=0;tempo<1000; tempo++) ;20 }21}
ELT024 Display de 7 segmentos [email protected] 29 / 29