Sommario:

Jammarduino DUE - Interfaccia fai-da-te da PC a Jamma per armadi Arcade: 6 passaggi
Jammarduino DUE - Interfaccia fai-da-te da PC a Jamma per armadi Arcade: 6 passaggi

Video: Jammarduino DUE - Interfaccia fai-da-te da PC a Jamma per armadi Arcade: 6 passaggi

Video: Jammarduino DUE - Interfaccia fai-da-te da PC a Jamma per armadi Arcade: 6 passaggi
Video: Как запустить StepF2 в шкафу аркадного автомата Pump it Up — Pump it up 2024, Dicembre
Anonim
Jammarduino DUE - Interfaccia fai-da-te da PC a Jamma per armadi Arcade
Jammarduino DUE - Interfaccia fai-da-te da PC a Jamma per armadi Arcade

Questo tutorial ti mostrerà come creare un semplice shield per Arduino DUE per interfacciare una vera macchina arcade con CRT a bassa risoluzione e connettore jamma al tuo PC.

Gli scopi principali dello scudo sono:

- amplificare il segnale video in uscita dalla scheda video (tensione troppo bassa per un monitor CRT Arcade originale)

- per proteggere il monitor CRT a bassa risoluzione da segnali di sincronizzazione orizzontale ad alta frequenza

- per "tradurre" le pressioni dei pulsanti sul pannello di controllo arcade in qualcosa che il PC può gestire

Ti mostrerò come estendere l'uso dell'interfaccia per controllare le ruote e gli spinner di Arcade Racing.

Nota: lo shield NON forza il segnale di sincronizzazione video alle basse frequenze: hai bisogno di un software specifico per questo. Ti suggerisco di utilizzare emudrivers CRT o Soft15KHz.

Passaggio 1: hardware

Suppongo che tu abbia una stazione di saldatura e dello stagno a mano e tu sappia come usarli. Essendo l'amplificatore video un SMD con passo 0,65 mm, ti consiglio di acquistare del flusso di saldatura per aiutare a saldare quel microbo. Ho usato una penna economica "no-clean" Rosing Mildly Activated (RMA) con risultati eccellenti.

L'interfaccia è composta da:

- 1x scheda microcontrollore Arduino DUE

- 1x amplificatore video THS7374

- 1x adattatore da TSSOP14 a DIP14

- 1x amplificatore audio

- 1x tastiera jamma

- 1x tavola prototipo 5x7 cm, doppia faccia

- 1x diodo 1N4148

- 7 resistenze da 1Kohm

- 1x resistenza da 820 ohm

- 3 resistenze da 220 ohm

- 1x strip line, spaziatura 2,54 mm

- 1x cavo VGA

- 1x cavo audio

Fase 2: Schemi

Schematico
Schematico

Ecco uno schema a colori dell'intero progetto. Non così ortodosso, ma più facile da seguire, nelle mie speranze.

I cablaggi sono facili come sembrano:

- le linee di colore provengono dal connettore VGA del PC all'amplificatore video; un resistore da 1Kohm a terra abbassa la corrente all'ingresso dell'amplificatore video. Sul lato di uscita una resistenza in serie abbassa la corrente al CRT arcade.

- la linea di sincronizzazione è in qualche modo più "complessa": la sincronizzazione separata dalla VGA viene prima composta, quindi abbassata da un partitore di tensione per rispettare le specifiche Arduino DUE (logica 3.3V). Il partitore di tensione viene calcolato assumendo un segnale di sincronizzazione a 5V.

- l'amplificatore video (THS7374) può essere alimentato a 3,3V o 5V; essendo che l'alimentazione a 5 V consente una gamma più ampia di tensioni/segnali di ingresso ed essendo che THS7374 può essere controllato da 3,3 V anche se alimentato a 5 V, sono andato nel modo 5V.

- la massa video, la massa arduino DUE, la massa THS7374 e la massa del connettore jamma sono in cortocircuito.

- Le linee Arduino DUE 5V e Jamma 5V NON DEVONO ESSERE IN CORTO CIRCUITO.

