[worklog] Convirtiendo control cableado en inalámbrico.

Introducción:

Preso de mis responsabilidades como ciudadano (trabajar, pagar impuestos, trabajar y volver trabajar) llevo un buen tiempo sin dedicarme la electrónica (a pesar de que es mi profesión, desde hace algunos años mi trabajo fue mutando hasta que ahora me dedico 100% a la programación web, y ya la electrónica solo me queda como hobby T.T ). Como ya tengo experiencia en microcontroladores PIC, ahora me surgió la curiosidad por aprender a usar otros dispositivos embebidos, como arduino, stm32, raspberry pi, etc. Qué mejor que combinar dos de mis hobbies, la electrónica y las consolas?

La verdad es que tengo varios mods en mente (algún cutre mod para scanlines por vga, emulador del chip de bios para en su lugar poner una SD, etc). Pero como soy un novato en el hardware de la DC, voy a comenzar por el que pienso es el mas sencillo.

Viendo la controversia que ha causado el "Dreamconn", me he decidido a trabajar en un mod para convertir los controles de Dreamcast en inalámbricos.

Como el principal elemento de discordia con el citado mod es su precio, será un elemento muy a tener en cuenta (me gustaría apuntar a un costo final inferior a 15 usd para la versión básica). También intentaré que el resultado use componentes que sean fáciles de conseguir y que esté asegurado el stock, y que sea fácil de instalar

Intentaré avanzar lo más rápido posible, aunque el tiempo no es que me sobre precisamente.

Pasos a seguir:

1 - (100%) Estudiar y comprender el protocolo de comunicación del bus maple usado en la Dreamcast.
2 - (drop) Leer los datos reales con que se comunica el control y la consola e identificar los elementos importates.
3 A - (reemplazado) Pinchar los cables del control y hacer un programa que permita detectar la pulsación de botones y reaccionar. (por ejemplo, encender un led distinto para cada botón que presione, o esplegar la data en un terminal).
3 B - (en curso) Crear un adaptador de control de dreamcast a PC.
4 - (completado) Crear un control artificial, que me permita escribir datos en el bus maple y hacer pasar a mi uC/programa como un control real de DC.
5 - (completado) Poner mi "intérprete" y "control artifiial" entre el control y la consola, conectar ambos usando un protocolo de comunicación serial estándar, UART o SPI.
6 - (pendiente) Cambiar la comunicación que hay entre el transmisor y receptor para que use un par de módulos inalámbricos por determinar.
7 - (pendiente) Reducir el hardware innecesario y/o migrar a otro mas económico. (. Puedo adelantar que partiré con un hardware económico pero con potencia de sobra como son los STM32F1, y luego intentaré hacer que funcione con hardware mas modesto, como los arduinos).

Objetivos adicionales:

Los pasos mencionados anteriormente incluyen solo cominucación para el control sin considerar periféricos (rumble pack, vmu, etc). Dependiendo de como resulte la primera implementación, se podría agregar soporte para la comunicación bidireccional, para hacer uso de los accesorios mas comunes.

Esto ya podría disparar el costo, pero viendo las características adicionales del dreamconn, me parece interesante la idea de que el dispositivo que irá en el control pueda emular a una tarjeta de memoria para salvar las partidas. Ya imagino si me voy de viaje, poder retirar fácilmente el savegame desde una tarjeta SD en mi control y continuar jugando en emulador.

Actualizaciones:

11-09-2015: comienzo del proyecto, búsqueda de webs con información técnica relevante.
12-09-2015: estudiando el protocolo de comunicación, de momento ya entiendo como va la lógica que permite a al bus maple transferir el doble de información intercambiando los pines de datos y de clock por cada bit transmitido. Los que diseñaron el hardware son unos traviesos.
13-09-2015: Habiendo leído y apuntado todo lo necesario, ya tengo el setup listo para empezar a programar. Lo bueno es que pude comprobar que el analizador lógico de los chinos (5 usd) servirá sin problemas.
15-09-2015: Intenté hacer lecturas pinchando el analizador a los cables que conectan el control con la consola, pero usando ese método no tengo manera de saber en que dirección fluyen los datos (consola a control o control a consola) y cuadrarlos de inmediato

Fuentes y agradecimientos:

Gracias a Marcus Comstedt por toda la información compartida en su web http://mc.pp.se/dc/, de lo contrario esto tardaría siglos. Si bien falta alguna que otra información (por ejemplo, no especifíca como son los los cambios entre consulta y respuesta), la descripción de la lógica y funciones del bus maple es invaluable.

Cualquier comentario es bienvenido, saludos a todos.
Me parece muy interesante este tema y se ve que controlas de esto. A la espera de avances.

Saludos.
Ayer preparé todo lo correspondiente al hardware para el desarrollo (cortar cables, soldar conectores y esas cosas).

Fue triste comprobar que luego de estar guardados por mucho tiempo, 2 de mis 3 controles han muerto. Los dos en el análogo, donde el sulfato ha hecho que se traben y que manten señales falsas aún sin moverlos. Uno de ellos además tiene dañada la parte metálica que hace el contacto con el grafito en el gatillo derecho. Creo que tendré que segurarme de comprar un par extra antes de que se vuelvan escazos, aún estoy a tiempo de comprarlos a precio decente.

Lo bueno es que de la manera en que estoy abordando el proyecto, no se trata solo de tomar el estado de los cables y mandarlos por aire, sino de intervenir directamente a nivel de protocolo, por lo cual posteriormente sería sencillo hacer algunas modificaciones para crear nuestros propios periféricos sin depender de un control propiamente tal. Bienvenidos sean los arcade sticks, tapetes de baile, incluso creo que se podría llegar a poner un micro con usb host para hacerlo compatible con cualquier control usb que implemente el perfil HID. Teclado y ratón también es una posibilidad.
Ánimo crack! Es lo único que te puedo decir ahora ;)
3 respuestas