Pensei comigo, sempre quis fazer algo que pudesse chamar de "hack" e que seja no playstation, a partir disto fui para as obras!!!
O Controle que vou usar e este da foto ao lado, a primeira versão do controle que veio com o Video Game, pois ele é mais simples e a transmissão vai ser via Infravermelho tal como da tv.
A teoria do Controle PS1
Sobre o Controle:
Na internet é complicado achar um documento que fala dos controles da sony, em geral a maioria nem especifica o protocolo ou tipo de conexão, o que complicou em muito. Porem, depois de muita pesquisa, descobri através da ajuda do pessoal da comunidade Projetos com Pic que a interface se tratava do SPI.
O SPI (Serial Peripheral Interface) nada mais é do que uma conexão com duas via de dados MOSI(Master Output;Slave Input) e MISO(Master Input;Slave Output), uma de clock SCLK gerado pelo master e um SS(Slave Select).A unica diferença é a nomenclatura do video game, onde MOSI é o Command(CMD); MISO é o Data(DAT); Clock e o SCK(CLK); SS é o ATT; e ainda para completar tem um sinal ACK.
*Mais info sobre a interface SPI: http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
A frequencia de comunicação é de 250Khz, e o pino SS é compartilhado com o MemoryCard, como na imagem abaixo:
O timing da comunicação dos dispositivos:
Comunicação
A comunicação ocorre assim:
Primeiramente, o host (ou master) ativa a linha ATT jogando a tensão em LOW (como mostra no timming acima). Este sinal ficara assim até que a comunicação acabe.
Em seguida, o host (ou master) ativa o clock (CLK) e envia o valor 0x01. O seu clock é de 250Khz.
Nota: Os dados são transmitidos sendo o MSB primeiro.
Apos o envio, o dispositivo ou slave emite um sinal na linha ACK (Acknowledge, do inglês, quer dizer reconhecimento) de no minimo 2µs. Caso o host não receba o sinal dentro de 60µs, o mesmo irá indicar que não há um controle ou os dados não foram recebidos.
No segundo Frame, vamos se dizer assim, o host envia o valor 0x42 , como se fosse uma pergunta para o controle "que tipo de dados você vai enviar?", a partir dai depende do controle em questão. Como irei usar um controle D-Pad (sem analogico, somente os botões), o código a ser enviado será o 0x41.
No terceiro Frame, o dispositivo (slave) envia o valor 0x5A (Nota: em binário, o inverso desse valor é igual, por exemplo 0x5A h = 0101 1010 , vai ser o mesmo valor se o primeiro bit ou o ultimo sair primeiro.).
No quarto e quinto são enviado os dados sobre as teclas pressionadas.
Nota: Apos as transmissões, os sinal ACK é ativado, com excessão do quinto Frame que não necessita.
Os dados são enviados do MSB ao LSB (O primeiro bit é o ultimo a sair).
Aqui ficou a comunicação , agora vem o hardware.
Alem dos pinos de comunicação o controle provem também do pino +7V(7.6V), +3V(3.6V) e o GND.
O que eu nao posso afirmar é a veracidade desta informação, porque segundo um diz é 5v e nao 3v, outros dizem que o 7v é a força do CD-ROM e por ai vai.
Por sorte o PIC trabalha nesta variação de tensão.
Proximo: Teoria 2 - O Controle sem Fio