lunes, 6 de febrero de 2012

Y porque el público lo pidió...

Aquellos que siguen el blog saben que el banco de pruebas que suelo utilizar para desarrollar los drivers de controles de videojuegos consiste en un adaptador USB. Al desarrollar el adaptador de controles de Dreamcast implementé un módulo de decodificación para controles de PlayStation.

Pues bien, decidí completar el proyecto de un adaptador de controles de PlayStation a USB. Sé que existen en internet no muchos, sino demasiados proyectos que hacen lo mismo. Sin embargo, decidí liberar el mio debido a que tiene algunas características muy particulares.
  • Funciona con un microcontrolador ATTINY2313.
  • Funciona tanto con controles originales, como con controles de terceros e inalámbricos.
  • Soporta tanto el modo digital como el modo analógico


El adaptador funciona de forma similar al adaptador de dos controles de PlayStation de Steren, es decir, en modo digital la cruz direccional controla los ejes XY, mientras que en modo analógico controla el Hat switch y los ejes XY son controlados por el stick izquierdo. Sin embargo este adaptador así como está sólo soporta un control. Agregarle otro control no debería representar gran complicación.

El protocolo fue implementado por bitbang. Lo anterior no representa ninguna desventaja, ya que de ésta forma se establece una comunicación completa con el control. Éste adaptador es de los pocos que manejan de forma adecuada la línea ACK (Acknowledge) del control, es decir, si el control no responde poniendo la línea ACK en bajo en 100[us], se considera al control desconectado. Además, el protocolo implementado opera a 500[kHz], que es la frecuencia de operación con la que el PS2 se comunica con sus periféricos.

Si bien, no soy fan de los controles de PlayStation, estoy seguro de que este proyecto puede ser de utilidad a mucha gente, sobretodo porque muchos de los adaptadores caseros que circulan por internet no soportan controles originales, y la gran mayoría tampoco soporta controles inalámbricos. Si bien el protocolo es relativamente sencillo de comprender, al momento de ser implementado produce errores difíciles de detectar si se sigue el esquema de tiempos que se ha popularizado más por internet.

En dicho esquema, se dice que los datos se deben poner en la línea (COMMAND) mientras la línea de reloj (CLOCK) se encuentra en estado bajo. Posteriormente se leen los datos (DATA) cuando el reloj pasa de estado bajo a alto. Pues bien, en el esquema de tiempos que me funcionó tuve que poner los datos en la línea (COMMAND) mientras el reloj (CLOCK) se encuentra en alto, mando el reloj (CLOCK) a estado bajo, posteriormente mando el reloj (CLOCK) a estado alto y por último leo el dato (DATA).

Pongo a su disposición el firmware, el código fuente, el esquema de conexiones y la configuración de fusibles.
Adaptador de un control de PlayStation a USB.

¡Estamos en contact!

Soundblaster Audigy SE front panel.

Hola, ¿Cómo están? Bienvenidos sean de nueva cuenta. Recientemente me puse a la labor de reacondicionar una computadora con las piezas que...