Display de 7 segmentos multiplexados

10.220 visualizações

Publicada em

Uso de displays de 7 segmentos, multiplexação temporal

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
10.220
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
118
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Display de 7 segmentos multiplexados

  1. 1. Display de 7 segmentos Prof.MSc.Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajub´a rodrigomax@unifei.edu.br ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 1 / 29
  2. 2. Programa¸c˜ao dos Perif´ericos Revis˜ao ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 2 / 29
  3. 3. Programa¸c˜ao dos Perif´ericos Acesso `as portas do microcontrolador Porta Endere¸co dos dados Endere¸co de config. (TRIS) PORTA 0xF80 0xF92 PORTB 0xF81 0xF93 PORTC 0xF82 0xF94 PORTD 0xF83 0xF95 PORTE 0xF84 0xF96 ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 3 / 29
  4. 4. Programa¸c˜ao dos Perif´ericos Acesso `as portas do microcontrolador 1// d e f i n e s para p o r t a s de entrada e s a´ı d a 2#d e f i n e PORTD (∗( v o l a t i l e near unsigned char ∗) 0xF83 ) 3#d e f i n e TRISD (∗( v o l a t i l e near unsigned char ∗) 0xF95 ) 4// i n i c i o do programa 5void main ( void ) interrupt 0 6{ 7 // configurando todos os pinos como s a´ı d a s 8 TRISD = 0b00000000 ; 9 // l i g a apenas os quatro ´u l t i m o s l e d s 10 PORTD = 0b11110000 ; 11 //mant´em o sistema l i g a d o i n d e f i n i d a m e n t e 12 f o r ( ; ; ) ; 13} ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 4 / 29
  5. 5. Programa¸c˜ao dos Perif´ericos Acesso `as portas do microcontrolador 1// b a s i c o . h 2// fun¸c˜oes de b i t 3#d e f i n e BitSet ( arg , b i t ) (( arg ) |= (1<< b i t ) ) 4#d e f i n e B i t C l r ( arg , b i t ) (( arg ) &= ˜(1<< b i t ) ) 5#d e f i n e B i t F l p ( arg , b i t ) (( arg ) ˆ= (1<< b i t ) ) 6#d e f i n e BitTst ( arg , b i t ) (( arg ) & (1<< b i t ) ) 7 8// 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 s 9#d e f i n e PORTA (∗( v o l a t i l e near unsigned char ∗) 0xF80 ) 10#d e f i n e PORTB (∗( v o l a t i l e near unsigned char ∗) 0xF81 ) 11#d e f i n e PORTC (∗( v o l a t i l e near unsigned char ∗) 0xF82 ) 12#d e f i n e PORTD (∗( v o l a t i l e near unsigned char ∗) 0xF83 ) 13#d e f i n e PORTE (∗( v o l a t i l e near unsigned char ∗) 0xF84 ) 14 15#d e f i n e TRISA (∗( v o l a t i l e near unsigned char ∗) 0xF92 ) 16#d e f i n e TRISB (∗( v o l a t i l e near unsigned char ∗) 0xF93 ) 17#d e f i n e TRISC (∗( v o l a t i l e near unsigned char ∗) 0xF94 ) 18#d e f i n e TRISD (∗( v o l a t i l e near unsigned char ∗) 0xF95 ) 19#d e f i n e TRISE (∗( v o l a t i l e near unsigned char ∗) 0xF96 ) ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 5 / 29
  6. 6. Programa¸c˜ao dos Perif´ericos Configura¸c˜ao dos perif´ericos ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 6 / 29
  7. 7. Programa¸c˜ao dos Perif´ericos Configura¸c˜ao dos perif´ericos Term. Descri¸c˜ao Configurar como Fun¸c˜ao 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 RD0 Barramento de dados para o LCD/7seg/Led 20 RD1/SPP1 RD1 21 RD2/SPP2 RD2 22 RD3/SPP3 RD3 27 RD4/SPP4 RD4 Barramento de dados para o LCD / 7seg / Led 28 RD5/SPP5/P1B RD5 29 RD6/SPP6/P1C RD6 30 RD7/SPP7/P1D RD7 ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 7 / 29
  8. 8. Display de 7 segmentos Display de 7 segmentos ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 8 / 29
  9. 9. Display de 7 segmentos ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 9 / 29
  10. 10. Display de 7 segmentos Evolu¸c˜ao das v´alvulas nixie Objetivo: reproduzir algarismos (n´umeros) ar´abicos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Efeito colateral: reproduzir letras mai´usculas: A, C, E, F, H, J, L, P, S, U, Z min´usculas: a, b, c, d, h, i, n, o, r, t, u Reprodu¸c˜ao de pequenas mensagens Reprodu¸c˜ao de valores hexadecimal digitos hex: A, b, C, d, E, F ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 10 / 29
  11. 11. Display de 7 segmentos http://www.hobbyprojects.com/the diode/seven segment d ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 11 / 29
  12. 12. Display de 7 segmentos A montagem dos algarismos ´e feita ligando ou desligando cada um dos 7 segmentos. Por exemplo o n´umero 2: ´e necess´ario ligar apenas os segmentos/leds a, b, g, e, d.1 Para acender o led ´e necess´ario saber se o display ´e de catodo ou anˆodo comum. catodo comum: cada led ´e aceso com 0 volts anˆodo comum: cada led ´e aceso com 5 volts 1 Imagine a estrutura gfedcba, onde cada bit ´e um segmento. O n´umero 2 ´e representado por 0b1011011 ou 0x5B ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 12 / 29
  13. 13. Display de 7 segmentos Display g f e d c b a Hex. (0gfedcba) 0 0 1 1 1 1 1 1 3F 1 0 0 0 0 1 1 0 06 2 1 0 1 1 0 1 1 5B 3 1 0 0 1 1 1 1 4F 4 1 1 0 0 1 1 0 66 5 1 1 0 1 1 0 1 6D 6 1 1 1 1 1 0 1 7D 7 0 0 0 0 1 1 1 07 8 1 1 1 1 1 1 1 7F 9 1 1 0 1 1 1 1 6F A 1 1 1 0 1 1 1 77 b 1 1 1 1 1 0 0 7C C 0 1 1 1 0 0 1 39 d 1 0 1 1 1 1 0 5E E 1 1 1 1 0 0 1 79 F 1 1 1 0 0 0 1 71 ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 13 / 29
  14. 14. Display de 7 segmentos Aten¸c˜ao Alguns displays possuem o ponto decimal embutido como no caso da nossa placa. Para lig´a-lo ´e necess´ario setar o bit 7 (MSB) da vari´avel PORTD, que est´a ligada diretamente ao display. Cada segmento opera com um led que possue caracter´ısticas similares aos leds discretos. Portanto cada um consome de 15 a 20 mA de corrente. A liga¸c˜ao direta aos terminais do micro deve ser acompanhada de um resistor de limita¸c˜ao de corrente. ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 14 / 29
  15. 15. Display de 7 segmentos 1void main ( void ) 2{ 3 // v e t o r que armazena a convers˜ao 4 // dos a l g a r i s m o s para o d i s p l a y 7 seg 5 const char conv [ ] = {0x3F , 0x06 , 0x5B , 0x4F , 6 0x66 , 0x6D , 0x7D , 0x07 , 7 0x7F , 0x6F , 0x77 , 0x7C , 8 0x39 , 0x5E , 0x79 , 0x71 }; 9 unsigned i n t var , time ; 10 TRISD = 0x00 ; 11 TRISA = 0x00 ; 12 PORTA = 0xFF ; 13 f o r ( var = 0; var < 16; var++) 14 { 15 // c ol o ca os c a r a c t e r e s em s eq uˆen cia na s a´ı d a 16 PORTD = conv [ var ] ; 17 // apenas para contar tempo 18 f o r ( time = 0; time < 65000; time++); 19 } 20} ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 15 / 29
  16. 16. Display de 7 segmentos Multiplexa¸c˜ao de displays ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 16 / 29
  17. 17. Display de 7 segmentos Multiplexa¸c˜ao dos displays Multiplexar: Consiste em combinar diversos sinais num ´unico canal de transmiss˜ao Vantagens Redu¸c˜ao de custos com cabeamento e tamanho de placa Utiliza¸c˜ao de uma quantidade maior de dispositivos que sa´ıdas dispon´ıveis Desvantagens Perda de tamanho de banda devido a efeitos de overhead Discretiza¸c˜ao do tempo no acionamento dos dispositivos Aumento da complexidade do sistema ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 17 / 29
  18. 18. Display de 7 segmentos ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 18 / 29
  19. 19. Display de 7 segmentos Multiplexa¸c˜ao dos displays Pelo esquema da liga¸c˜ao dos displays na placa de desenvolvimento podemos notar que os segmentos semelhantes de cada um dos 4 displays est˜ao ligados a um mesmo terminal Os displays podem ser ativados/desativados atrav´es das linhas de comando que s˜ao operadas cada uma por um bit: Disp1 - RA5 Disp2 - RA2 Disp3 - RE0 Disp4 - RE2 ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 19 / 29
  20. 20. Display de 7 segmentos Multiplexa¸c˜ao dos displays N˜ao ´e poss´ıvel apresentar n´umeros diferentes de modo simultˆaneo em cada um dos displays A solu¸c˜ao ´e realizar uma multiplexa¸c˜ao temporal ´E ligado apenas um display de cada vez. O tempo ligado deve ser suficiente para que as c´elulas oculares sejam sensibilizadas (percep¸c˜ao retiniana) A mudan¸ca deve ser r´apida o suficiente para evitar flicker ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 20 / 29
  21. 21. Display de 7 segmentos Multiplexa¸c˜ao 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 atrav´es da linha de comando 3 esperar um tempo adequado para evitar flicker 4 desligar o display 5 escolher o pr´oximo display (X+1) 6 voltar ao passo 1 ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 21 / 29
  22. 22. Display de 7 segmentos Cria¸c˜ao da biblioteca disp7seg Fun¸c˜oes necess´arias para a cria¸c˜ao de uma biblioteca de acionamento de um conjunto de displays de 7 segmentos multiplexados: Inicializa¸c˜ao() Configura os terminais de dados e de controle MudaDigito() Recebe um n´umero entre 0 e F e uma posi¸c˜ao Armazena internamente os 4 n´umeros a serem exibidos AtualizaDisplay() 2 Desliga o display atual, muda o n´umero e liga o pr´oximo display 2 N˜ao ´e recomendado que o tempo de exibi¸c˜ao seja feito dentro da fun¸c˜ao. Isto pode atrapalhar em sistemas maiores, principalmente sistemas que possuem interrup¸c˜oes. ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 22 / 29
  23. 23. Display de 7 segmentos Cria¸c˜ao da biblioteca disp7seg Armazenamento de dados dentro de uma biblioteca Usado sempre que for necess´ario passar valores entre fun¸c˜oes dentro de um mesmo arquivo ou armazenar valores que n˜ao podem ser perdidos ao longo da execu¸c˜ao do programa. Ex: o display que est´a atualmente ligado ´E feito atrav´es de vari´aveis ”globais-locais”3 As vari´aveis devem possuir o atributo static Usar sempre o menor tamanho poss´ıvel pois estas vari´aveis s˜ao alocadas permanentemente, reduzindo a mem´oria RAM dispon´ıvel. Devem ser inicializadas dentro da fun¸c˜ao principal da biblioteca 3 Global dentro do escopo da biblioteca, local pois n˜ao pode ser acessada fora do arquivo ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 23 / 29
  24. 24. Display de 7 segmentos Cria¸c˜ao da biblioteca disp7seg 1#i n c l u d e "disp7seg.h" 2// v e t o r para armazenar a convers˜ao do d i s p l a y 3 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 qual ´e o d i s p l a y d i s p o n´ı v e l 6 s t a t i c char v0 , v1 , v2 , v3 ; // armazena o v a l o r a s e r enviado ao ← d i s p l a y 7void 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 rodrigomax@unifei.edu.br 24 / 29
  25. 25. Display de 7 segmentos Cria¸c˜ao da biblioteca disp7seg 1void InicializaDisplays ( void ) 2{ 3 // c o n f i g u r a ¸c˜a o dos pinos de c o n t r o l e 4 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 s 9 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 o 15 ADCON1 = 0b00001110 ; 16 // Porta de dados 17 TRISD = 0b00000000 ; 18} ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 25 / 29
  26. 26. Display de 7 segmentos Cria¸c˜ao da biblioteca disp7seg 1void AtualizaDisplay ( void ) { 2 PORTA = 0x00 ; // d e s l i g a todos os d i s p l a y s 3 PORTE = 0x00 ; 4 PORTD = 0x00 ; // d e s l i g a todos os l e d s 5 switch ( display ) { // l i g a apenas o d i s p l a y da vez 6 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 rodrigomax@unifei.edu.br 26 / 29
  27. 27. Display de 7 segmentos Cria¸c˜ao da biblioteca disp7seg Header4 1#i f n d e f DISP7SEG H 2 #define DISP7SEG_H 3 void MudaDigito ( char val , char pos ) ; 4 void AtualizaDisplay ( void ) ; 5 void InicializaDisplays ( void ) ; 6#e n d i f 4 ´E interessante notar que as vari´aveis foram declaradas apenas no arquivo .c, portanto n˜ao s˜ao acess´ıveis fora do disp7seg.c. A ´unica maneira de mudar o valor delas ´e atrav´es da fun¸c˜ao MudaDigito() e AtualizaDisplay(). ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 27 / 29
  28. 28. Display de 7 segmentos Utiliza¸c˜ao da biblioteca disp7seg Utiliza¸c˜ao da biblioteca A fun¸c˜ao AtualizaDisplay() deve ser chamada em intervalos regulares dentro do programa principal Ela deve ser repetida indefinidamente at´e o termino da execu¸c˜ao do programa 1// i n i c i o do programa 2void main ( void ) 3{ 4 // d e c l a r a ¸c˜a o de v a r i ´a v e i s 5 // execu¸c˜ao do c´odigo 6 //mudan¸ca dos v a l o r e s dos d i s p l a y s 7 f o r ( ; ; ) // loop i n f i n i t o 8 { 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 rodrigomax@unifei.edu.br 28 / 29
  29. 29. Display de 7 segmentos Utiliza¸c˜ao 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 g 2#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" 5 6// i n i c i o do programa 7void main ( void ) 8{ 9 unsigned 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 // gasta um tempo para e v i t a r o e f e i t o f l i c k e r 19 f o r ( tempo =0;tempo <1000; tempo++); 20 } 21} ELT024 Display de 7 segmentos rodrigomax@unifei.edu.br 29 / 29

×