6 Comentários

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
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

Hardware » Teclado matricial e varredura de teclas
Comentários:
Notificações
Notificar
guest
6 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Thiago Silva
Thiago Silva
29/11/2018 09:07

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/

Guest
Guest
28/05/2014 19:57

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
Rogerio
28/05/2014 19:54

Muito bom. tambem nao conhecia este metodo.

Rafael Dias
Rafael Dias
09/04/2014 17:28

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

Talvez você goste:

Nenhum resultado encontrado.

Séries



Outros da Série

Menu

WEBINAR
 
NVIDIA JETSON – A Inteligência Artificial na palma de sua mão

Data: 08/07 às 14:00h Apoio: Arrow | NVIDIA
 
INSCREVA-SE AGORA »



 
close-link

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link