MICROCONTROLADORES PIC – PRÁTICA - PARTE 5
CONTROLE DE TECLADOS MATRICIAIS



TECLADO MATRICIAL

Os teclados matriciais são muito utilizados hoje em dia. Sempre que for necessário coletar informações em campo, no chão de fabrica, ou mesmo passar “orientações” a um pequeno robô, podemos utilizar um teclado.



A figura acima demonstra alguns tipos de teclados matriciais. Estes teclados são formados basicamente por botões tipo “normalmente abertos” intercalados entre colunas e linhas. Veja a figura abaixo. Para saber qual tecla foi pressionada é necessário ler a linha e coluna referente a tecla. Assim podemos determinar exatamente qual das teclas na “matriz” foi pressionada.


Porém como saber exatamente qual linha e qual coluna devemos analisar?!? E como garantir que estaremos analisando a linha e coluna da tecla esperada no exato momento em que ela foi pressionada?!? Para tal é necessário realizar uma operação muito conhecida no mundo dos microcontroladores, conhecida como varredura. Observe a figura abaixo.

Você pode observar que é forçado um valor fixo nas “linhas”. Este valor geralmente equivale ao “1” lógico (5V). Então, o microcontrolador executa um “loop” inserindo um “0” lógico (GND) na coluna que deverá ser lida e “1” lógico nas colunas que não deseja-se ler. Assim quando alguém pressiona uma tecla na coluna onde existe o “0” lógico, imediatamente a linha referente à tecla assume o valor “0” também. Por meio de uma interrupção ou mesmo através da leitura direta é possível saber qual linha teve seu valor inicial alterado. Como sabemos qual coluna estava em “0” naquele exato momento, podemos determinar através de uma tabela, qual tecla foi pressionada.

Você deve estar se perguntando: Mas como garantir que a tecla pressionada era realmente a que desejávamos ler?!?! Simples. A varredura faz isso. A varredura insere nas colunas o valor “0” com uma velocidade muito maior que uma pessoa pressiona uma tecla. Este valor “0” é inserido na primeira coluna, depois na segunda, e assim por diante até chegar a última. Se nenhuma tecla for pressionada, uma nova varredura é iniciada na busca de uma tecla e assim o microcontrolador ficará em um loop eterno na busca de uma tecla.

Resumindo: forçamos os valores nas linhas igual a “1” lógico, inserimos “0” lógico na primeira coluna (mantendo todas as outras em “1”) e lemos as linhas. Se nada se alterou, nenhuma tecla foi pressiona nas linhas referentes à coluna. Passamos então a forçar o “0” na próxima coluna e novamente lemos as linhas. Isso é feito até que uma das linhas seja alterada. Neste momento, verificamos uma tabela de decodificação que guarda o valor da tecla. Com este valor é possível saber exatamente qual tecla foi pressionada.


O CIRCUITO

Nada melhor do que um pouco de prática para uma melhor compreensão do que foi exposto. O circuito que será proposto a seguir demonstrará como utilizar um teclado matricial de quatro linhas e quatro colunas, também conhecido como teclado matricial “4 x 4” (16 teclas).

Na figura abaixo temos o circuito elétrico para o exercício proposto. O teclado é ligado na porta “B” do PIC. Nesta porta o microcontrolador realiza toda a varredura para o teclado. Na porta “A” estão ligados quatro LED’s que serão utilizados para demonstrar o valor binário da tecla pressionada. Chamaremos a tecla que fica no canto superior esquerdo da matriz de tecla “0”, na “linha 1 / coluna 1”. Assim teremos as próximas colunas indicadas como 2, 3 e 4. O mesmo acontecendo para as linhas. As teclas são lidas sempre como linha / coluna. A tecla na linha 4 / coluna 4 será a tecla “15”.

Na tabela abaixo, você encontrará os valores decimais e binário de cada tecla, podendo assim dimensionar seu teclado para a resposta esperada nos LED's. O “1” binário equivale ao LED aceso, o “0” equivale ao mesmo apagado.

Tabela - Tecla e seu valor decimal e binário

Tecla

Valor Decimal

Valor Binário

Tecla

Valor Decimal

Valor Binário

Linha 1 / Coluna 1

0

0000

Linha 3 / Coluna 1

8

1000

Linha 1 / Coluna 2

1

0001

Linha 3 / Coluna 2

9

1001

Linha 1 / Coluna 3

2

0010

Linha 3 / Coluna 3

10

1010

Linha 1 / Coluna 4

3

0011

Linha 3 / Coluna 4

11

1011

Linha 2 / Coluna 1

4

0100

Linha 4 / Coluna 1

12

1100

Linha 2 / Coluna 2

5

0101

Linha 4 / Coluna 2

13

1101

Linha 2 / Coluna 3

6

0110

Linha 4 / Coluna 3

14

1110

Linha 2 / Coluna 4

7

0111

Linha 4 / Coluna 4

15

1111


O PROGRAMA

O código fonte para gravar o microcontrolador pode ser obtido nesta página, mais abaixo, no item Downloads. E na figura abaixo temos o fluxograma do exemplo proposto. Meu programa exemplo funciona executando constantemente a varredura do teclado. Você notará que entre o deslocamento de uma coluna e outra é sempre feito um delay de alguns mili segundos, para assegurar tempo suficiente para a detecção da tecla. Se isso não fosse feito a varredura no teclado seria muito rápida e uma tecla pressionada poderia ser detectada várias vezes durante o seu acionamento. Também existe um outro delay inserido após a tecla ter sido detectada, para “segurar” ainda mais a velocidade da varredura, evitando mais uma vez o repique da tecla.

Após a detecção e a decodificação da tecla através da tabela, a mesma é transportada para a porta “A”, para ligar/desligar os LEDs de acordo com o valor inserido na tabela. Este valor ficará exposto através dos LED’s até que uma tecla diferente seja pressionada.

O código fonte também foi extensamente comentado para facilitar a compreensão das rotinas empregadas. Com a alteração deste código fonte é possível, por exemplo, fazer a varredura de teclados telefônicos “4 x 3” (4 linhas, 3 colunas), “3 x 3” (3 linhas, 3 colunas) e até mesmo teclados maiores como os de 44 teclas (4 linhas, 11 colunas).

As aplicações para este tipo de circuito são vastas: tranca microcontrolada, teclado para micro-terminal de dados, operação de um robô,  habilitação de processos através de senhas, controle de máquinas, etc.


CONCLUSÃO

Espero ter ajudado você que busca por informações sobre teclados matriciais e seu controle através dos microcontroladores PIC. Mais uma vez chamo a atenção para a importância da compreensão do conceito! As linguagens de programação mudam, mas a aplicação de um conceito é sempre a mesma, independente da Linguagem. Tenha isso sempre em mente!


DOWNLOADS:

- Código fonte



Lista de materiais

Material para o exercício proposto


Semicondutores

CI1 – PIC16F84A-04/P – microcontrolador Microchip
D1, D2, D3, D4 – 1N4149 – diodos de sinal (silício)
D5, D6, D7, D8 – Leds comuns redondos (vermelhos)


Resistores

R2, R3, R4, R5 – 4K7 (amarelo, viloleta, vermelho)
R1, R6, R7, R8, R9 – 330R (laranja, laranja, marrom)


Capacitores

C1, C2 – 33pF – cerâmico
C3 – 100nF – cerâmico


Diversos

Cristal 4MHz, teclado matricial 4x4 ou 16 push-buttons NA (veja texto), matriz de contatos ou placa, fios para ligação, etc.





Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.