Teclado com mcu

Circuitos eletrônicos, topologias, diagramas elétricos, etc...

Moderadores: 51, Renie, gpenga

Teclado com mcu

Mensagempor styg » 03 Abr 2011 13:47

Só pra saber, como voces costumam fazer quando precisa usar um teclado grande com um mcu.

Até hoje eu sempre precisei de no maximo 5 ou 6 teclas, entao sempre usei uma chave ligada diretamente a uma porta, e usando o cortex cada chave gera uma int, então fica bem bom.

Agora logo vou precisar de um teclado que vai ter umas 10 teclas, aí to pensando o que seria melhor... inicialmente pensei naquele modelo com rede resistiva + ad que tem de sobra, mas e como faz pra detectar a tecla ? pq fazer pooling não rola.
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor vtrx » 03 Abr 2011 14:31

pq fazer pooling não rola.

Porque?
O Windows e Linux vive fazendo isso...
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor EvandrPic » 03 Abr 2011 14:42

Imagem
http://www.scienceprog.com/interface-mu ... ns-of-mcu/

Usando um AD você saberá qual tecla foi pressionada comparando a tensão obtida por um valor que você calculou de acordo com os resistores que você escolheu.
Exemplo:
No circuito acima, você sabe que ao pressionar determinada tecla, você estará mandando uma determinada tensão para o teu conversor AD.
Então você pega esse valor e compara com valores pré-dterminados dentro do MCU.
Por segurança você compara dentro de uma faixa:
V1>Tin < V2 -> tecla acionada é a número 1
E assim sucessivamente vai comparando até achar qual tecla foi pressionada.
Precisa tratar o caso de teclas pressionadas simultaneamente.
Se as teclas pressionadas não gerarem tensões previstas em nenhuma das faixas comparadas, você poderá usar a combinação para outras funções.
Ex. Se pressionando as teclas 1 e a 2, a tensão enviada ao AD não está em nenhuma das faixas previstas para teclas pressionadas individualmente, você poderá usar para outra função, ampliando as possibilidades do teu teclado.
Resistores mais precisos ampliam a possibilidade de número maior de telcas já que você pode diminuir a faixa de tensão para cada tecla.


Agora, o mais usado é sem dúvida o consagrado teclado matricial:
Imagem
http://engknowledge.com/microcontroller ... board.aspx
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05

Mensagempor styg » 03 Abr 2011 15:18

vtrx, gosto mais de gerar interrupção, afinal pq ficar sempre checando teclas se a maior parte do tempo elas nao estao acionadas?

se bem que esse pooling seria tipo numa int do timer do sistema a cada 10ms por exemplo... mas mesmo assim eu não poderia entrar em modo sleep por exemplo, ou teria que acordar toda hora pra ver se pressionou alguma tecla sendo que 99,999% das vezes que ele vai checar nao vai ter nada, só gastou energia à toa.


evandro, esse matricial já usei uma vez, inclusive com diodos ligados a outro pino que esse sim detectava e gerava uma int (no 8051 isso).

mas no caso do AD, que eu gosto mais, como gerar a int?
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor andre_luis » 03 Abr 2011 15:50

Dá uma olhada nesse tópico criada a 4 anos atrás, onde propus um algoritmo que permite expandir a capacidade do teclado :

http://www.asm51.eng.br/phpbb/viewtopic.php?t=2968

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Red Neck Guy » 11 Abr 2011 21:06

Nos projetos novos eu tenho utilizado pooling do teclado e jogado as teclas pressionadas numa fila, dessa forma, fico com um buffer das ultimas teclas pressionadas pelo usuário.
Como todo o pooling e inserção na fila é feita no timer, mesmo que role um jitter dentro dos menus ou telas de interface, a sequência de teclas pressionada não se perde.
Bom, desvantagem da minha implementação? É necessário criar um vetor para guardar a fila,duas variaveis para controle da inserção e remoção, e ficar a cada 10mS lendo o teclado. Mas como eu quebro a amostragem e scan do teclado em vários passos, não afeta o desempenho da aplicação...
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Mensagempor _blackmore_ » 11 Abr 2011 23:54

a ultima vez q fiz ... foram cerca de 30 teclas ... usei 1 pino apenas ... conversor AD.
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor andre_luis » 12 Abr 2011 19:53

_blackmore_ escreveu:a ultima vez q fiz ... foram cerca de 30 teclas ... usei 1 pino apenas ... conversor AD.


