Em 20 de Março de 2011
Alguns dias atrás um leitor do site perguntou se eu poderia fazer um projeto para ligar um joystick de Atari na USB.
A princípio respondi que existiam já muitos desse tipo e que com certeza ele iria achar vários com um rápida pesquisa.
Logo depois por curiosidade eu mesmo fui dar uma olhada em alguns desses projetos e, na minha opinião, todos pecavam em um ponto: nenhum deles era realmente SIMPLES.
Sei também que existe o joystick clássico já com interface USB para ligar diretamente, mas nesse vejo o problema de não ter opções "extras",
digo, e se eu quisesse jogar com um joystick "grande", aqueles que a Dynacom chamava de "profissionais"? E se eu quisesse um pad, ao estilo Master System?
Então, juntando esses motivos e aproveitando que alguns meses atrás eu tive que estudar a interface USB para um projeto em que estive envolvido e somando-se ainda a diversão que seria, parti para minha própria solução.
O esquema que desenvolvi usa pouquíssimos componentes e pode até mesmo ser feito em "aranha" dentro do próprio joystick,
mas é uma boa idéia confeccionar uma pequena placa de circuito impresso para fazer a montagem. O funcionamento é bem simples, baseado num microcontrolador PIC com interface USB,
onde eu programei um firmware que escrevi fazendo a função de ler o joystick do Atari e "traduzir" essa entrada para o padrão de joystick USB de PC.
A lista de peças é a seguinte:
U1 - PIC18F4550 (requer gravação
deste firmware, leia o texto)
X1 - Cristal de frequência de 12Mhz ou 20Mhz
J1 - Cabo USB
J2 - Conector DB9
C1 - Capacitor Cerâmico de 220pF a 470pF
C2 - Capacitor Cerâmico de 100nF
Soquete de 40 pinos
Placa de circuito impresso (
baixe aqui o arquivo espelhado, já pronto para impressão)
Quanto ao microcontrolador, ele vem "virgem" de fábrica, ou seja, sem nenhum código programado, mas necessitamos que o arquivo HEX mencionado na lista de peças seja gravado nele.
Um gravador para PIC pode ser montado facilmente, basta procurar por "JDM programmer" no seu site de busca favorito ou até mesmo comprado pronto em sites de leilões por menos de R$30.
Na hora da gravação lembre de
desmarcar a opção MCLRE e selecione o valor do divisor do oscilador de acordo com o cristal que você esta usando ("divide by 3" pra 12Mhz e "divide by 5" para o de 20Mhz).
Eu costumo usar o
WinPIC800. É grátis e resolve bem, além de suportar muitos gravadores, inclusive o Willem e o JDM.
A placa é pequena, sendo muito fácil de se confeccionar pelo método de transferência térmica.
Basta montar seguindo o esquema. Atenção especial para o lado do PIC para não ligá-lo invertido.
No caso da saída para o USB, o correto seria usar um conector tipo "B" fêmea como o da foto. Mas na falta eu usei um cabo direto que soldei na placa. Acompanhe abaixo.
Fiz um furo que passei uma presilha. Não ficou lá muito bonito, mas é bem seguro. Após conferir tudo atentamente, faça um rápido teste conectando o cabo na USB.
No Windows você poderá ouvir aquele som característico de "coisas conectadas na USB".
Agora é só pegar um joystick padrão Atari e conectar no adaptador. A mão eu tinha essa da CCE que não é o meu preferido, mas tem gente que gosta.
Meus testes foram feitos só no Windows 7, mas acredito que funcionará em qualquer máquina com Win XP ou mesmo Linux ou Mac.
Veja que no painel de controle aparece o adaptador normalmente, como qualquer outro hardware.
Também é possível realizar o teste do joystick movendo a alavanca e pressionando o botão. O movimento é repetido pelo cursor na tela de "Propriedades" do Windows.
Com tudo testado, para não espetar o dedo e ao mesmo tempo proteger a placa quanto a possíveis curtos, coloquei um pedaço de papel E.V.A.
Ele tem uma aparência meio "emborrachada" e se adapta perfeitamente entre as soldas dos terminais. Basta algumas gotas de cola de cianoacrilato (Super Bonder, Pega Mil, Tri Bonder, etc, etc, etc) e o E.V.A. fica bem firme na placa.
Provavelmente todo mundo concorda que jogar num emulador não é a mesma coisa que jogar no equipamento real,
mas o
feeling de usar um controle de Atari no emulador Stella é fantástico.
Dúvidas, críticas ou sugestões, use o campo abaixo para deixar seus comentários.
Em 20/3/2011 23:30:00 por Marcio
Professor só inovando, mais uma conquista, parabéns!
Em 21/3/2011 00:46:00 por Mak_PG
Fantástico! Que outros joysticks dá pra adaptar?
O conector antigo do PC? Intellivision?
Em 21/3/2011 07:22:00 por Victor Trucco
Provavelmente qualquer joystick antigo dá pra adaptar usando um esquema semelhante a esse. Intellivision, Master System, NES, SNES, Mega Drive e muitos outros Já PC antigo não tenho idéia de como funcione, teria que pesquisar. Um abraço.
Em 11/4/2011 05:31:00 por Fernando Gallego
Victor, você tem esse código fonte do PIC em assembly, com comentários? Um abraço.
Em 11/4/2011 07:10:00 por Victor Trucco
Ferando, não foi escrito em assembly e sim em C. Não posso fornecer código fonte de nada que eu faço porque estou preso a diversos contratos. Acredite, para eu colocar esse artigo (que envolve programação) eu tive que pedir autorização às empresas nas quais estou envolvido. Espero que vc compreenda. Grande abraço.
Em 17/4/2011 23:18:00 por Suave
O protótipo que vc fez e testou é EXATAMENTE esse da foto??
Pergunto isso, pois o desenho impresso na pci está diferente do desenho apresentado (http://www.victortrucco.com/Atari/JoystickUSB/placa.jpg). Além de faltar uma trilha na pci, está diferente tb uma trilha do joystick com o pic. Até onde me lembro... no joystick do Atari são usados 6 pinos (acima, baixo, esquerda, direita, disparo e o pino comum) e na pci em questão só contam 5 pinos ligados... poderia explicar ??
Creio que a segunda foto de cima pra baixo seja o esquema... esta não está abrindo...
Abs.
Em 18/4/2011 06:55:00 por Victor Trucco
Suave, o prototipo sofreu um re-wiring porque como vc percebeu eu tinha esquecido de colocar uma trilha e outra eu resolvi aterrar ao inves de controlar pelo microcontrolador. Como eu não iria fazer outra placa somente para fazer fotos eu usei a primeira mesmo. No entanto tanto a placa quanto o código estão corretos e podem ser usados sem absolutamente nenhuma modificação. É pegar e montar. Grande abraço.
Em 26/6/2011 01:17:00 por Alejandro
Victor! Fantastico proyeto! Mais tenho una duvida sobre como conectar o cabo USB. O pin 23 es D-, o pin 24 D+. Pero 5VDC va com C2 e GND com pin 32? E correto? Abraco desde Buenos Aires!
Em 26/6/2011 17:27:00 por Hilton
Obrigado Victor! Como o Suave falou, seu layout esta diferente de seu projeto...fiz das 2 formas e ambos a USB nao identificou. Meu windows é Xp e eu nao gravei o codigo pelo winpic800, pois, meu gravador nao suportava e gravei pelo Mplab, que gravou o codigo normalmente? Oq vc acha que pode ser? vc tem um programa pra reconheçer pela USB? Att, Hilton.
Em 26/6/2011 18:52:00 por Victor Trucco
Hilton, Não entendi o que seria um programa para reconhecer pela USB. Uma coisa que pode ter acontecido é eu ter invertido a linha de dados e como eu montei com cabo ao inves de conector, posso não ter percebido se existe esse problema. Inverte os pinos 2 e 3 da USB e tente novamente.
Alejandro, o esquema não mostra, mas os 5V e o GND devem também estar nos pinos correspondentes do microcontrolador. Abraço
Em 27/6/2011 01:38:00 por Hilton
Victor, inverti os pinos conforme vc falou e a USB continua com a mensagem de dispositivo desconheçido, informando mau funcionamento do mesmo.Vc consegue postar um layout com todos os detalhes (completo),pois, deve estar faltando alguma conexão não especificada. Não sou nenhum expert em eletrônica, apenas um apreciador incondicional do ATARI. Fico no aguardo e agradeçido!
Em 27/6/2011 07:09:00 por Victor Trucco
Hilton, o layout publicado está completo, correto e com todos os detalhes. Achei que pudesse ter sido a pinagem do conector porque foi a unica coisa que de fato eu fiz diferente. Provavelmente o seu problema está relacionado com a gravação do microcontrolador. Abraço
Em 29/6/2011 18:26:00 por Alejandro
Victor, tenho o mismo problema que Hilton estou usando o cristal do 20 Mhz marque Divide by 5 e desmarque a opcao MCLRE. Tenho un eprom programmer JDM. En XP tenho o mesmo erro que Hilto, mais en Windows 7 nao tenho erro pero, nao aparece o dispositivo.
Em 30/6/2011 21:42:00 por Hilton
Victor, ja fiz e refiz várias vezes seu projeto e como está aconteçendo com o Alejandro, a USB não reconheçe o dispositivo pelo XP, gravei o PIC conforme suas instruções, revisei a instalação e nada. Testei tambem no Linux e no Win7, e sequer apareçe alguma coisa. Como lhe disse: precisa de alguma informação de software para reconheçimento do windows desse hardware. Vc vende essa placa? Qq coisa compro de vc? Nao vejo jeito desse sistema funcionar, falta alguma coisa. Obrigado Victor, faz um preço acessível que eu compro. Att, Hilton.
Em 30/6/2011 23:04:00 por João@Eletrônica
Fiz o circuito acima com todas as recomendações, porém não obtive êxito. Já vi que não fui o único um monte de gente dizendo que não funcionou, pelo o circuito não está certo, ou estariam todos fazendo errado? tem dois layouts ali tbm. vc disse que os dois funcionariam, tentei os dois. Nenhum funcionou
Em 1/7/2011 00:11:00 por Alejandro
Victor! Funcionou! O problema era que tenia trocado os cabos do conector USB que van pra los pinos VSS e VDD do 18F4550!! Abraços desde Buenos Aires!
Em 1/7/2011 07:48:00 por Victor Trucco
Caros amigos, circuitos com microcontroladores são mais complexos que os normais e requerem muito mais atenção do que os outros circuitos publicados aqui. Conforme já disse antes, não é necessário nenhum tipo de instalação porque usa os drivers padrão do Win7. Atenção a gravação do PIC que requer que opções estejam marcadas ou desmarcadas. No momento da gravação, escolha todas as opções conforme aparecem na imagem do WinPIC800. O segundo ponto a ser revisado é a pinagem do conector USB, que como o Alejandro já avisou, no caso dele estava invertido. O primeiro layout que fiz, que aparece nas fotos eu esqueci de colocar o botão de tiro, mas mesmo assim, identificar e comunicar com o PC iria, porque isso é feito pelos pinos 23 e 24 que sempre estiveram certos.
Em 1/7/2011 10:08:00 por João Carlos Dias
Eu montei no mês passado e não tive problemas no XP, então correto está. Como o Truco já falou, acho que o problema maior é na gravação do PIC. Eu usei o Win800 e marquei todas as opções exatamente como aparecem na foto do programa. Espero ter ajudado aos amigos.
Em 14/8/2011 21:36:00 por Andre
Vitor estou passando pra dizer que consegui montar o circuito seguindo as instrucoes.
Em 15/8/2011 06:47:00 por Victor Trucco
Andre, parabéns pelo sucesso e obrigado pelo retorno.
Em 21/12/2011 15:45:00 por Eduardo
Victor, boa tarde.
Há algum motivo para usar o 18F4550? Posso usar o 16F628? No caso do joystick do Atari é 0 ou 1, correto? Há um resistor como nos proporcionais?
Obrigado
Em 21/12/2011 15:53:00 por Victor Trucco
Eduardo, usei o 4550 porque era o PIC que eu tinha a mão com suporte à USB. Não acredito que o 628 tenha, mas certamente muitos outros PICs ou mesmo AVRs poderiam ouvir uma entrada de joystick de Atari que é completamente digital (0 ou 1 como vc sugeriu). Um abraço
Em 21/12/2011 16:17:00 por Eduardo
Victor, obrigado pela informação.
É que você usou uma Ferrari (18F4550) e eu pensei em um fusquinha. Na verdade é que estou usando o 16F628 pra outra coisa e acabei escrevendo o errado. Pensei foi no 18F2550.
Obrigado pelas dicas e vou montar um.
Em 21/12/2011 16:22:00 por Victor Trucco
Sim, perfeitamente possivel. O 2550 é na pratica uma versão menos do 4550. Inclusive o arquivo que eu forneço aqui para gravação deve servir direto, sem nenhuma adaptação, só gravar.
Em 27/1/2012 12:36:00 por João
Olá Victor, parabéns pela matéria. Gostaria de tirar uma dúvida, eu consigo utilizar este esquema mas ao invés de eu plugar o Joystick do Atari, plugar algumas botoeiras para acionar/desligar algum efeito de um software?? Como se fosse uma interface controladora mais exatamente?Abraços!
Em 27/1/2012 12:42:00 por Victor Trucco
João, certamente que poderia. Bastaria ligar seu conjunto de botões utilizando a mesma pinagem do joystick do Atari. Dentro do seu software vc faz a leitura do joystick utilizando as bibliotecas padrão do windows. Um abraço