quinta-feira, 14 de março de 2019

Teclados A/D

Introdução


Sempre que for necessário coletar informações em campo, no chão de fábrica, ou mesmo passar “orientações” a um pequeno robô, podemos utilizar um teclado.  Para enviar informações, ou instruções, utilizamos uma tecla ou um conjunto delas.



Quando temos uma ou poucas teclas a ideia inicial é termos uma I/O para cada tecla. Essa solução esbarra em 2 problemas
  • Hardware: exige muitas I/Os
  • Software: exige um consumo excessivo de software para leitura de teclas. Esse problema pode ser contornado pelo acionamento da leitura das teclas a uma interrupção externa.


   

Teclados matriciais.



Uma forma interessante foi associar as teclas em forma de matriz. 
Essa solução diminui sensivelmente o número de I/Os utilizadas a medida que cresce o número de teclas. As mais populares utilizam grupos de 12 ou 16 teclas:
   
 


No diagrama abaixo temos um exemplo de implementação de um teclado matricial de 12 teclas.

Em termos de hardware temos uma redução de I/Os, sendo maior quanto o número de teclas (matriz maior). Para 12 teclas em forma de matriz temos 7 I/Os, sendo 4 linhas e 3 colunas.
Essa redução provoca um crescimento de software, pois a rotina de leitura.
O acionamento rotina de leitura pode ser associada a interrupção externa que exige uma I/O adicional (interrupção externa).
A rotina de leitura consiste em ativar uma das colunas (1) e deixar as outras desativadas (0). Desta forma inicia-se a varredura das linhas e identificar qual linha está ativada (1), desta maneira, pode-se identificar qual tecla foi pressionada. Na sequência deve-se repetir o processo para cada coluna. Ao final do processo é possível identificar a tecla pressionada.
Essa rotina torna-se extensa, mesmo que o número de teclas seja reduzido e acaba tornando o software extenso. Para o caso de teclas pressionadas simultaneamente a rotina trona-se ainda mais complexa.



   

Conversor A/D

Utilizando um conversor A/D o número de I/Os diminui a uma única entrada analógica, se o periférico existir no microcontrolador.
Um exemplo de solução é apresentada no livro “Micontroladores PIC18 – Aprenda e Programe em Linguagem C” de Alberto Noboru Miyadaira, página 281.



Dessa forma cada tecla pressionada produz uma tensão diferente na saída do circuito. A identificação passa apenas pela identificação da faixa de valores convertidos. Essa faixa deve ser criada pela tolerância dos componentes envolvidos. A escala de valores absolutos pode ser obtida a partir de uma simples simulação do circuito.
A questão de duas ou mais teclas pressionadas simultaneamente produz novos valores de tensão e por consequência novos valores obtidos no A/D, ou seja, basta adicionar novas faixas de pesquisa de acordo com as combinações desejadas.
A questão de isolação da rotina de leitura também é resolvida por uma interrupção externa.




   

Atividade 1

Identificando valores de conversão para cada tecla (divisor de tensão)


               Implemente um sketch para ler a entrada analógica e apresentar o valor no LCD (ou monitor serial).

 

1. Elabore o hardware no simulador.

2. Preencha a tabela abaixo baseado nos dados obtidos do simulador.


3. Elabore o hardware físico.


4. Preencha a tabela abaixo baseado nos dados do obtidos no hardware físico.


5. Compare os valores obtidos no simulador e no hardware físico e explique por que as diferenças.




   

Atividade 2

Inserção de tensões de referências no conversor A/D


Utilizando o maior valor de tensão obtido em “Teclados - Atividade 1” calibre uma tensão referência positiva (Aref) “um pouco acima” do maior valor de tensão obtido.




Dicas de implementação

1. Utilize o sketch da Atividade 1 como base 
2. Inclua o tensão de referencia externa do conversor A/D (SETUP)


Preencha a tabela abaixo baseado nos dados do obtidos no hardware físico.



Descreva o que aconteceu mudou em relação a atividade anterior (Teclados - Atividade 1)



   

Atividade 3


Identificando teclas por faixa de valores do A/D



Com base no programa desenvolvido em “Teclados – Atividade 2” (Inserção de tensões de referências no conversor A/D), implemente o software para identificar as teclas e mostrar no LCD.


Dicas de implementação


I - Dividindo a faixa de valores do conversor

1. Supondo que foi obtido os valores mínimos e máximos (exemplo hipotético) para cada tecla na Atividade 2:

  • Tecla 1: 800 - 850
  • Tecla 2: 400 - 430
  • Tecla 3: 230 - 270
  • Tecla 4: 50 - 58

2. Posicione os valores em uma reta considerando o menor e maior valores possíveis do conversor A/D (0 e 1023)


3. Calcule a distância entre o menor valor da Tecla 3 (230) e o maior valor da Tecla 4 (58)


4. Divida o espaço encontrado (172) em 2 partes iguais (86)

 5. Encontre o ponto médio entre a Tecla 4 e a Tecla 3 (144)


 6. Repita o processo para encontrar os pontos médios entre a Tecla 3 e Tecla 2, e o ponto médio entre a Tecla 2 e a Tecla 1


7. Arbitre valores entre 0 e o menor valor a Tecla 4 (15), e entre o maior valor da Tecla 1 e 1023 (1000), de forma que esses valores não atinjam o mínimo (0) e o máximo (1023)



II - Identificando as teclas

Com base nos valores inicias e finais de cada faixa, implemente testes (if) que testem se o valor está dentro de cada faixa e indique no LCD qual foi a tecla pressionada.
  • if (valor_convertido > 15 && valor_convertido<144) “imprime_no_lcd (“Tecla 4”);
  • if (valor_convertido > 144 && valor_convertido<335) “imprime_no_lcd(“Tecla 3”);
  • if (valor_convertido > 335 && valor_convertido<615) “imprime_no_lcd(“Tecla 2”);
  • if (valor_convertido > 615 && valor_convertido<1000) “imprime_no_lcd(“Tecla 1”);



   

Atividade 4

Identificando teclas por ranges com o teclado por A/D com interrupção.





1. Carregue o programa da Atividade 2 do teclado.

2. Monte o hardware acima

3. Ajuste  Aref um pouco acima da maior tecla.

4. Pressione cada tecla e anote os valores convertidos mínimo e máximo.

5. Criar a nova tabela de ranges (explicado na Atividade 3).

5. Utilize o programa da Atividade 03 como base para criar a Atividade 4:

  • Introduza uma função de interrupção que ao ser acionada selecione uma variável como verdadeira (state = TRUE;).
  • Coloque  ação do loop (leitura do conversor A/D e identificação de tecla dentro de uma condição if
    • if (state == TRUE) {
      • delay (100);
      • leitura A/D
      • Identificação de tecla
      • state = LOW;
    • }
6. Teste o programa no simulador. Lembre que os valores de hardware são diferentes de simulação, onde os componentes possuem características ideias. 

7. Apresente o programa com o hardware.


   

Atividade 5

Teclado matricial com 16 teclas por conversor A/D e interrupção


Abaixo o hardware para a montagem do teclado com 16 teclas.



1. Carregue o programa da Atividade 2 do teclado.

2. Monte o hardware acima

3. Ajuste  Aref um pouco acima da maior tecla.

4. Pressione cada tecla e anote os valores convertidos mínimo e máximo.

5. Criar a nova tabela de ranges (explicado na Atividade 3). 

6. Utilize como base o programa da atividade 04 e faça a identificação de cada tecla por interrupção.


   
Descrição da pinagem do teclado de membrana








   





   



Nenhum comentário:

Postar um comentário