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 base2. 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.
Nenhum comentário:
Postar um comentário