Depois de portar o programa em C do microcontrolador AVR, que desenvolvi na parte 1 deste post, trabalho rápido, fiz algumas modificações no software, para deixar a leitura do joystick mais rápida e já coloquei na versão definitiva com micro 8051, AT89C2051.
Mas o que este firmware faz?
Para requisitar os dados do joystick, são usados dois comandos, 0x01 e 0x42, como visto abaixo nessa explicação sobre o protocolo que encontrei por aí:
ATT -______________________________________________________________
| Byte 1 | | Byte 2 | | Byte 3 |
CLOCK ---_-_-_-_-_-_-_-_-----_-_-_-_-_-_-_-_-----_-_-_-_-_-_-_-_-----
0xFF 0x41 0x5A
DATA -------------------------__________--__----__--__----__--__----
0x01 0x42
CMND -----_____________-----__--________--__------------------------
ACK --------------------__-------------------__-----------------__-
Observando os dados, eles são mandados no edge de subida do clock, logo,
todo o bitbang foi feito em cima destas instruções, o ACK é simplesmente ignorado,
já que, ao contrário do playstation, a informação do controle estar conectado é
inútil no MSX.
Com a leitura dos dados que o controle envia no sinal DATA, já saem os diversos
botões do joystick, depois de ler isto, é feita alguma lógica digital e deslocamentos
em cima disso para que o formato chegasse em um único byte com os 8 botões de interesse.
Depois de obter os dados devidamente formatados, ele é invertido, tendo em vista
que no MSX os dados das chaves de joystick são ativas em nível baixo, então o valor
é escrito em uma porta do micro.
O programa ocupa menos de 600 bytes no micro que tem 2kB de flash, é uma aplicação
típica para um AT89C2051, onde somente sinais digitais são processados.
Para se obter um clock perto de 100kHz no joystick, um cristal de pelo menos 18MHz
é necessário, no meu caso usei um de 21.47727MHz.
Acompanhe a foto da placa montada abaixo:
Temos então dois botões de ação no MSX, no meu caso, coloquei um jumper neles, como era feito em muitos controles da época, ainda estou avaliando este firmware, mas pelo que joguei até agora parece bom.
Mas porque usar só um botão se o sistema de decodificação disponibiliza os dois? Repare que um deles pode ser selecionado se colocando um dos jumpers em JP1, 2 ou 3, fiz isto devido ao ser da lojinha de componentes.
Pedi ao vendedor um cabo manga de 10 vias, mas o iluminado me cobrou o de 10 vias mas cortou o de 6 vias! O resultado disso foi que tive que dispor de 1 sinal, eu precisaria de um cabo com 8 vias para que tudo ficasse como planejei.
Abaixo o esquema, para quem quiser montar, um detalhe não descrito aí é que deve se colocar um resistor de 2,2k em pullup no pino DATA, diretamente no conector do joystick, caso contrário a tensão de nível alto será menor que o ViH do micro:
E, finalmente as figuras para quem quiser fazer a placa deste projetinho (clique
para ampliar).
Neste esquema, todos os capacitores não marcados são cerâmicos multicamada, 4,7uF 6,3V, dielétrico
X7R ou qualquer outro.
O arquivo HEX para a gravação do micro pode ser baixado em:
1 comentários:
Parabéns pelo Blog. Busco parcerias para meu site Supertech componentes eletrônicos, entre em contato supertech@supertech-comp.com.br Fico no aguardo !
Postar um comentário