lunes, 21 de enero de 2013

Mudanza hormiga

Hola, ¿Cómo están? Espero que se la estén pasando muy bien.

En alguna entrada anterior comenté que pensaba pasar el contenido externo del blog a Dropbox. Mi intención era pasar directamente el contenido de la cuenta de 4shared a Dropbox y compartir los enlaces. Sin embargo tuve de nuevo una "brillante" idea, y decidí probar la última versión del adaptador de controles de Super Nintendo a USB utilizando el microcontrolador ATTINY25.

Antes de que se me olvide, acá esta el enlace al adaptador.

Para probar el adaptador tuve que armar el hardware de nueva cuenta, pues los prototipos existentes los he obsequiado entre algunos de mis amigos. Al revisar el código fuente se me ocurrieron una serie de optimizaciones y algunos arreglos.

El más importante de los cambios es la numeración de botones para que coincidan con la posición que tienen en los controles de Playstation 3. Además he cambiado la resolución de los ejes X-Y de 2 bits a 8 bits. Lo anterior con la idea de que sea reconocido correctamente por el Playstation 3. A pesar de lo que pueda parecer, no tengo un Playstation 3. Pero me ha surgido la inquietud de hacer los adaptadores lo más amigables posible con el Playstation 3 debido a que uno de mis amigos tiene uno, pero a falta de controles no hemos podido jugar excelentes juegos como The King of Fighters XIII en modo de dos jugadores. Además, hace unos meses tuve la encomienda de rehabilitar el panel de una máquina arcade para su uso en PC y Playstation 3.

Y pues bien, el rehabilitar ese panel fue una tarea más ardua de lo que calculé en primera instancia, pero que me ha dejado mucho aprendizaje.



Las fotos anteriores muestran el estado original del panel antes de llegar a mis manos. Las palancas son réplicas de las Happ Competition, que tienen una muy buena respuesta debido a que su actuador cuadrado permite presionar las diagonales sin mucho esfuerzo.

De hecho no sé en qué estaba pensando cuando acepté la encomienda, ya que por un mal entendido, pensé que sólo tendría que hacer un circuito que al conectarse a la interfaz JAMMA permitiera al panel funcionar en una PC o en el PS3. Los circuitos que permiten conectar los botones y palancas de un panel arcade a una computadora son muy utilizados en la actualidad, pues la gran mayoría de las máquinas multijuegos que se pueden encontrar en operación están basadas en PC. Estos circuitos se llaman coloquialmente pulsadores.


Esta es la foto de un pulsador diseñado para operar en un sistema arcade. La foto es cortesía de nuestro amigo Antonio de los Monteros. El diseño de este circuito está realizado de forma profesional (a diferencia de los prototipos que se hacen en este blog X_x). Se puede apreciar que emplea un microcontrolador AT90S2313, que es el antecesor del ATTINY2313. De hecho, en muchas ocasiones pueden emplearse de forma indistinta, pues sus características son similares. Además se emplean registros de corrimiento tipo CD4021, por lo que la captura de los botones se realiza de forma similar que al emplear un adaptador de controles de Super NES. El conector de la parte inferior de la foto es el receptáculo del cableado de los botones y las palancas. Dicho cableado debe ser compatible con el estándar JAMMA (Asociación de Fabricantes de Máquinas de Diversión de Japón), que establece la posición que deben guardar en el conector los distintos botones de un panel de arcade, con el objetivo de facilitar el mantenimiento y el intercambio de componentes.

Estos pulsadores no son caros, y de hecho son una muy buena alternativa para personas que planean armar una palanca casera tipo arcade con componentes de alta disponibilidad. Sólo hay que tener cuidado al seleccionar el tipo de pulsador, pues existe el pulsador USB (como el de la foto) y el pulsador de puerto paralelo que se alimenta a través de un cable USB, pero que no transmite datos a través del cable USB.

Pues bien, resultó que la encomienda en realidad constaba en hacer la restauración completa del panel y hacer que los controles fueren compatibles con un Playstation 3. Al tener el panel en mis manos caí en la cuenta de que me había metido en un problema de proporciones mayúsculas. El primer paso fue desmontar el panel por completo y limpiar todos los componentes para poder diagnosticar su estado real, ya que en ocasiones la suciedad provoca que las cosas se vean peor de lo que son en realidad.