- NON estrarre l'amplificatore audio dal cavo USB: è necessaria una sorgente esterna per questo a causa dei limiti di corrente (ad esempio l'alimentatore ATX del PC). In questo modo danneggerai la tua porta USB o persino il tuo PC.

Connettore VGA: una parola di cautela

Recentemente ho avuto modo di aggiornare il PC utilizzato con il mio jammarduino DUE. Anche se l'avevo già testato con due PC diversi, entrambi utilizzavano schede ATI della stessa famiglia (ATI 9250 e 9550). Il nuovo PC era dotato di un HD5750 con una singola uscita analogica DVI (no VGA). Questo mi ha costretto a utilizzare un adattatore (passivo) da DVI a VGA. Bene, dopo un po' di difficoltà ho notato che il cavo VGA collegato all'adattatore DEVE avere solo la massa collegata al pin 5 del connettore VGA per funzionare, non i pin da 6 a 10 come riportato nella maggior parte degli schemi sul web. Tienilo a mente nel caso in cui non riesci a vedere alcun segnale di sincronizzazione dalla tua scheda video.

Passaggio 3: schizzo/codice

Schizzo/Codice
Schizzo/Codice

Devi prima installare Arduino IDE; è necessario installare anche il SAM Cortex M3 Core (non presente di default). Ultimo ma non meno importante, installa i driver Arduino DUE. Fare riferimento al tutorial ufficiale "Introduzione ad Arduino Due" per le informazioni più aggiornate.

Lo schizzo che devi caricare sul tuo Arduino DUE è qui allegato. Decomprimi e carica "jammarduinoDUE.ino" sul tuo Arduino IDE, quindi carica su arduino DUE tramite la porta di "programmazione". Dopo che lo sketch è stato caricato con successo, scollegare il cavo USB dalla porta di "programmazione" e collegare Arduino DUE tramite la porta "Native USB", altrimenti la parte di input del codice non funzionerà.

Fondamentalmente, Arduino DUE misura la frequenza di sincronizzazione e disabilita l'amplificatore video quando la sincronizzazione è troppo alta per un CRT a bassa risoluzione. Arduino DUE gestisce anche gli input provenienti dal pannello di controllo, inviando i tasti MAME predefiniti alla pressione di un pulsante specifico. E' inclusa anche una funzione shift (attivabile tenendo premuto il tasto P1 START), come le interfacce commerciali.

Nella tabella la keymap predefinita. Puoi modificare facilmente la mappa dei tasti predefinita o aggiungere pulsanti a tuo piacimento direttamente sullo schizzo.

Ad esempio, se vuoi assegnare i tasti di controllo del volume per il tuo emulatore, dovresti prima definire quei tasti (diciamo il tastierino "+" per aumentare il volume e il tastierino "-" per abbassare il volume) nel menu dei tasti emu; quindi aggiungi il tasto shift ai pulsanti a cui vuoi assegnare l'aumento o la diminuzione del volume. Diciamo che voglio aumentare il volume premendo il tasto Maiusc e il pulsante Player 1 3. Modificherò la linea

{26, ALTO, 0, 180, 180}, //spazio - P1 B3

a

{26, ALTO, 0, 180, 223}, //spazio - P1 B3 (+)

Quel "223" è il codice carattere ASCII per la tastiera "+".

Ti farò capire come assegnare il "-" (o quello che preferisci) alla funzione "riduci volume" come esercizio (Suggerimento: codice ASCII 222):)

Tieni presente che in MAME puoi assegnare solo il volume della modalità di servizio, non il volume di emulazione generale; ciò significa che se la scheda emulata non consente il controllo del volume del software, il volume non verrà modificato.

Passaggio 4: che dire del ritardo di input?

Ho fatto alcuni test per vedere quanto lag potrebbe introdurre il codice; bene, inviando 3 pulsanti premuti contemporaneamente, un ciclo completo impiega circa 4 ms per essere eseguito, quindi molto meno dei 33 ms che un frame dura a 30 FPS.

Passaggio 5: che dire degli armadietti Jamma Racing?

Che dire degli armadi Jamma Racing?
Che dire degli armadi Jamma Racing?

Potenziometro Ruota

