Display de 7 segmentos multiplexados

29
Display de 7 segmentos Prof.MSc.Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajub´ a [email protected] ELT024 Display de 7 segmentos [email protected] 1 / 29

description

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

Transcript of Display de 7 segmentos multiplexados

Page 1: Display de 7 segmentos multiplexados

Display de 7 segmentos

Prof.MSc.Rodrigo Maximiano Antunes de Almeida

Universidade Federal de Itajuba

[email protected]

ELT024 Display de 7 segmentos [email protected] 1 / 29

Page 2: Display de 7 segmentos multiplexados

Programacao dos Perifericos

Revisao

ELT024 Display de 7 segmentos [email protected] 2 / 29

Page 3: Display de 7 segmentos multiplexados

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

Page 4: Display de 7 segmentos multiplexados

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

Page 5: Display de 7 segmentos multiplexados

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

Page 6: Display de 7 segmentos multiplexados

Programacao dos Perifericos

Configuracao dos perifericos

ELT024 Display de 7 segmentos [email protected] 6 / 29

Page 7: Display de 7 segmentos multiplexados

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

Page 8: Display de 7 segmentos multiplexados

Display de 7 segmentos

Display de 7 segmentos

ELT024 Display de 7 segmentos [email protected] 8 / 29

Page 9: Display de 7 segmentos multiplexados

Display de 7 segmentos

ELT024 Display de 7 segmentos [email protected] 9 / 29

Page 10: Display de 7 segmentos multiplexados

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

Page 11: Display de 7 segmentos multiplexados

Display de 7 segmentos

http://www.hobbyprojects.com/the diode/seven segment display.html

ELT024 Display de 7 segmentos [email protected] 11 / 29

Page 12: Display de 7 segmentos multiplexados

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

Page 13: Display de 7 segmentos multiplexados

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

Page 14: Display de 7 segmentos multiplexados

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

Page 15: Display de 7 segmentos multiplexados

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

Page 16: Display de 7 segmentos multiplexados

Display de 7 segmentos

Multiplexacao de displays

ELT024 Display de 7 segmentos [email protected] 16 / 29

Page 17: Display de 7 segmentos multiplexados

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

Page 18: Display de 7 segmentos multiplexados

Display de 7 segmentos

ELT024 Display de 7 segmentos [email protected] 18 / 29

Page 19: Display de 7 segmentos multiplexados

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

Page 20: Display de 7 segmentos multiplexados

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

Page 21: Display de 7 segmentos multiplexados

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

Page 22: Display de 7 segmentos multiplexados

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

Page 23: Display de 7 segmentos multiplexados

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

Page 24: Display de 7 segmentos multiplexados

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

Page 25: Display de 7 segmentos multiplexados

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

Page 26: Display de 7 segmentos multiplexados

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

Page 27: Display de 7 segmentos multiplexados

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

Page 28: Display de 7 segmentos multiplexados

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

Page 29: Display de 7 segmentos multiplexados

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