MSXVR Documentación técnica - Uso de los puertos DB9

Post Reply
Archer
Posts: 6
Joined: Mon Oct 04, 2021 8:42 am
Has thanked: 2 times
Been thanked: 16 times

MSXVR Documentación técnica - Uso de los puertos DB9

Post by Archer »


Disclaimer: No me hago responsable de cualquier daño producido al MSXVR o cualquier periférico o accesorio conectado al mismo por una mala utilización de esta documentación.

Me gustaría usar una distribución de linux en el MSXVR pero lamentablemente el hardware del que dispone no funciona fuera del ecosistema VR, así que he intentado investigar como funciona internamente y en esta serie intentaré explicar lo que he ido descubriendo por si alguien quiere usar el hardware del MSXVR. En este hilo o "Capítulo uno" nos centraremos en utilizar los puertos de joystick DB9.

El MSXVR tiene una línea de comunicación serie i2c conectada a los GPIO2(SDA) y GPIO3(SCL) de la Raspberry PI, esta línea se utiliza para los puertos DB9 entre otras cosas que ya veremos en próximos capítulos. En este caso utiliza el integrado MCP23017-E/SO que es un expansor con 16 entradas/salidas de proposito general divididas en 2 puertos de 8 GPIOs cada uno.

En la siguiente imagen podemos ver como están conectados los puertos de joystick al expansor.


Captura de pantalla 2022-03-09 a las 15.35.37.png

Para poder comunicarnos con este integrado necesitamos su dirección dentro de la linea i2c que en este caso es 0x20. El MSXVR lo que hace al arrancar es configurar este expansor para poder utilizarlo como entrada de joysticks.

- Configurando el expansor.

Primero desactivamos el modo secuencial para evitar el incremento automático del puntero de dirección. Para hacer esto escribimos en el registro 0x0A (IOCON) el valor 0x20, esto activa el bit 5 del registro desactivando así el modo secuencial.

Luego configuramos la dirección de los pines de los dos puertos, para ello utilizamos el registro 0x00 (IODIRA) y 0x01 (IODIRB) para el puerto A y puerto B respectivamente. En esos registros escribiremos el valor 0x3F (b00111111) dejando asi los pines del 0 al 5 como entrada (1=entrada) y los pines 6 y 7 como salida (0=salida).

Por último activamos las resistencias pull-up internas en los pines de entrada, utilizamos para ello los registros 0x0C (GPPUA) y 0x0D (GPPUB). Escribimos el valor 0x3F (b00111111) en los dos registros.

Y ya estaría el expansor configurado para recibir el estado de los puertos de joystick, a continuación dejo un resumen de los comandos de configuración:

write to 0x20 data: 0x0A 0x20 IOCON 0010 0000 Desactiva modo secuencial
write to 0x20 data: 0x00 0x3F IODIRA 0011 1111 Configura los pines del puerto A (0=Output 1=Input)
write to 0x20 data: 0x01 0x3F IODIRB 0011 1111 Configura los pines del puerto B (0=Output 1=Input)
write to 0x20 data: 0x0C 0x3F GPPUA 0011 1111 Configura resistencia pull-up en puerto A
write to 0x20 data: 0x0D 0x3F GPPUB 0011 1111 Configura resistencia pull-up en puerto B


- Leyendo el estado de un puerto.

Leemos el registro 0x12 del dispositivo 0x20 y nos devuelve 1 byte... este byte se interpreta de la siguiente manera:

bit 0 - UP
bit 1 - DOWN
bit 2 - LEFT
bit 3 - RIGHT
bit 4 - TRG1
bit 5 - TRG2


y para leer el estado del puerto B sería exactamente igual pero leyendo el registro 0x13.


Añado un ejemplo en python para poder usar los DB9 por ejemplo para hacer un juego con pygame.

db9_1.1.zip
(988 Bytes) Downloaded 18 times

Un saludo y hasta el próximo capitulo de la serie.

[/font]
Last edited by Archer on Tue Apr 12, 2022 5:21 pm, edited 4 times in total.
Antxiko
Posts: 4
Joined: Mon Oct 04, 2021 8:25 am
Has thanked: 2 times
Been thanked: 1 time

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by Antxiko »

Muchas gracias!!!!
Apolonius
Posts: 7
Joined: Mon Oct 04, 2021 8:17 am
Has thanked: 3 times

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by Apolonius »

Qué interesante, muchas gracias!
User avatar
droman
Posts: 263
Joined: Mon Oct 04, 2021 9:09 am
Location: Leganés (Madrid)
Has thanked: 35 times
Been thanked: 80 times

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by droman »

Seguiremos la serie....
La muerte, segura de su victoria nos da toda la vida de ventaja.
Las fotografías de los que viajan, son la cultura de los que se quedan.
htdreams
Posts: 12
Joined: Wed Feb 16, 2022 1:59 am
Been thanked: 6 times

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by htdreams »

La librería que ha subido Archer funciona perfectamente, aquí podéis ver una versión previa con PyGame :-)

Desmond
Posts: 26
Joined: Mon Oct 04, 2021 7:54 pm
Been thanked: 2 times

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by Desmond »

Mola mucho

Enviado desde mi M2002J9G mediante Tapatalk

x1pepe
Posts: 26
Joined: Mon Oct 04, 2021 8:07 am
Has thanked: 11 times
Been thanked: 23 times

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by x1pepe »

Interesante aporte!
(Syd Vicius en moto)

Lástima que sea un penco programando XD.
Apolonius
Posts: 7
Joined: Mon Oct 04, 2021 8:17 am
Has thanked: 3 times

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by Apolonius »

x1pepe wrote: Thu Mar 10, 2022 10:25 am Interesante aporte!
(Syd Vicius en moto)

Lástima que sea un penco programando XD.
Syd Vicius era punkarra, tú tocas el contrabajo, algo ahí no cuadra.
KunPax
Posts: 24
Joined: Fri Nov 19, 2021 3:14 pm

Re: MSXVR Documentación técnica- Uso de los puertos DB9

Post by KunPax »

Tengo el mismo PAD :D
Post Reply