MSX Hobby

Um site para se divertir com eletrônica

Teclado PS2 para MSX com Arduino

Introdução

O objetivo desse artigo é demonstrar uma implementação de um conversor de teclado PS2 para o MSX, utilizando um Arduino MEGA 2560.

Condições

Tive como premissa desenvolver um projeto onde precisaria um mínimo de soldas e com um custo muito relevante.

A princípio comecei desenvolvendo com um Arduino UNO para poder migrar para um Arduino Mini ou Micro, porém se mostrou inviável no quesito técnico. Os microcontroladores desses dispositivos até conseguiriam ser implementados, porém não como um Arduino.

O projeto do Arduino foi desenvolvido para facilitar a portabilidade dos códigos. Em algumas placas, alguns pinos do microcontrolador foram sacrificados por conta disso. Como esse projeto foi desenvolvido visando usar 5 pinos externos como interrupção, pelo custo progressivo, fico mais viável utilizar um Arduino MEGA.

Implementação

Desenvolvi duas rotinas básicas dependentes de interrupções:

ROTINA DE LEITURA DO PS2, com interrupção no pino 2 do Arduino:

  1. Pega os valores do buffer (11 bits),  interpretam se são teclas especiais ou soltando a tecla.
  2. Caso seja especial, dá mais uma varrida no buffer para pegar o seu valor.
  3. Caso seja soltando, também dá mais uma varrida no buffer pegando o valor da tecla solta.
  4. Compara com o valor da matriz de conversão de teclado (um Byte com a Linha e Coluna da matriz do MSX) e grava o BIT correspondente na matriz do MSX (0 p/ pressionando e 1 p/ soltando).

ROTINA DE LEITURA DA PPI, com interrupção nos pinos 21,20,19 e 18.

  1. Lê os dados das portas 18,19,20 e 21 e assume como a linha da matriz
  2. Verifica se o teclado está sendo usado.
  3. Caso positivo, joga o valor da Matriz na porta de saída (8 bits) de uma vez.
  4. Caso contrário joga o valor 255.

Circuito

Abaixo vemos as ligações elétricas para um computador que possui uma PPI 8255.
Clique para ampliar.

Desenvolvi esse circuito utilizando um Hotbit. Esse micro possui um conector de teclado próximo a PPI, porém para economizar portas no Arduino, optei por ligar diretamente na PPI.

Visão interna do Hotbit.

Circuito do Hotbit

Para o Expert as ligações podem ser exatamente igual, porém se optar por ligar no conector de teclado e manter todo esse circuito externo, perderá a luz do Caps Lock (Pino 11 da PPI).

Circuito do Expert

Conclusão

O circuito, neste momento, ainda não está 100% funcional, porém dá para ser usado em um MSX.

O que funciona?

  • Todas as teclas pressionadas são interpretadas pelo computador corretamente.
  • É possível pressionar mais de uma tecla ao mesmo tempo.
  • O LED de Caps Lock aciona de acordo com o MSX.
  • Os LEDs ScroLock (circuito funcionando) e de NumLock (Teclado numérico ativo) ficam acesos.
O que não funciona?
  • Ao pressionar as teclas 0, 1, 2 e 3, o MSX interpreta mais um linha na matriz de teclado. Por exemplo, se pressionar o 1 ele coloca 1-.
Como esse projeto ainda está em desenvolvimento, não colocarei o código fonte do Arduino nessa fase.
Aguardem um novo Post.

ATUALIZAÇÃO: Vou distribuir o código compilado. Para carregá-lo no seu Arduino MEGA utilize o programa XLoader http://russemotto.com/xloader/
Baixe o arquivo aqui: PS2_MEGA2560.cpp.hex
O vídeo seguinte é uma demonstração do funcionamento do circuito. Espero em breve ter esse pequeno BUG resolvido.

3 thoughts on “Teclado PS2 para MSX com Arduino

  • Danilo Angelo says:

    Olá Eduardo,

    Você ve algum motivo para isso nao funcionar num sony hb-f600p? Lembro que essa máquina usa um msx engine e nao tem a ppi discreta…. Dependo de confiar nessa possibilidade para comprar a maquineta. Adicionalmente, provavelmente teria que adaptar as vias e mapa do teclado… Vc toparia abrir o source do arduino para mim?

    Adicionalmente, tem uma pá de gente com expert e sem teclado. O que vc acha de produzir um batch de algumas unidades do conversor PS2?

    Abraço,
    Danilo

  • Danilo Angelo says:

    Correção: Sony hb-700p…. 🙂

  • Editor says:

    O único micro em que pude testar o conversor foi o Hotbit. Tecnicamente não vejo problemas de funcionar com outros, porém não há garantia.

    O código fonte já está aberto e disponível, veja o anexo no post em inglês.

    Arquivos

Leave a Reply

Your email address will not be published. Required fields are marked *

one × four =