22 janeiro, 2012

PSOne IrControl 1.0A - A Teoria

Certo dia, jogando Gran Turismo no PS1 ano passado, tive aquela vontade de sentir o gostinho do Mitsubish GTO 92" com 900 HP, para isso eu aumentei o volume... momentos depois entrei naquela rotina de ter que tirar o cabo do meio das pernas, sendo esta parte que eu olhei para o controle da tv, olhei para o controle do PS1 e pensei: "Porque não?", em fazer um controle do PS1 sem fio, tal como o da TV.(Deve estar estranhando a história mas foi bem assim...hehe)

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