Teclado matricial e varredura de teclas

teclado
Este post faz parte da série Chaves mecânicas. Leia também os outros posts da série:

Para se realizar a leitura de uma tecla ou chave é necessário utilizar um terminal do microcontrolador. No post sobre debounce são explicados mais detalhes deste procedimento. Para teclados com uma quantidade maior de chaves é possível que o microcontrolador não possua terminais disponíveis em quantidade suficiente, ou que o controlador que possua essa quantidade seja de um custo mais elevado.

 

A solução padrão para este problema é realizar-se a multiplexação das chaves. Isto aumenta a quantidade de chaves que pode ser lida para uma mesma quantidade de terminais. Esta economia de hardware, no entanto, aumenta a complexidade do software e o custo, em termos de tempo de computação.

 

Uma das técnicas mais eficientes de multiplexação para leitura de teclados é o arranjo em formato matricial. Com esta configuração podemos, com N terminais, ler até (N/2)^2 chaves, ou seja, com apenas 8 terminais é possível fazer uma leitura de 16 teclas. Já um teclado alfanumérico padrão de 105 teclas pode ser montado com apenas 21 terminais, uma redução de quase 80%.

 

A multiplexação é a capacidade de enviar mais de um sinal utilizando um mesmo caminho, o dividindo de algum modo, geralmente em frequências diferentes, ou em períodos de tempo diferentes.

 

 

Técnicas para leitura de teclado hadware e firmware

 

Na leitura matricial dispõe-se os grupos de chaves separados em colunas, de modo que seja possível ligar uma coluna por vez. Isto pode ser feito utilizando terminais de saída para acionamento de cada coluna e terminais de entrada para a leitura das linhas. É muito comum utilizar resistores de pull-ups na entrada do microcontrolador ou, caso o microcontrolador possua, pull-ups internos das próprias entradas. Para proteger o sistema de curto entre os terminais, geralmente se utiliza resistores em série nas saídas a serem controladas. Um modelo deste circuito é apresentado na figura 1.

 

Teclado matricial
Figura 1 - Teclado matricial

 

Conforme podemos ver na Figura 1, cada chave pode ser identificada unicamente pela sua posição (linha, coluna).  A leitura é realizada então por um processo conhecido como varredura: liga-se uma coluna por vez e verifica-se quais chaves daquela coluna estão ligadas. O código abaixo apresenta um modelo de varredura utilizando-se a porta B.

 

 

É importante notar que o código acima não apresenta debounce em software para as teclas. Há apenas uma pequena contagem de tempo entre os acionamentos das colunas para permitir que as capacitâncias, tanto as utilizadas como filtro nas chaves quanto as parasitas, possam se carregar para informar corretamente o estado das chaves.

 

É incomum utilizar uma matriz para armazenar o estado das chaves, sendo mais comum a utilização de um "vetor" de bits. Utilizando uma variável unsigned int de 16 bits, é possível guardar o valor de até 16 chaves. Esta variável pode então ser interpretada como um vetor de 16 bits. Outra vantagem é a possibilidade de realizar o debounce de todas as chaves simultaneamente, bastando esperar que o valor da variável estabilize durante um tempo antes de termos certeza do estado das chaves. Juntando-se esta idéia com a questão da varredura chega-se ao código abaixo.

 

 Para aqueles que gostariam de utilizar o sistema de modo ainda mais otimizado (com relação ao número de pinos do processador) existe uma técnica de multiplexação conhecida como Charlieplexing. Essa técnica foi inicialmente pensada para o acionamento de Leds. Devido à característica dos leds de conduzirem apenas em um dos sentidos é possível colocar os Leds em anti-paralelo aumentando a quantidade em duas vezes. Adicionando-se a isto a capacidade de alguns terminais que podem ser configurados como entrada e saída, permitindo levá-los a estados similares ao tristate, é possível colocar até (N^2-N) leds usando apenas N terminais. Deste modo um painel com 90 leds pode ser acionado com apenas 10 terminais do microcontrolador!

 

Sandorclock
Figura 2 - Relógio com 90 leds acionados via charliplexing (Wikipedia)

 

Para utilizar essa topologia para a leitura de teclas basta adicionar alguns diodos no esquemático. Isso quer dizer que é possível fazer a leitura do teclado de 16 chaves com apenas 5 terminais! Se fosse utilizada uma topologia matricial seria necessário 8 terminais do microcontrolador. Um teclado inteiro de 105 teclas precisaria de apenas 11 terminais para ser implementado. No entanto o custo de processamento, além de questões de segurança e confiabilidade, podem ser motivos suficientes para evitar esse modelo em projetos mais complexos.

 

Para os curiosos segue o modelo de um teclado 3*4 com apenas 4 terminais retirado do electronicdesing.com na figura 2 (frente aos 7 terminais necessários para uma topologia matricial).

 

Figura 2 Teclado 4*3 utilizando Charlieplexing

 

 

Referências

 

Imagem Sofa-Teclado: http://www.zo-loft.com/design/

Outros artigos da série

<< Leitura de chaves mecânicas e o processo de debounce
Este post faz da série Chaves mecânicas. Leia também os outros posts da série:

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Rodrigo Almeida
Professor da Universidade Federal de Itajubá onde leciona sobre programação embarcada, sistemas operacionais e desenvolvimento de produtos eletrônicos. Pesquisa na área de sistemas críticos desenvolvendo técnicas para melhoria de confiabilidade e segurança.

6
Deixe um comentário

avatar
 
6 Comment threads
0 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Thiago SilvaGuestRogerio MachadoRafael Dias Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Thiago Silva
Visitante
Thiago Silva

muito bom Rodrigo parabéns pelo artigo de excelente qualidade. Também tem um artigo sobre teclado matricial e arduino se alguém quiser ler como complementação do seu texto segue o link: https://blog.silvatronics.com.br/utilizando-teclado-matricial-com-arduino/

trackback
Sistemas Operacionais de Tempo Real - Teclados Matriciais - Embarcados - Sua fonte de informações sobre Sistemas Embarcados

[…] Teclado matricial e varredura de teclas […]

trackback
Biblioteca de funções e rotinas padronizadas em linguagem C para MCS-51 – Teclados Matriciais | Blog do Engenheiro Puhlmann

[…] Teclado matricial e varredura de teclas […]

Guest
Visitante
Guest

Soh uma observao. Talvez o diodo 1N4007 mostrado no circuito possa ser problematico para circuitos CMOS. Talvez um diodo schottky seja mais adequado porque tem um tensao com polarizacao direta de apenas 0,3V contra 0.8 do 1N4007.

Rogerio Machado
Membro
Rogerio Machado

Muito bom. tambem nao conhecia este metodo.

Rafael Dias
Membro
Rafael Dias

caramba!
Este método do Charlieplexing eu não conhecia.