Pues en esta ocasión no hubo suerte, el estado de los componentes del panel era bastante peor del que se aprecia en las fotos. De todos los microswitches sólo un par funcionaba bien, el resto tenían resistencia mayor a 100[kOhm]. La resistencia en los microswitches se debe a que se forma hollín en el contacto interno, debido a la chispa que se genera al abrir y cerrar el contacto de forma continua. Ese fenómeno también se presenta en los interruptores de pared que se emplean para encender y apagar las luces de una habitación. En condiciones normales no debe generarse chispa en el interior del botón, pues la chispa sólo se provoca cuando circula una cantidad considerable de corriente a través del contacto. Esto indica que el aparato al que estuvo conectado el panel tenía un error de diseño, pues en circuitos digitales de baja potencia la única forma de generar una chispa es a través de una falla de circuito corto.

Además de los microswitches, los botónes de plástico que venían con el panel mostraban los estragos del tiempo y el uso rudo. De todos los botones plásticos sólo se pudo rescatar un par de ellos. El problema que presentaron es el óxido formado en los resortes, lo que les resta flexibilidad y entorpece la respuesta de los botones. Por fortuna las palancas no se encontraban muy deterioradas, por lo que una limpieza bastó para dejarlas en condición operativa.

El panel constaba de dos mandos, cada uno con siete botones distribuidos en la configuración clásica de Capcom USA. Parte de la encomienda fue colocar tres botones extra a cada mando de tal forma que quedaran dos filas con cuatro botones, un botón correspondiente a START y un botón correspondiente a SELECT. Con diez botones en total por mando me resultaba imposible emplear un pulsador compatible con el estándar JAMMA, por lo que tuve que diseñar un circuito y modificar el cableado para soportar todos los botones.

Emplee el microcontrolador ATMEGA48 debido a que tiene más pines que el ATTINY2313, además de que es más barato. En este punto resultó una labor sumamente laboriosa la soldadura de cables en la interfaz adaptada. Además, por falta de planeación terminé empleando componentes innecesarios. Para leer el estado de los botones de un mando utilicé dos circuitos CD4021 conectados en cadena, mientras que los botones del segundo mando los conecté directamente a los pines libres del microcontrolador. Lo anterior fue uno de los planteamientos más ineficientes que pude haber utilizado, el único planteamiento más ineficiente es utilizar cuatro circuitos CD4021. Quizás usted, amable lector se estará preguntando a qué me refiero, si el uso de circuitos CD4021 (registros paralelo a serie) nos permite economizar pines en el microcontrolador, pues transforma ocho entradas en paralelo en dos salidas (la señal de reloj, el cerrojo) y una entrada (el tren de datos).

Si se llegan a conectar cuatro circuitos CD4021 en cadena, se puede obtener el estado de hasta 32 botones empleando sólo tres pines del microcontrolador. Pues bien, ese planteamiento es sumamente ineficiente desde el punto de vista económico. Utilizando 12 pines de un microcontrolador se puede obtener el estado de 36 botones, sin necesidad de utilizar circuitería adicional. Eso se logra empleando una técnica de multiplexado de entradas en el tiempo. Al diseñar el pulsador que utilizaría el panel se me olvidó esa técnica, la cual empleo con cierta regularidad en otros ámbitos.

Debido a que no cuento con una consola Playstation 3, tuve varios problemas en el desarrollo del firmware. Como punto de partida adapté parte del código del USB Retropad Adapter, que soporta la conexión con consolas Playstation 3. Lo anterior resultó una pésima idea, pues el día de entrega acordado no pude lograr que la PC reconociera el circuito USB. Resulta que el hacer controles USB compatibles en su totalidad con Playstation 3 requiere de varias consideraciones. La primera de ellas es que se utiliza un descriptor de dispositivo con una estructura específica. La segunda es que se tienen que enviar unos códigos especiales que habilitan funciones específicas para el control, por ejemplo, el botón PS. La tercera es que el reporte con el estado de los botones que se debe enviar a la consola es mucho mayor al tope de 8 bytes que permite el estándar USB para dispositivos HID de baja velocidad. Para colmo, al tomar estas consideraciones la PC tiene problemas al identificar el dispositivo.

En vista de lo ocurrido decidí mover el proyecto a un terreno conocido. Tomé la decisión de hacer el circuito compatible con PC, con la única consideración de mantener la asignación de botones igual a la utilizada en los controles de Playstation 3. Las pruebas en Windows y Linux fueron un éxito.


