Baixe o app para aproveitar ainda mais
Prévia do material em texto
Leitura de teclas e teclado matricial Prof.MSc.Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajuba´ rodrigomax@unifei.edu.br ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 1 / 31 Display de 7 segmentos Revisa˜o ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 2 / 31 Display de 7 segmentos Multiplexac¸a˜o dos displays Multiplexar: Consiste em combinar diversos sinais num u´nico canal de transmissa˜o Vantagens Reduc¸a˜o de custos com cabeamento e tamanho de placa Utilizac¸a˜o de uma quantitade maior de dispositivos que sa´ıdas dispon´ıveis Desvantagens Perda de tamanho de banda devido a efeitos de overhead Discretizac¸a˜o do tempo no acionamento dos dispositivos Aumento da complexidade do sistema ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 3 / 31 Display de 7 segmentos ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 4 / 31 Display de 7 segmentos Multiplexac¸a˜o 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 atrave´s da linha de comando 3 esperar um tempo adequado para evitar flicker 4 desligar o display 5 escolher o pro´ximo display (X+1) 6 voltar ao passo 1 ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 5 / 31 Atenc¸a˜o ATENC¸A˜O ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 6 / 31 Varia´veis globais-locais Armazenamento de dados dentro de uma biblioteca Usado sempre que for necessa´rio passar valores entre func¸o˜es dentro de um mesmo arquivo ou armazenar valores que na˜o podem ser perdidos ao longo da execuc¸a˜o do programa. Ex: o display que esta´ atualmente ligado E´ feito atrave´s de varia´veis ”globais-locais”1 As varia´veis devem possuir o atributo static Usar sempre o menor tamanho poss´ıvel pois estas varia´veis sa˜o alocadas permanentemente, reduzindo a memo´ria RAM dispon´ıvel. Devem ser inicializadas dentro da func¸a˜o principal da biblioteca 1Global dentro do escopo da biblioteca, local pois na˜o pode ser acessada fora do arquivo ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 7 / 31 Leitura de Teclas Leitura de Teclas ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 8 / 31 Display de 7 segmentos Criac¸a˜o da biblioteca disp7seg Criac¸a˜o de um circuito para entrada de informac¸a˜o digital A sa´ıda deve possuir apenas dois estados O consumo de energia deve ser o m´ınimo poss´ıvel As tenso˜es devem ser compat´ıveis com o circuito (TTL, CMOS, etc...) ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 9 / 31 Leitura de Teclas Circuito ba´sico Exemplo Eletroˆnico http://www.scienceprog.com/how-does-tri-state-buffers-work/ ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 10 / 31 Leitura de Teclas Circuito ba´sico Exemplo Eletro-mecaˆnico http://www.labbookpages.co.uk/electronics/debounce.html - Dr. Andrew Greensted ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 11 / 31 Leitura de Teclas Debounce Problema de bouncing Causado pela oscilac¸a˜o mecaˆnica da chave Pode gerar acionamentos indevidos no sistema Soluc¸o˜es Via hardware atrave´s de circuito dedicado Via software atrave´s de confirmac¸a˜o temporal ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 12 / 31 Leitura de Teclas Debounce Circuito com bouncing http://www.labbookpages.co.uk/electronics/debounce.html - Dr. Greensted ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 13 / 31 Leitura de Teclas Debounce Debounce por hardware Na˜o gasta processamento Protege o circuito contra surtos Auxilia na estabilidade do sistema pois funciona como filtro Gera delay de R × C na resposta ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 14 / 31 Leitura de Teclas Debounce http://www.ikalogic.com/debouncing.php - Ibrahim Kamal ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 15 / 31 Leitura de Teclas Debounce Circuito sem bouncing - debounce http://www.labbookpages.co.uk/electronics/debounce.html - Dr. Greensted (modificado) ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 16 / 31 Leitura de Teclas Debounce Debounce por software Consome tempo e recurso do processador Na˜o necessita de hardware ($$$) extra Gera delay de acordo com a rotina desenvolvida E´ preciso conhecer aproximadamente o tempo de estabilizac¸a˜o da chave Ex: Para debounce de 150 (µs) = 300 ciclos de clock 2 2Um PIC com cristal de 8MHz tem cada ciclo com durac¸a˜o de 0,5 (µs) ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 17 / 31 Leitura de Teclas Debounce 1 v o i d main ( v o i d ) { 2 uns igned char valTemp , valAtual , tempo ; 3 // i n s e r i r as c o n f i g u r a c¸ o˜ e s n e c e s s a´ r i a s a q u i 4 f o r ( ; ; ) { 5 w h i l e ( valAtual==PORTB ) ; // aguarda uma mudanc¸a na p o r t a B 6 valTemp = PORTB ; // na mudanc¸a , aguarda um tempo 7 tempo = 2 2 ; 8 w h i l e ( tempo > 0) { 9 i f ( valTemp == PORTB ) {// s e na˜o mudar c o n t i n u a a c o n t a r 10 tempo−−; 11 } e l s e { 12 valTemp = PORTB ; // s e mudar , a t u a l i z a e r e i n i c i a 13 tempo = 2 2 ; 14 } 15 } 16 valAtual = valTemp ; // v a l o r a t u a l i z a d o ; 17 // Aqui a v a r i a´ v e l e s t a´ p r o n t a para s e r usada 18 } 19 } ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 18 / 31 Leitura Matricial Leitura Matricial ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 19 / 31 Leitura Matricial Introduc¸a˜o Para cada tecla inserida no projeto, do modo apresentado ate´ agora, e´ necessa´rio um terminal de I/O no microcontrolador Projetos que exigem muitos terminais sa˜o mais caros por va´rios motivos O encapsulamento pode gerar entre 5 e 30% de diferenc¸a no prec¸o 3 O processo de inserc¸a˜o e soldagem de compontentes e´ mais caro 4 O tamanho e complexidade da placa aumenta (quantidade da camadas, roteamento, etc...) Para entradas digitais tipo teclado existe uma alternativa: Leitura por varredura matricial 3PIC18F4550 TQFP = US$4,42, DIP = US$5,36 4Geralmente componentes com muitos terminais tem encapsulamento SMD/QFP ou BGA ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 20 / 31 Leitura Matricial Circuito ba´sico ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 21 / 31 Leitura Matricial Vantagens e Desvantagens Na leitura por varredura matricial temos: Aumento da quantidade de chaves que podem ser lidas 5 Aumento da complexidade do software Atraso na detecc¸a˜o de eventos (devido a` varredura) 5Para N terminais dispon´ıveis no microcontrolador, temos um aumento de N chaves para ( N 2 )2 chaves ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 22 / 31 Leitura Matricial Configurac¸o˜es 1 v o i d main ( v o i d ) 2 { 3 uns igned char i , j ; 4 // armazena v a l o r de cada chave 5 uns igned char chave [ 4 ] [ 4 ] = {{0 , 0 , 0 , 0} ,{0 , 0 , 0 , 0} , 6 {0 , 0 , 0 , 0} ,{0 , 0 , 0 , 0}} ; 7 // h a b i l i t a p u l l−up i n t e r n o 8 BitClr ( INTCON2 , 0 ) ; 9 // apenas AN0 e´ a n a l o´ g i c o , os demais s a˜o d i g i t a i s 10 ADCON1 = 0b00001110 ; 11 // os 4 u´ l t i m o s b i t s s a˜o e n t r a d a s , os 4 p r i m e i r o s s a ı´ d a s 12 TRISB = 0xF0 ; 13 TRISD = 0x00 ; 14 f o r ( ; ; ) 15 { 16 // p r o c e s s o de v a r r e d u r a 17 } 18 } ELT024 Leitura de teclase teclado matricial rodrigomax@unifei.edu.br 23 / 31 Leitura Matricial Processo de Varredura 1 // p r o c e s s o de v a r r e d u r a 2 f o r ( i = 0 ; i < 4 ; i++){ 3 PORTB = 0xff ; // l i g a t o d a s as c o l u n a s 4 f o r ( j = 0 ; j < 1 0 0 ; j++) ; 5 BitClr ( PORTB , i ) ; // d e s l i g a c o l u n a a s e r t e s t a d a 6 // g a s t o de tempo ( e s t a b i l i d a d e do s i n a l ) 7 f o r ( j = 0 ; j < 1 0 0 ; j++) ; 8 9 f o r ( j = 0 ; j < 4 ; j++){ 10 i f ( ! BitTst ( PORTB , j+4) ) { // r e a l i z a o t e s t e para cada b i t 11 chave [ i ] [ j ] = 1 ; // a t u a l i z a a m a t r i z 12 BitSet ( PORTD , j+4∗i ) ; // mostra na p o r t a D 13 } e l s e { 14 chave [ i ] [ j ] = 0 ; 15 BitClr ( PORTD , j+4∗i ) ; 16 } 17 } 18 } ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 24 / 31 Leitura Matricial Processo de Varredura Atenc¸a˜o O co´digo na˜o apresenta debounce em software para as teclas. A operac¸a˜o com uma matriz gasta muito processamento e memo´ria. Para minimizar estes gastos podemos representar cada chave como um bit numa varia´vel. A operac¸a˜o de debounce sera´ apresentada nas func¸o˜es a seguir. ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 25 / 31 Leitura Matricial Criac¸a˜o da biblioteca teclado Func¸o˜es necessa´rias para a criac¸a˜o de uma biblioteca que realiza a leitura de um teclado matricial e disponibiliza as teclas pressionadas: Inicializac¸a˜o() Configura os terminais de acionamento e de leitura Debounce() Realiza a leitura das teclas (varredura) Realiza o debounce dos valores Armazena internamente as teclas pressionadas LerTeclas() Retorna uma varia´vel unsigned int Cada bit desta varia´vel representa uma tecla 0 = desligado, 1 = pressionado ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 26 / 31 Leitura Matricial Criac¸a˜o da biblioteca teclado 1 #include "teclado.h" 2 #include "basico.h" 3 s t a t i c uns igned i n t valor = 0x0000 ; 4 s t a t i c uns igned char tempo ; 5 v o i d InicializaTeclado ( v o i d ) 6 { 7 TRISB = 0xF0 ; // q u a t r o e n t r a d a s e q u a t r o s a ı´ d a s 8 BitClr ( INTCON2 , 0 ) ; // h a b i l i t a p u l l−up 9 ADCON1 = 0b00001110 ; // apenas AN0 e´ a n a l o´ g i c o 10 SPPCFG = 0x00 ; // a p o r t a B na˜o o p e r a como p a r a l e l a 11 tempo = 1 0 ; // tempo para debounce 12 } 13 14 uns igned i n t LerTeclas ( v o i d ) 15 { 16 r e t u r n valor ; 17 } ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 27 / 31 Leitura Matricial Criac¸a˜o da biblioteca teclado 1 v o i d DebounceTeclas ( v o i d ) { 2 uns igned char i , j ; 3 uns igned i n t valorNovo = 0x0000 ; 4 uns igned i n t valorAntigo = 0x0000 ; 5 f o r ( i = 0 ; i < 4 ; i++){ 6 PORTB |= 0x0F ; // d e s l i g a t o d a s as c o l u n a s 7 BitClr ( PORTB , ( i ) ) ; // l i g a a c o l u n a c o r r e s p o n d e n t e 8 f o r ( j=0;j<100;j++) ; // g a s t a tempo ( e s t a b i l i d a d e ) 9 f o r ( j = 0 ; j < 4 ; j++){// t e s t e para cada b i t , a t u a l i z a a ←↩ v a r i a´ v e l 10 i f ( ! BitTst ( PORTB , j+4) ) { 11 BitSet ( valorNovo , ( i ∗4)+j ) ; 12 } e l s e { 13 BitClr ( valorNovo , ( i ∗4)+j ) ; 14 } 15 } 16 } 17 // c o n t i n u a ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 28 / 31 Leitura Matricial Criac¸a˜o da biblioteca teclado 18 // r o t i n a de debounce 19 // a cada chamada o tempo e´ decrementado em 1un . 20 i f ( valorAntigo == valorNovo ) { 21 tempo −−; 22 } e l s e { 23 tempo = 1 0 ; 24 valorAntigo = valorNovo ; 25 } 26 i f ( tempo == 0) { 27 valor = valorAntigo ; 28 } 29 } ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 29 / 31 Leitura Matricial Header Header 1 #ifndef TECLADO_H 2 #define TECLADO_H 3 4 uns igned i n t LerTeclas ( v o i d ) ; 5 v o i d DebounceTeclas ( v o i d ) ; 6 v o i d InicializaTeclado ( v o i d ) ; 7 #endif //TECLADO H ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 30 / 31 Leitura Matricial Uso da Biblioteca Exemplo de uso da biblioteca 1 #include "basico.h" 2 #include "config.h" 3 #include "teclado.h" 4 5 // i n i c i o do programa 6 v o i d main ( v o i d ) 7 { 8 InicializaTeclado ( ) ; 9 TRISD = 0x00 ; // C o n f i g u r a a p o r t a D como s a ı´ d a 10 PORTD = 0xFF ; // d e s l i g a t o d o s os l e d s 11 w h i l e (1==1) 12 { 13 DebounceTeclas ( ) ; 14 PORTD = LerTeclas ( ) ; 15 } 16 } ELT024 Leitura de teclas e teclado matricial rodrigomax@unifei.edu.br 31 / 31
Compartilhar