Mas nesse caso teria de necessariamente implementar leitura por pooling.

A menos que utilize mais um pino extra para capturar uma interrupção de I/O externa ( por borda ), mas aí teria calcular as impedancias de modo que esse pino de entrada ( provavelmente, Smith Trigger ) não interferisse tanto na leitura do AD das teclas.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor vtrx » 12 Abr 2011 22:44

a ultima vez q fiz ... foram cerca de 30 teclas ... usei 1 pino apenas ... conversor AD.

O problema é que usando este método quando as teclas começarem a falhar,vai virar um inferno...
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor _blackmore_ » 12 Abr 2011 22:55

eu só respondi o que ele perguntou ... coisa que já haviam dito antes, inclusive ele mesmo disse que já fez ... :?
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor fabim » 13 Abr 2011 07:56

EvandrPic escreveu:Imagem


Ja fiz isso com 16 teclas.
Só que no lado da chave que vai para o resistor que faza a divisão logica de tensão, tinha um diodo com o Katodo para chave, e o anodo para um pull-up no pino EINT....

Eu lia o AD dentro da int em 5 uS e 8 bits, ja retornava a tecla precionada...

Só não da pra ler duas ou mais teclas em simultaneo, até porque num é linux pra ficar sigurando ALT ou CTRL + alguma coisa!!!
Nem no linux tem essas frescuras. aff!!
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor EvandrPic » 13 Abr 2011 10:17

fabim escreveu:
EvandrPic escreveu:Imagem


Ja fiz isso com 16 teclas.
Só que no lado da chave que vai para o resistor que faza a divisão logica de tensão, tinha um diodo com o Katodo para chave, e o anodo para um pull-up no pino EINT....

Eu lia o AD dentro da int em 5 uS e 8 bits, ja retornava a tecla precionada...

Só não da pra ler duas ou mais teclas em simultaneo, até porque num é linux pra ficar sigurando ALT ou CTRL + alguma coisa!!!
Nem no linux tem essas frescuras. aff!!


Se no LINUX não tem essas "frescuras" eu não sei, mas no Windows tem e são bem vindas.
Mas acho que não cabe aquí na discussão misturar teclado de MCU com teclado de PC pois no PC o teclado já possui um circuito de varredura próprio que manda caracteres ASCII das teclas pressionadas, pela USB ou PS2, por exemplo. Não cabe ao Sistema Operacional a leitura das teclas. É gerada interrupção do teclado então também não é o caso de Polling como também foi falado anteriormente. No PC, quem faz a varredura das teclas é o CI dedicado ou microcontrolador interno ao teclado.

No caso que estamos tratando neste tópico, é possível que se tenha uma ou mais teclas tipo Shift ou Alt, Ctrl.. etc
Isso é implementável na rotina de leitura do teclado.
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05

Mensagempor styg » 13 Abr 2011 19:20

É esse lance dos diodos para gerar int já usei no passado com 8051 (que nao tinha int em todas as portas) e funcionou a contento.
Parece que 1 pino de ad + 1 pino com int, usando esse esquema ficaria bom.

Imagem[/URL]
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor andre_luis » 13 Abr 2011 19:31

EvandrPic escreveu:...No caso que estamos tratando neste tópico, é possível que se tenha uma ou mais teclas tipo Shift ou Alt, Ctrl...


O uso de teclas em conjunto é bastante comum.
Posso citar 2 equipamentos que trabalhei cuja placa precisa de acionamento simultaneo de teclas.
> Desfibrilador Cardíaco ( em operação ) => por segurança, é acionado por 2 telcas.
> Dosador de refrigerante ( em serviço ) => possui uma tecla oculta no painel de membrana, usada para programar o tempo de abertura da solenóide. O operador não sabe sequer da sua existencia, pois não há qualquer símbolo indicativo, e a chence de aciona-la indevidamente é mínima.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor vtrx » 13 Abr 2011 23:09

..também não é o caso de Polling como também foi falado anteriormente.

Com teclado USB,o PC Não faz Polling?
Achei que voce configurava em Millesegundos quantas vezes o Host Pc consultava o dispositivo...
Aproveitando a brecha,alguem sabe me dizer se usando microchaves 'normalmente aberto',no esquema da figura,se da tambem para usar uma lógica 'inversa'?
[img][img]http://img9.imageshack.us/img9/3356/4x4key4io.gif[/img]

Uploaded with ImageShack.us[/img]
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Próximo

Voltar para Circuitos Diversos

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

x