En esta foto se puede apreciar el panel en una etapa avanzada de trabajo. Al momento de tomar esta foto se le montaron los botones originales al panel. La cubierta está muy desgastada y tiene marcas de quemaduras, sin embargo le dan el aspecto característico de los paneles que se encuentran en la mayoría de los locales de máquinas arcade.


Aquí se muestra el panel montado en un cajón que fabriqué. Para esta foto monté muchos de los microswitches que venían con el panel, Tanto los botones como los microswitches fueron sustituidos después por piezas nuevas.

Pues bien, probé el panel en mi computadora con varios juegos y funcionó perfectamente. Se realizó la entrega del panel y justo cuando pensé que todo había salido bien, recibí la notificación de que en el Playstation 3 las palancas no respondían.

Como mencioné al principio de esta entrada, en mis adaptadores la resolución de los ejes X-Y es de 2 bits, mientras que el Playstation 3 requiere que la resolución sea de 8 bits. Ese detalle lo desconocía al momento de escribir el firmware.


En esta imagen muestro los ejes X-Y y el equivalente de cada dirección en ambas resoluciones. Debido a que en el panel de una máquina arcade las direcciones se registran gracias a la activación de un botón, no tiene sentido registrar el eje como un par de variables de 8 bits, pues con 2 bits basta para establecer las combinaciones que existen entre el centro, cada orilla y cada vértice del eje. Sin embargo, en el Playstation 3 el eje X-Y es controlado por una palanca analógica, por lo que requiere registrar todo el rango de valores de 8 bits.

Para solventar este detalle cambié la resolución de los ejes X-Y y probé el circuito en el Playstation 3 de mi amigo MagmaD. Constaté con agrado que ahora las direcciones eran registradas de forma adecuada por el Playstation 3 y que los botones fueron identificados al ser presionados. Procedí a entregar el circuito con el firmware actualizado y justo cuando pensé que todo había salido bien, recibí la notificación de que en algunos juegos las direcciones no eran reconocidas, pues existen juegos que sólo soportan ser controlados con la cruceta direccional y no con la palanca analógica.

En este punto, se pueden tomar tres soluciones. La primera es cambiar el firmware para que las palancas controlen el hat-switch (o como lo llaman en Windows, el control punto de mira) para que coincida con la función de la cruceta direccional en los controles de Playstation 3. Esto tiene el inconveniente de que muchos juegos de PC, Playstation 3  y emuladores no soportan el hat-switch de forma correcta, por lo que se pierde la habilidad de controlar a los personajes o la capacidad de presionar las direcciones diagonales.

La segunda es agregar un interruptor como los presentes en los fightpad y fightstick profesionales, que permiten cambiar el comportamiento de la palanca entre cruceta direcional y cualquiera de las palancas analógicas. Esta opción, a pesar de ser viable, requiere de muchas pruebas y de modificaciones sustanciales en el código del firmware, así como en el hardware.

La tercera es aceptar la limitante del panel, la cual es similar a la presente en el adaptador de controles de Super NES a Dreamcast. El control de Super NES no cuenta con palanca analógica, por lo que varios juegos no pueden ser controlados de forma plena. Algunos juegos como Tokyo Xtreme Racer 2, al detectar la ausencia de la palanca analógica no permiten que el juego sea iniciado.

El trabajar con este panel me ha dejado muchas enseñanzas. La primera es ser muy cuidadoso y asegurarse un banco de pruebas antes de emprender un proyecto en el cual se desconocen varios factores. Caí en el error de asumir que el circuito funcionaría en el Playstation 3 de la misma forma que funcionaba en mi computadora. También hay que ser cuidadoso y no subestimar la carga de trabajo que implica la labor manual, que en muchas ocasiones puede ser abrumadora. El diseño es una labor mental desgastante, sobretodo cuando el objeto que se diseña debe ajustarse a requerimientos desconocidos. Y la más importante, es saber interpretar las señales que nos muestra el destino. Al momento de aceptar la encomienda y en su proceso de desarrollo ocurrieron varias cosas que pudieron ser interpretadas como malos augurios. No soy supersticioso, pero en ocasiones conviene poner atención y reconocer que cuando las cosas se complican más allá de lo esperado es prudente prepararse, pues existe una alta probabilidad de que las cosas salgan mal.

Estamos en contact!

Seguimiento de trasteos.

Hola, ¿Cómo están? Bienvenidos sean de nueva cuenta a este nuestro blog, donde yo escribo los debrayes y ustedes abuchean mis malos chiste...