Leitura de teclas e teclado matricial
Rodrigo Almeida
Universidade Federal de Itajub´a[email protected]
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
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)
6voltar ao passo 1
Aten¸c˜
ao
Vari´
aveis globais-locais
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”1 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
1
Global dentro do escopo da biblioteca, local pois n˜ao pode ser acessada fora do arquivo
Leitura de Teclas
Cria¸c˜
ao de um circuito para entrada de informa¸c˜
ao digital
A sa´ıda deve possuir apenas dois estadosO consumo de energia deve ser o m´ınimo poss´ıvel
As tens˜oes devem ser compat´ıveis com o circuito (TTL, CMOS, etc...)
Exemplo Eletrˆ
onico
Exemplo Eletromecˆ
anico
Bounce
Problema de bouncing
Causado pela oscila¸c˜ao mecˆanica da chave Pode gerar acionamentos indevidos no sistema
Solu¸c˜
oes
Via hardware atrav´es de circuito dedicado Via software atrav´es de confirma¸c˜ao temporal
Bounce
Circuito com bouncing
Debounce
Debounce por hardware
N˜ao gasta processamento Protege o circuito contra surtosAuxilia na estabilidade do sistema pois funciona como filtro Gera delay de R × C na resposta
Debounce
Debounce
Debounce
Debounce por software
Consome tempo e recurso do processador N˜ao necessita de hardware ($$$) extra
Gera delay de acordo com a rotina desenvolvida ´
E preciso conhecer aproximadamente o tempo de estabiliza¸c˜ao da chave
Debounce
1 v o i d m a i n (v o i d) { 2 u n s i g n e d c h a r valTemp , v a l A t u a l , t e m p o ; 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 for( ; ; ) { 5 w h i l e( v a l A t u a l == P O R T B ) ; // a g u a r d a u m a m u d a n ¸c a na p o r t a B 6 v a l T e m p = P O R T B ; // na m u d a n ¸c a , a g u a r d a um t e m p o 7 t e m p o = 42; 8 w h i l e ( t e m p o > 0) { 9 if ( v a l T e m p == P O R T B ) {// se n ~a o m u d a r c o n t i n u a a c o n t a r 10 tempo - -; 11 } e l s e { 12 v a l T e m p = P O R T B ; // se mudar , a t u a l i z a e r e i n i c i a 13 t e m p o = 42; 14 } 15 } 16 v a l A t u a l = v a l T e m p ; // v a l o r a t u a l i z a d o ; 17 // A q u i a v a r i ´a v e l e s t ´a p r o n t a p a r a s e r u s a d a 18 } 19 }Leitura Matricial
Para cada tecla inserida no projeto, do modo apresentado at´
e agora, ´
e
necess´
ario um terminal de I/O no microcontrolador
Projetos que exigem muitos terminais s˜
ao mais caros por v´
arios
motivos
O encapsulamento pode gerar entre 5 e 30% de diferen¸ca no pre¸co3 O processo de inser¸c˜ao e soldagem de componentes ´e mais caro4 O tamanho e complexidade da placa aumenta (quantidade da camadas, roteamento, etc...)
Para entradas digitais tipo teclado existe uma alternativa: Leitura por
varredura matricial
3
18f4520 = US$4,47, 18f2550 = US$3,98
4
Geralmente componentes com muitos terminais tem encapsulamento SMD/QFP ou BGA
Leitura Matricial
Na leitura por varredura matricial temos:
Aumento da quantidade de chaves que podem ser lidas5
Aumento da complexidade do software
Atraso na detec¸c˜ao de eventos (devido `a varredura)
5
Para N terminais dispon´ıveis no microcontrolador, temos um aumento de N chaves para (N2)2chaves
Leitura Matricial
1 v o i d m a i n (v o i d) { 2 u n s i g n e d c h a r i , j ; 3 4 // a r m a z e n a v a l o r de c a d a c h a v e 5 u n s i g n e d c h a r c h a v e [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 pull−up i n t e r n o 8 B i t C l r ( INTCON2 ,0) ; 9 // a p e n a s A N 0 ´e a n a l ´o g i c o , os d e m a i s s ~a o d i g i t a i s 10 A D C O N 1 = 0 b 0 0 0 0 1 1 1 0; 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 ←-( i n i c i a l m e n t e ) s a ´ı d a s 12 T R I S B = 0 x F 0; 13 T R I S D = 0 x 0 0; 14 for( ; ; ) 15 { 16 // p r o c e s s o de v a r r e d u r aLeitura Matricial
1 // p r o c e s s o de v a r r e d u r a 2 for( i = 0; i < 4; i ++) { 3 // a p e n a s a c o l u n a de i n t e r e s s e ´e c o n f i g u r a d a c o m o s a ´ı d a 4 T R I S B = ~((u n s i g n e d c h a r)1< < i ) ; 5 // a p e n a s a c o l u n a de i n t e r e s s e ´e l i g a d a 6 P O R T B = ~((u n s i g n e d c h a r)1< < i ) ; 7 8 for( j = 0; j < 4; j ++) { // j<2 s e m u s a r a f o n t e 9 if (! B i t T s t ( PORTB , j +4) ) { // r e a l i z a o t e s t e p a r a c a d a b i t 10 c h a v e [ i ][ j ] = 1; // a t u a l i z a a m a t r i z 11 }e l s e{ 12 c h a v e [ i ][ j ] = 0; 13 } 14 } 15 }Processo de Varredura
Aten¸
c˜
ao
O c´
odigo n˜
ao apresenta debounce em software para as teclas.
A opera¸c˜
ao com uma matriz gasta muito processamento e mem´
oria.
Para minimizar estes gastos podemos representar cada chave como
um bit numa vari´
avel.
Cria¸c˜
ao da biblioteca teclado
Cria¸c˜
ao da biblioteca teclado
Fun¸
c˜
oes necess´
arias para a cria¸c˜
ao de uma biblioteca que realiza a leitura
de um teclado matricial e disponibiliza as teclas pressionadas:
Inicializa¸c˜
ao()
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 vari´avel unsigned int