Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Este instructivo le mostrará cómo crear un escudo simple para Arduino DUE para conectar una máquina arcade genuina con CRT de baja resolución y conector jamma a su PC.
Los principales propósitos del escudo son:
- para amplificar la señal de video que sale de la tarjeta de video (voltaje demasiado bajo para un monitor Arcade CRT genuino)
- para proteger su monitor CRT de baja resolución de señales de sincronización horizontal de frecuencia demasiado alta
- para "traducir" las pulsaciones del botón en el panel de control de la sala de juegos a algo que la PC pueda manejar
Le mostraré cómo extender el uso de la interfaz para controlar las ruedas y los spinners de Arcade Racing.
Aviso: el escudo NO fuerza la señal de sincronización de video a bajas frecuencias: necesita algún software específico para eso. Le sugiero que utilice emudrivers CRT o Soft15KHz.
Paso 1: hardware
Asumiré que tiene una estación de soldadura y un poco de estaño a mano y que sabe cómo usarlos. Dado que el amplificador de video es un SMD con un paso de 0,65 mm, le sugiero que compre un poco de flujo de soldadura para ayudar a soldar ese microbio. Utilicé un bolígrafo Rosing Mildly Activated (RMA) barato "no limpio" con excelentes resultados.
La interfaz está compuesta por:
- 1x placa de microcontrolador Arduino DUE
- 1x amplificador de video THS7374
- 1x adaptador TSSOP14 a DIP14
- 1x amplificador de audio
- 1x diapasón de jamma
- 1x tablero prototipo de 5x7 cm, doble cara
- 1x diodo 1N4148
- 7 resistencias de 1Kohm
- 1x resistencia de 820 ohmios
- 3 resistencias de 220 ohmios
- 1x línea de tira, espaciado de 2,54 mm
- 1x cable VGA
- 1x cable de audio
Paso 2: esquemas
Aquí hay un esquema de colores del proyecto completo. No tan ortodoxo, pero más fácil de seguir, en mis esperanzas.
El cableado es tan fácil como parece:
- las líneas de color provienen del conector VGA de la PC al amplificador de video; una resistencia de 1Kohm a tierra reduce la corriente a la entrada del amplificador de video. En el lado de salida, una resistencia en serie reduce la corriente al CRT de arcade.
- La línea de sincronización es de alguna manera más "compleja": la sincronización separada del VGA se hace compuesta, primero, luego se reduce mediante un divisor de voltaje para respetar las especificaciones de Arduino DUE (lógica de 3.3V). El divisor de voltaje se calcula asumiendo una señal de sincronización de 5V.
- El amplificador de video (THS7374) se puede alimentar a 3.3V o 5V; Dado que la alimentación a 5 V permite una gama más amplia de voltajes / señales de entrada y que el THS7374 se puede controlar con 3,3 V incluso si se utiliza a 5 V, fui por el camino de 5 V.
- La tierra del video, la tierra DUE de arduino, la tierra THS7374 y la tierra del conector Jamma están en cortocircuito.
- Las líneas Arduino DUE 5V y Jamma 5V NO DEBEN SER CORTOCIRCUITADAS.
- NO exprima el amplificador de audio del cable USB: necesita una fuente externa para eso debido a los límites de corriente (es decir, la PC ATX PSU). Si lo hace, dañará su puerto USB o incluso su PC.
Conector VGA: una advertencia
Recientemente tuve la oportunidad de actualizar la PC utilizada con mi jammarduino DUE. Incluso si lo había probado con dos PC diferentes antes, ambos usaban tarjetas ATI de la misma familia (ATI 9250 y 9550). La nueva PC estaba equipada con un HD5750 con una única salida analógica DVI (sin VGA). Esto me obligó a utilizar un adaptador DVI a VGA (pasivo). Bueno, después de algunos problemas, noté que el cable VGA conectado al adaptador DEBE tener solo la tierra conectada al pin 5 del conector VGA para funcionar, no los pines del 6 al 10 como se informa en la mayoría de los esquemas en la web. Tenga esto en cuenta en caso de que no pueda ver ninguna señal de sincronización en su tarjeta de video.
Paso 3: Boceto / Código
Primero debe instalar Arduino IDE; también debe instalar SAM Cortex M3 Core (no está presente de forma predeterminada). Por último, pero no menos importante, instale los controladores Arduino DUE. Consulte el tutorial oficial "Introducción a Arduino Due" para obtener la información más actualizada.
Aquí se adjunta el boceto que necesita cargar en su Arduino DUE. Descomprima y cargue "jammarduinoDUE.ino" en su IDE de Arduino, luego cárguelo en arduino DUE a través del puerto de "programación". Una vez que el boceto se haya cargado con éxito, desconecte el cable USB del puerto de "programación" y conecte Arduino DUE a través del puerto "Native USB", o la parte de entrada del código no funcionará.
Básicamente, Arduino DUE mide la frecuencia de sincronización y desactiva el amplificador de video cuando la sincronización es demasiado alta para un CRT de baja resolución. Arduino DUE también maneja las entradas provenientes del panel de control, enviando teclas MAME predeterminadas al presionar un botón específico. También se incluye una función de cambio (que se activa manteniendo pulsado el botón P1 START), como interfaces comerciales.
En la tabla, el mapa de teclas predeterminado. Puede cambiar el mapa de teclas predeterminado o agregar botones a su gusto directamente en el boceto fácilmente.
Por ejemplo, si desea asignar teclas de control de volumen para su emulador, debe definir esas teclas (digamos teclado "+" para subir el volumen y teclado "-" para bajar el volumen) en el menú de teclas del emu, primero; luego agregue la tecla de mayúsculas a los botones a los que desea asignar el aumento o disminución de volumen. Digamos que quiero aumentar el volumen presionando la tecla shift y el botón Player 1 3. Modificaré la línea
{26, HIGH, 0, 180, 180}, // espacio - P1 B3
para
{26, HIGH, 0, 180, 223}, // espacio - P1 B3 (+)
Ese "223" es el código de caracteres ASCII para el teclado "+".
Te dejaré descubrir cómo asignar el "-" (o lo que prefieras) a la función "bajar volumen" como ejercicio (Pista: código ASCII 222):)
Tenga en cuenta que en MAME solo puede asignar el volumen del modo de servicio, no el volumen de emulación general; esto significa que si la placa emulada no permite el control de volumen por software, el volumen no se verá afectado.
Paso 4: ¿Qué pasa con el retraso de entrada?
Hice algunas pruebas para ver cuánto retraso podía introducir el código; bueno, al enviar 3 botones presionar al mismo tiempo, un bucle completo tarda unos 4 ms en ejecutarse, mucho menos de los 33 ms que dura un cuadro a 30 FPS.
Paso 5: ¿Qué pasa con los gabinetes Jamma Racing?
Rueda de potenciómetro
Si su gabinete es un gabinete de carreras, es muy probable que la rueda esté basada en un potenciómetro (puede ver un potenciómetro de 5Kohm en la parte posterior del panel de control).
Lo primero es lo primero, descargue e instale la biblioteca de Joystick (a la fecha de hoy solo se dice que la versión 1 de la biblioteca es compatible con arduino DUE, pero sigue siendo una muy buena biblioteca).
Luego, agregue las pocas líneas que siguen al boceto en el Paso 4 para manejar la rueda fácilmente (dónde colocar las líneas se le deja como ejercicio …)
#incluir
int deadZone = 0;
configuración vacía () {
Joystick.begin ();}
bucle vacío () {
int readPot = analogRead (A3);
int wheelPos = map (readPot, 0, 1023, -127, 127);
if (wheelPos> deadZone || wheelPos <-deadZone) {Joystick.setXAxis (wheelPos);}
más {Joystick.setXAxis (0);}
}
Como puede ver, puede establecer una zona muerta si es necesario (en una rueda arcade que funcione bien, es mejor establecerla en cero).
El cableado de un potenciómetro a Arduino DUE es sencillo: los pines laterales del potenciómetro van a + 3.3V y GND, el pin del limpiador a un puerto analógico arduino DUE (vea la imagen como referencia). Aquí definí el pin analógico 3 (A3) como la entrada para el limpiaparabrisas del potenciómetro de la rueda, pero puedes configurar el pin analógico que mejor se adapte a tus necesidades.
PD: ¿sabes que los pedales en los gabinetes de carreras a menudo se controlan con un potenciómetro, que técnicamente las ruedas y los pedales son el mismo dispositivo con una forma diferente? Esto significa que el código aquí también podría usarse para controlar pedales arcade genuinos;)
Rueda óptica
Si su rueda es óptica, también puede manipularse fácilmente, nuevamente, con una pequeña modificación en el boceto inicial.
Un pinout muy común para codificadores Arcade ópticos (giradores Taito, codificadores de ruedas Atari, etc.) es:
1. OptoA OUT
2. + 5V
3. GND
4. OptoB OUT
Conecte 2. y 3. a Arduino DUE 5V y GND, y 1. y 4. a cualquier pin digital que le guste, prestando atención a que es necesario un divisor de voltaje para bajar la salida de 5V del codificador óptico al 3.3V que puede manejar arduino DUE. No envíe salidas OptoA y / o OptoB 5V directamente a sus pines de entrada arduino DUE o probablemente freirá esas entradas o incluso toda la placa. Usted ha sido advertido.
En el boceto de ejemplo aquí, usaré el pin digital 2 y el pin digital 3 como salida óptica A y salida óptica B.
#incluir
booleano optA_state = HIGH;
int xAxisMov = 2;
configuración vacía () {
pinMode (2, INPUT_PULLUP); // OptA
pinMode (3, INPUT_PULLUP); // OptB
Mouse.begin ();
}
bucle vacío () {
if (optA_state == HIGH && digitalRead (2) == LOW) {
optA_state =! optA_state;
if (digitalRead (3) == HIGH) {Mouse.move (xAxisMov, 0, 0);} else {Mouse.move (-xAxisMov, 0, 0);}}} // fin del ciclo
Esta es una codificación óptica de conteo 1X de baja resolución. Es más que suficiente para las aplicaciones Arcade, pero puede aumentar la resolución fácilmente agregando alguna línea de código.
PD: ¿Sabes que las ruedas de arcade ópticas y los spinners de arcade son técnicamente el mismo dispositivo con una forma diferente? ¿Sabes que las trackballs son técnicamente un spinner de 2 ejes? Esto significa que el código aquí podría usarse para controlar los hilanderos de arcade genuinos y, con pocas modificaciones, también los trackballs;)
Paso 6: ¡Alguna foto, o no sucedió
Aquí hay algunas fotos del escudo que hice. No es un trabajo de alto nivel (apuesto a que no soy un profesional), ¡pero es 100% rockero en mi Jamma Arcade Cabinet!