Facebook Twitter RSS Reset

[IC]Convertí joystick de Sega a uno de PC y te lo muestro

[IC]Convertí joystick de Sega a uno de PC y te lo muestro

Hola gente! En esta ocasión les voy a estar mostrando y explicando este proyecto en el que vengo trabajando hace días.

Objetivo

Usar un joystick de Sega como joystick USB que funcione en CUALQUIER juego.

Nota: Todos los archivos de código los dejo mas abajo para su descarga.

[IC]Convertí joystick de Sega a uno de PC y te lo muestro

Parte 1: El control

Lo primero fué saber como funcionaba un joystick de Sega. Abrí el control y me fijé sus conexiones.

[IC]Convertí joystick de Sega a uno de PC y te lo muestro

Como se puede observar hay un circuito integrado el cual desconocía, por lo que tuve que buscar info en internet al respecto. Después de varias horas junté toda la información para saber su funcionamiento.

El control de Sega se basa en un circuito multiplexor, como la mayoría de los controles. Esto lo que hace es reducir la cantidad de salidas(datos) respecto de las entradas(botones). De esta manera se consigue que teniendo muchos botones tengamos una cantidad menor de cables con la información de los mismos.

Este circuito integrado es el 74HC157 (con una leve modificación de parte de Sega) el cual se explicará a continuación.

Nota: Para entender esta parte se requiere conocimiento en compuertas y funciones lógicas.

[IC]Convertí joystick de Sega a uno de PC y te lo muestro
Recomiendo abrir la imagen en nueva pestaña para visualizarla mejor.

Como podemos observar al cambiar el estado del interruptor “Select” podemos alternar entre un grupo de botones u otro. Esto quiere decir que con 9 señales (8 botones+1 select) tendremos 4 salidas que dependeran del estado del select.

La modificación mencionada anteriormente se debe a que Sega sacó un control con 4 botones mas lo que obligaba a usar un nuevo sistema de multiplexado y como consecuencia perder la compatibilidad con las consolas y juegos anteriores. Para solucionarlo decidieron seguir usando el mismo sistema solo que para agregar esas 4 salidas extra agregaron una función al select. Como vimos antes el select podía optar por valores de 0 o 1 y depende este valor sacaba un grupo u otro, con esta modificación esto se mantubo pero también se agrego que si se mandan 3 pulsos (es decir, 10101) en un determinado periodo el control lee el 3er grupo de botones (que corresponden a los botones X, Y, Z y Select). Para volver al modo anterior solo bastaba con mandar un pulso (01) nuevamente.

Solo bastaba saber la conexión de cada pin del conector del control que con una búsqueda rápida en google se encuentra.

[IC]Convertí joystick de Sega a uno de PC y te lo muestro
En rojo marqué los pines que son de alimentación y el de select.

Una vez comprendido esto hice el programa en Arduino, por qué en Arduino? Por que es la manera mas rápida de poder hacer prototipos de esta clase de proyectos, además me provee un conversor USB-Serie integrado el cual usuaremos en la siguiente parte.

El programa lo que hace es sencillo, se leen las 4 salidas con el Select en 1, luego con el Select en 0 y luego se mandan 3 pulsos con un periodo de 40 microsegundos cada una (20us en 0 y 20us en 1).

Esos datos se guardan en una variable y los saco por el puerto serie dependiendo cada uno de los botones.

El resultado es el siguiente: