quinta-feira, 22 de maio de 2014

Emulador de teclado genérico - Parte 3

Parte 3: Considerações sobre o Hardware

Uma característica crucial do projeto é o tempo de resposta. Este tempo é que vai definir se a implementação da matriz pode ser feita em software ou se precisa ser feita em hardware.

A leitura de um teclado de matriz pode ser feita de forma instantânea, ou seja, ao se selecionar uma linha o estado das colunas já está disponível. Em termos de linguagem de máquina, não é necessário esperar nenhum tempo entre a instrução que seleciona a linha para a que lê a coluna (teclas).

...
out (xx) ; seleciona linha
in (xx) ; lê coluna
... 

Isso significa que para se emular uma matriz de teclado, o tempo de resposta é fundamental. Por exemplo para o MSX, esse  tempo é na melhor das hipóteses da ordem de 3,7us, mas se considerarmos a leitura de uma mesma linha repetidamente, este tempo é de aproximadamente 700ns.
Para o ZX Spectrum, a seleção da linha ocorre na mesma instrução de leitura, pois é utilizada a parte alta da linha de
endereços durante a instrução IN A,(xx), e o tempo de resposta necessário é também por volta de 700ns.

;; KEY-LINE
L0296:  IN      A,(C)           ; read the port to A - bits will be reset
                                ; if a key is pressed else set.


Considerando o tempo que um microcontrolador gasta para atender a uma interrupção, mais o tempo que ele gasta para decodificar a linha, chega-se à conclusão de que é necessário utilizar um microcontrolador muito rápido. Um AVR com 'overclock' ou mesmo um ARM com o 'core' operando a algumas dezenas de MHz deve ser suficiente para atender este tempo.

Por outro lado, se considerarmos o uso de hardware, é possível utilizar uma solução mais simples e modular é ligar em cascata alguns registradores de deslocamento 74HC595. Estes registradores possuem uma característica importantíssima para o projeto em questão que é a presença de um latch com saídas tri-state.  

Também é possível utilizar um CPLD, porém cabe lembrar que para cada tecla vai ser necessária uma macro-célula. Então seriam necessárias no mínimo 40+5 para emular um teclado de ZX, ou de umas 88+8 para emular um de MSX (número de teclas + número de pinos de saída).





Nenhum comentário: