Escolar Documentos
Profissional Documentos
Cultura Documentos
Rotinas de debounce
Vcc
R1
10kW
●
Porém, estas chaves apresentam o problema de repique,
comumente chamadas de bounce;
●
Isto é interpretado pelo processador como se a chave tivesse sido
pressionada diversas vezes;
●
Uma solução, por hardware, é colocar um capacitor em paralelo
com a chave;
●
Isto faz com que o tempo, na carga, do capacitor, diminua o efeito
do repique;
●
outra solução e fazer o debounce por software;
●
Existem diversas técnicas de debounce por software;
●
Uma delas consiste em fazer a leitura da chave por um número
determinado de vezes e verificar se o pino alcançou a
estabilidade;
●
O número de vezes que o estado da chave será verificado
depende do clock do processador e do tempo que ocorre o
repique (uns 130us no caso da figura 3)
tecla = pino;
tempo = 22; // define o “tempo” de espera para
// alcancar a estabilidade
while(tempo > 0)
{
if(tecla == pino) // se nao houve mudanca,
tempo --; // decrementa a contagem de tempo
else // se houve mudanca,
{
tecla = pino; // reinicia o processo
tempo = 22;
}
}
return tecla;
}
Teclado Matricial
●
Teclado: conjunto de teclas (chaves) para entrada de dados em
sistemas microprocessados;
●
Para poucas teclas, pode-se usar diretamente os pinos de GPIO do
microcontrolador;
●
A medida que a quantidade de teclas aumenta, o microcontrolador
pode não ter mais pinos suficientes para cada chave;
●
Solução: usar multiplexação. Uma maneira muito usual de
implementar a multiplexação são os teclados matriciais;
Funcionamento:
Realize-se a varredura das colunas, ativando-se uma coluna de
cada vez;
Para cada coluna ativa, verifica-se a situação das linhas. Caso
alguma tecla tenha sido pressionada, a linha desta tecla terá
o valor da coluna;
Sabendo-se qual é a coluna e qual é a linha, pode-se determinar
qual é a tecla pressionada;
C D E F
R1Pull-up
P1.0
8 9 A B
R2Pull-up
P1.1
4 5 6 7
R3Pull-up Vcc
P1.2
0 1 2 3
R4Pull-up
P1.3
P1.4
P1.5
P1.6
P1.7
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 0
P1.5 ← 1
P1.6 ← 1
P1.7 ← 1
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 1
P1.5 ← 0
P1.6 ← 1
P1.7 ← 1
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 1
P1.5 ← 1
P1.6 ← 0
P1.7 ← 1
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 1
P1.5 ← 1
P1.6 ← 1
P1.7 ← 0
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 1
P1.5 ← 1
Tecla 9
Pressionada
P1.6 ← 1
P1.7 ← 1
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 0
P1.5 ← 1 Coluna 1
Ativada
P1.6 ← 1 (em nível 0)
P1.7 ← 1
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ←0
P1.5 ← 1 Como não é a coluna
da chave pressionada,
P1.6 ← 1 todas as linhas (entradas)
estão em nível lógico 1
P1.7 ← 1
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 1
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 1
P1.5 ← 0 Coluna 2
Ativada
P1.6 ← 1 (em nível 0)
P1.7 ← 1
C D E F
R1Pull-up
P1.0 == 1
8 9 A B
R2Pull-up
P1.1 == 0
4 5 6 7
R3Pull-up Vcc
P1.2 == 1
0 1 2 3
R4Pull-up
P1.3 == 1
P1.4 ← 1
P1.5 ← 0 Como é a coluna
da chave pressionada,
P1.6 ← 1 a linha 2 está em
nível lógico 0
P1.7 ← 1
Display LCD
K – Cathode (backlight)
Vss - GND
1
VDD - Vcc
2
Vo - Contraste
EL08D - MICROCONTROLADORES 2
3
RS – Register Select
4
RW- Read/Write
5
E - Enable
6
DB0 – Data Bus 0
7
DB1 – Data Bus 1
8
DB2 – Data Bus 2
14 13 12 11 10 9
DB3 – Data Bus 3
DB4 – Data Bus 4
DB5 – Data Bus 5
DB6 – Data Bus 6
Pinagem
DB7 – Data Bus 7
Display LCD
●
2 pinos de alimentação;
●
1 pino para ajuste do contraste do LCD: ajusta o contraste do
LCD;
●
2 pinos para alimentação da luz de fundo (backlight);
●
Os três pinos de controle permitem a seguinte combinação de
operações:
E RS R/W Operação
0 0 0 Nenhuma operação
1 0 0 Escrita de comando
1 0 1 Leitura de status
1 1 0 Escrita de caracter
1 1 1 Leitura de caracter
+3,3v*
Vcc
MSP430
LCD_EN +5v* +5v*
P2.2
LCD_RS
P2.3 100nF
LCD_D4
P2.4 10kW
LCD_D5
P2.5
LCD_D6
P2.6 LCD_D8 Deixar R/W
P2.7 sempre em 0
Deixar D0 a
D3 em aberto
Vss
Lembrar de
ligar todos os
GNDs juntos
*Atenção: Não ligar o Vcc do
MSP ao Vcc do Display
EL08D - MICROCONTROLADORES 2 2017 – Gabriel Kovalhuk
Display LCD
DL = no de bits do barramento:
●
DL = 0 → 4 bits;
●
DL = 1 → 8 bits;
N = nº de linhas a serem usadas no LCD:
●
N = 0 → 1 linha;
●
N = 1 → 2 linhas;
F = configuração da matriz de caracteres:
●
F = 0 → 5x7 pixels;
●
F = 1 → 5x10 pixels;
EL08D - MICROCONTROLADORES 2 2017 – Gabriel Kovalhuk
Display LCD
●
Para um display de 20x4 caracteres temos os seguintes endereços:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53
14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27
54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67
●
Para posicionar o cursor, usa-se o seguinte comando:
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 a a a a a a a