Há um tempo atrás comprei esse controle barato de GameCube no Ebay. Estava esperando adaptar pra PC porque queria jogar Wind Waker e tal. Porém, o protocolo se mostrou bem chatinho. Primeiro, os dados são transmitidos por apenas um fio, o que exige timings perfeitos. Segundo, os bits são transmitidos a alta frequência, o que exige alguns esquemas de interrupção e um pouco de assembly. Acabei deixando esse projeto de lado por um tempo.
Ok. O controle tinha estado na minha mesa por um bom tempo sem nenhuma utilidade já que eu não tenho um GameCube . Estava sem sono e pensei em montar algo bem rápido. Hora de apelar, procurei sobre na internet. De fato, esse projeto é baseado no trabalho de Raphaël Assénat, recomendo que passe lá antes. Na verdade, se você tiver interesse em reproduzir o projeto vai ter que passar lá pra baixar os executáveis pro atmega.
*O Dragão sem chama não é responsável por danos ao microcontrolador ou controle ou seu PC, é esperado que o leitor tenha conhecimento e experiência médios em eletrônica e microcontroladores em geral. Utilize as informações disponibilizadas por sua conta e risco.*
Firmware
Conforme dito anteriormente, eu não escrevi o código. Os arquivos podem ser baixados no site de Raphaël Assénat. No meu caso, como não usei uma pcb e soldei tudo fica inviável a programação do micro depois de montado o circuito. Recomendo fortemente gravar o firmware antes de começar a montar o circuito.
Pra que o atmega use o cristal externo é necessário mudar os valores dos fuse bits. Uso o avrdude e meu gravador é o usbasp.
avrdude -p atmega8 -c usbasp -U lfuse:w:0xFF:m -U hfuse:w:0xC9:m
Gravando o firmware com o avrdude:
Esquemático
O esquemático está abaixo. Fiz algumas alterações em relação ao original, já que não tinha alguns componentes.
*A imagem do conector do controle é no console, no cabo deve-se espelhar a imagem. No final, acabei cortando o cabo e usando pra USB.*
Os zeners que limitavam a tensão nas linhas USB foram removidos, pois o atmega roda a 3.3V e não 5V. O atmega teoricamente não deveria estar rodando a 3.3V, mas funciona sem reclamar. Na minha montagem ficou faltando os capacitores do cristal e da alimentação, mas tudo funciona ‘de boa’.
Fotos da montagem:
Ok. Pra um serviço rápido, soldei tudo em estilo deadbug.
Comecei errado! xD Estava um pouco com sono e nem percebi que estava soldando errado (O chip está de cabeça pra baixo).
Agora sim, consertei os erros. Tudo segundo o esquemático. Exceto pelos capacitores que estavam faltando.
Mais uma vista do circuito.
Agora onde colocar o atmega? Muito pouco espaço livre.
Exceto por esse cantinho. Constatei que o chip cabia aqui.
Como o chip ia ficar dentro do controle, cortei o cabo perto da placa. Assim dava pra aproveitar o máximo do cabo na hora de adaptar pra usb.
Esse é um controle paralelo, não é de se esperar muito da placa. Ainda sim é possível ver marcações para os sinais do controle. +5V(Motor) e GND pra alimentação, S pra linha do sinal e V pra tensão lógica do controle, nesse caso 3.3V.
Soldando o atmega no lugar. Todo cuidado possível pra não trocar nenhum fio.
Prontinho.
Depois de tudo no lugar, eu fiz os testes das tensões pra ver se estava tudo certo. Esse passo é muito importante, pois evita de queimar alguma coisa. Uma dica, antes de conectar o controle na usb é bom testar com outra fonte, nesse caso usei uma bateria com regulador pra alimentar com os 5V requeridos, daí fui testando cada pinos pra ver se as tensões estavam corretas. Se a tensão for invertida, pode ocorrer dano a porta USB do PC ou talvez ao PC em si.
Detalhe da conexão usb. O cabo do controle foi reaproveitado, o fio amarelo é a linha D+ e o fio branco é o D-. O pinout usb pode ser encontrado aqui.
Melhor ir dormir. Depois eu arrumo essa mesa.
Conclusões.
Até fiquei surpreso, o controle foi reconhecido de primeira. Mesmo sem os capacitores e com o atmega rodando a 3.3V. Testei o controle no Dolphin e funciona tudo normalmente. Não são necessários drivers, pois o controle é reconhecido como um dispositivo HID.
Bom, é isso. Dúvida? Comentário.
Até o próximo post o/
oi
mano
você sabe me dizer onde esta conectado o motor de vibração ?
OI Luiz.
Na própria placa do controle.
Não mudei nada no motor, apenas entre o cabo e a placa.
vc não manda para mim o ci atmega8 ja gravado? eo o custo pois seria dois
Poxa, fica complicado. Você não tem Arduino ou algum amigo que tenha? Acredito que o Arduino possa ser usado como gravador. Sou do ceará, geralmente correios sai caro se você não mora no nordeste.
Bom dia, meu caro. Estou com o mesmo projeto. Vou adquirir a programadora, mas o que mais preciso adquirir para fazer a programação? Eu sei que já tenho que estar com o Xtal soldado na Atmega8 para fazer a programação (ao menos foi o que o Raphael disse), mas preciso saber como plugar a programadora na Atmega8, ainda.
Eu vou montar dois adaptadores destes numa placa universal e juntar os dois com um hub USB que irá pro PC. Assim vou fazer um adaptador externo mesmo de dois controles de 64/GC pra USB.
Obrigado!
Pra ficar mais claro: queria soldar um conetor de 6 ou 10 pinos na placa também, pra conectar a programadora na Atmega8, mas não sei onde arrumar um desses conectores ou como costumam chamar eles. Eu vou ter que soldar dois na placa, um pra cada Atmega8.
Olá Andre.
Pra programar o firmware no Atmega, basta utilizar qualquer gravador AVR. O que eu uso e confio bastante é o USBASP. Os passos estão na segunda imagem desse post, porém é necessário ter o avrdude instalado. Uma alternativa gráfica seria o Extreme burner https://goo.gl/vkyhfN.
Quando o Atmega vem da fabrica, este usa o oscilador interno, de 8MHz, mas dividido pra 1MHz. Gravando-se os fuse bits mencionados no post, este passa a precisar de um oscilador externo, nesse caso 12MHz necessario pela V-USB.
Quanto ao conector, geralmente uso pinos macho pra prototipagem (male pin headers) https://goo.gl/kN80vY . Até as placas Arduino usam esses headers, só é preciso ter cuidado pra não inverter.
Robson.
Beleza! Comprei tudo e alguns pinos pra usar pra fazer um header pra programadora. Já tenho as pinagens e tudo, então fazer o header vai ser tranquilo! Vou usar uma placa de N64 estragada pra retirar os conectores.
Só uma pergunta: nos esquemas do Raphael tem uns diodos zener 3V6 no sentido GND -> D- e D+ do USB. Eu vi que você não usou. Vai ter algum problema se eu usar?
Olá andré.
Você tem que seguir um dos dois esquematicos, sem misturar. Exemplo, repare que o meu atmega está rodando a 3.3V, assim o micro controla D+ e D- diretamente. No esquema do Raphael, ele usa o atmega a 5V, por isso os zeners pra limitar a tensao nesses pinos.
Quanto aos fuses, não ativei o BOD e se não me engano estou com o maior tempo de start up possível. Você pode usar tanto a minha configuração quanto a dele.
É preciso tomar cuidado no entanto com o high fuse. Há um bit nesse fuse que pode desativar a gravação serial, mas use 0xC9 que é de boa.
Vi também que você usou valores de Fuse diferentes
Os do Raphael são high_byte=0xc9 low_byte=0x9f e você usou high_byte=0xc9 low_byte=0xff. Isto interfere em algo?
Beleza!!! Consegui aqui com o Atmega8, mas me venderam por engano um Atmega88PA em vez de outro Atmega8. Só notei depois de todas as soldas feitas. Tentei o hex da 168 e os Fuses da 168 mas não resultaram em nada… Só um.dispositivo USB HID que não é reconhecido. Sabe de algum.jeito de funcionar na 88? O Raphael disse que a da 168 deveria funcionar, mas não foi o caso e desfazer as soldas pra colocar uma 8 ta me dando aquela preguiça hahaha
No mais, muito obrigado pelo tutorial e pela ajuda! Nunca tinha programado um Avr antes e seu post e suas respostas ajudaram muito!
Olá André.
Você verificou se os fuses foram gravados corretamente no 88? Acredito que o 88 seria compativel com o 168. Você disse que o micro é reconhecido como HID mesmo asssim? A versão do firmware é a mais nova? Vou checkar se os fuses do 88 são os mesmos e depois volto aqui.
Fico feliz em ter ajudado. Fique a vontade pra olhar os outros posts no blog, são mais ou menos nesse estilo haha.
Consegui! Entrei em contato com o Raphael e ele me disse que eu precisava compilar especialmente pro 88. Por algum motivo, simplesmente mudar o target pro 88 não funcionou, mas mudando pro 88P (que é o que eu tenho, apesar de que o 88 deveria ter funcionado porque o .hex gerado foi o mesmo) funcionou. Notando que eu usei o avrdude com o target m88p para ambos os .hex. Enfim, funcionou.
No fim das contas, o Raphael adicionou um makefile pro 88 e um pro 88P com as minhas modificações!
E os fuses estão corretos, apesar de que o site do Raphael manda colocar efuse 0x01 e o avrdude 6.3 não deixava colocar o efuse para algo diferente de 0x9F, então usei o 6.0.1 e deu tudo certo.
Muitíssimo obrigado, Robson!
Entendido. Que bom que deu tudo ok.
como faço o oposto do q vc fez, quero transformar um controle usb, colocar o cabo do controle game cube no lugar do cabo usb do controle?
Olá George
Como a comunicação USB é muito complexa não há bibliotecas pra AVR que façam o chip funcionar como host USB. Então eu penso em duas alternativas:
1 – Remover o chip usb original e usar o micro pra ler o estado dos botoes e analogicos e “imitar” o protocolo de comunicação do controle de game cube.
2 – Converter um controle de PS2 que tem protocolo bem mais simples que USB e inclusive é bem documentado, não precisando nem desmontar o controle.
Link que podem te ajudar:
http://www.int03.co.uk/crema/hardware/gamecube/gc-control.html
http://spritesmods.com/?art=xpad&page=1
Robson bom dia, pensei algo parecido com o amigo acima mas não o mesmo.
Gostaria de usar uma placa zero delay e montar um arcade controle p\ gamecube\wii, usando do controle do gamecube apenas o cabo p\ envio de dados.
eu vi a alimentação que você fez, então se eu adpatar so o cabo de dado\alimentação, eu conseguiria usar a placa dessas abaixo “talvez” ou precisaria saber algo mais?
Imagina que com as diferenças de layout da placa, vc vai me dizer q n funciona, mas vou perguntar mesmo assim, pois sodar placa do controle joystick aos botoes gera alguns problemas, mal contato, etc… por isso essas placas zero delay são uma mão na roda
Obrigado
https://http2.mlstatic.com/kit-placa-usb-zero-delay-arcade-eletromatic-sanwa-pc-ps3-ps4-D_NQ_NP_458815-MLB25340473624_022017-F.webp
https://http2.mlstatic.com/kit-placa-usb-zero-delay-arcade-eletromatic-sanwa-pc-ps3-ps4-D_NQ_NP_666817-MLB25581824200_052017-F.webp
http://produto.mercadolivre.com.br/MLB-837365141-kit-placa-usb-zero-delay-arcade-eletromatic-sanwa-pc-ps3-ps4-_JM
Olá, Emerson.
Seus links não funcionam.
Então, não sei se entendi direito, mas se você está sugerindo conectar uma placa usb na entrada gamecube do console, não vai funcionar.
O protocolo usado pelo controle de gamcube e controles usb são diferentes.
Robson
Obrigado Robson, resumindo seria uma uma placa ‘usb-ps3’, mas p\ ser sincero é isso mesmo que você falou.
Bem a minha segunda opção é soldar os botões do arcade direto no controle, porem não sei como faria com o direcional?
São 4 pinos metálicos na placa? porque eu olhei a peça na net e parece ter seis pernas.
Como você fez com o direcional p\ soldar com o chip? preciso arrancar o direcional da placa p\ ter uma visão melhor?
Obrigado novamente
que materia maneira, obrigado. seria possivel um cabo adaptador que de um lado seja o macho do game cube e do outro um usb? que funcione no wii? ou de uma lado o plug do wii e do outro um usb que funcione no proprio video game?