InicioHazlo Tu MismoConvertí joystick de Sega a uno de PC y te lo muestro

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

Hazlo Tu Mismo2/25/2016
[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.

control


Parte 1: El control

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

convertir


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.

usb
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.

Sega
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:



joystick


Parte 2: La interfaz

Bien, en este punto es donde se me puso complicado el asunto ya que mi idea era hacer un joystick compatible con CUALQUIER juego y no todos soportan ser jugados con joystick (por ejemplo World of Warcraft o juegos viejos de emulador que no detectan los joystick USB).
Buscando una solución al problema se me ocurrió que en vez de ser un joystick sea un teclado con forma de joystick. La ventaja de esto es que cualquier juego se puede jugar con teclado por lo que el problema de compatibilidad queda descartado. La pequeña desventaja es que al presionar un botón estaríamos escribiendo un caracter lo que nos imposibilita movernos y escribir a la vez en un juego online por ejemplo, pero no me interesaba así que me decidí a usar esta opción.

Para lograrlo hay que entender como funciona un teclado USB:

teclado


Como se observa en la imagen anterior se envían 8 bytes (paquetes de 8 bits) de los cuales el primero tiene la información de las teclas modificador (Shift, Control, Alt, Windows/Mac), el segundo siempre va vació (no se utiliza) y los siguientes 6 son las teclas que se presionan. Por deducción podríamos decir que se pueden tener hasta 6 teclas presionadas a la vez. Los valores de las teclas vienen dados por una tabla estandarizada del protocolo USB la cual se puede encontrar en el documento "USB HID Usage Tables", capítulo 10 (link al final).
En esta etapa de prueba los pulsadores eran unos botones comunes en un protoboard con sus respectivas conexiones.

El código de esta parte fué lo que mas tiempo me llevó, aproximadamente una semana en poder resolverlo y solucionar todos los errores, ya que a pesar de no ser algo complejo lo que tenemos que manejar son bytes enteros a diferencia de bits que se manejan comunmente. Después de días de escribir, borrar, reemplazar, probar y optimizar logré tener un código funcional. Lo subí a la placa Arduino y lo probé con 6 botones comunes, dando el siguiente resultado:




Seguramente te estarás preguntando como hice para que la pc me detecte la PC como un teclado HID USB y no como una placa Arduino. Para realizarlo tuve que cambiar el firmware (programa controlador) del conversor USB-Serie a TecladoHID-Serie. Si querés mas info al respecto te invito a pasar por mi post POSTBATERIA en el que explico como se logra este cambio de firmware, en ese post transformando el conversor en MIDI-Serie.

arduino


Parte 3: El teclado-joystick

Esta parte es sencilla. Se agarra el código del control y se lo agrega al código de la interfaz, modificando algunas lineas para ajustar las conexiones y optimizar código.
Usando la USB HID Usage Table tuve que mapear el joystick con una tecla en cada botón, quedando de la siguiente manera:

te lo muestro


El resultado final:



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


Parte 4: Certificadas

control

convertir

usb

Sega


Links útiles:

Taringa no me deja publicar el post con los links de los códigos, si alguno los quiere mande MP y con gusto se los mando.

Código final: TARINGA! NO ME DEJA PONERLO
Firmware Teclado (para Arduino Mega 2560): TARINGA! NO ME DEJA PONERLO
Firmware Teclado (para Arduino Uno R3): TARINGA! NO ME DEJA PONERLO
USB HID Usage Tables: Click acá

Todos los los archivos de descarga son de mi propiedad y los comparto para su libre uso sin fines de lucro.

joystick

Como siempre, un gusto compartir conocimiento.
Espero que les haya sido instructivo, educativo y que les haya gustado el post.
¡No te vayas sin dejar tu comentario!

¡Saludos!
Datos archivados del Taringa! original
478puntos
3,803visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
13visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

L
LuxArts🇦🇷
Usuario
Puntos0
Posts14
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.