Se il tuo cabinet è un cabinet da corsa, è molto probabile che il volante sia basato su un potenziometro (puoi vedere un potenziometro da 5Kohm nella parte posteriore del pannello di controllo).

Per prima cosa, scarica e installa la libreria Joystick (alla data odierna si dice che solo la versione 1 della libreria sia compatibile con arduino DUE, ma è comunque un'ottima libreria).

Quindi, aggiungi le poche linee che seguono allo schizzo nel passaggio 4 per maneggiare facilmente la ruota (dove posizionare le linee è lasciato a te come esercizio…)

#includere

int deadZone = 0;

void setup() {

Joystick.begin();}

ciclo vuoto() {

int readPot = analogRead(A3);

int wheelPos = map(readPot, 0, 1023, -127, 127);

if(wheelPos>deadZone || wheelPos<-deadZone){ Joystick.setXAxis(wheelPos);}

else {Joystick.setXAxis(0);}

}

Come puoi vedere, puoi impostare una zona morta se necessario (in un buon volante arcade funzionante è meglio impostarlo a zero).

Il cablaggio di un potenziometro ad Arduino DUE è semplice: i pin laterali del potenziometro vanno a +3,3 V e GND, il pin del tergicristallo a una porta analogica arduino DUE (vedi l'immagine per riferimento). Ho definito qui il pin analogico 3 (A3) come ingresso per il tergicristallo del potenziometro ruota, ma puoi impostare il pin analogico più adatto alle tue esigenze.

PS: lo sai che i pedali nei cabinati da corsa sono spesso controllati da un potenziometro, che tecnicamente ruote e pedali sono lo stesso dispositivo con una forma diversa? Ciò significa che il codice qui potrebbe essere utilizzato anche per controllare i pedali arcade originali;)

Ruota ottica

Se la tua ruota è ottica, può essere facilmente gestita anche in questo caso, con una piccola modifica allo schizzo iniziale.

Un pinout molto comune per gli encoder ottici Arcade (spinner Taito, encoder per ruote Atari e così via) è:

1. Uscita OptoA

2. +5V

3. GND

4. Uscita OptoB

Collega 2. e 3. ad Arduino DUE 5V e GND e 1. e 4. a qualsiasi pin digitale che ti piace prestando attenzione che è necessario un partitore di tensione per abbassare l'uscita 5V dall'encoder ottico all'arduino DUE da 3,3 V in grado di gestire. Non inviare le uscite OptoA e/o OptoB 5V direttamente ai pin di ingresso del tuo arduino DUE o probabilmente friggerai quegli ingressi o addirittura l'intera scheda. Sei stato avvertito.

Nello schizzo di esempio qui userò il pin digitale 2 e il pin digitale 3 come uscita ottica A e uscita ottica B.

#includere

booleano optA_state = HIGH;

int xAxisMov = 2;

void setup() {

pinMode (2, INPUT_PULLUP); //OptA

pinMode (3, INPUT_PULLUP); //OptB

Mouse.begin();

}

ciclo vuoto() {

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);} } }//fine ciclo

Questa è una codifica ottica di conteggio 1X a bassa risoluzione. È più che sufficiente per le applicazioni Arcade, ma puoi aumentare facilmente la risoluzione aggiungendo qualche riga di codice.

PS: lo sai che le ruote ottici arcade e gli spinner arcade sono tecnicamente lo stesso dispositivo con una forma diversa? Sai che le trackball sono tecnicamente uno spinner a 2 assi? Ciò significa che il codice qui potrebbe essere utilizzato per controllare i veri spinner arcade e, con poche, facili modifiche anche le trackball;)

Passaggio 6: qualche foto o non è successo

Qualche foto, o non è successo!
Qualche foto, o non è successo!
Qualche foto, o non è successo!
Qualche foto, o non è successo!
Qualche foto, o non è successo!
Qualche foto, o non è successo!
Qualche foto, o non è successo!
Qualche foto, o non è successo!

Ecco alcune immagini dello scudo che ho realizzato. Non è un lavoro di alto livello (scommetto che non sono un professionista), ma è rock al 100% nel mio Jamma Arcade Cabinet!

Consigliato: