Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Această instrucțiune vă va arăta cum să creați un scut simplu pentru Arduino DUE pentru a interfața o mașină arcade autentică cu conector CRT cu rezoluție mică și conector jamma la computer.
Scopurile principale ale scutului sunt:
- pentru a amplifica semnalul video care iese de pe placa video (tensiune prea mică pentru un monitor ArcT CRT original)
- pentru a vă proteja monitorul CRT cu rezoluție scăzută de semnalele de sincronizare orizontală cu frecvență prea mare
- pentru a „traduce” apăsarea butonului de pe panoul de control arcade la ceva ce poate face PC-ul
Vă voi arăta cum să extindeți utilizarea interfeței pentru a controla roțile și filatoarele Arcade Racing.
Observație: ecranul NU forțează semnalul de sincronizare video la frecvențe joase: aveți nevoie de un anumit software pentru asta. Vă sugerez să utilizați emudrivers CRT sau Soft15KHz.
Pasul 1: Hardware
Voi presupune că aveți o stație de lipit și puțină tablă manual și știți cum să le folosiți. Fiind faptul că amplificatorul video este un SMD cu pas de 0,65 mm, vă sugerez să achiziționați un flux de lipire pentru a ajuta la lipirea acelui microb. Am folosit un pix ieftin „fără curățenie” Rosing Mildly Activated (RMA) cu rezultate excelente.
Interfața este alcătuită din:
- 1x placa de microcontroler Arduino DUE
- 1x amplificator video THS7374
- 1x adaptor TSSOP14 la DIP14
- 1x amplificator audio
- 1x tastatură jamma
- Placă prototip 1x 5x7 cm, dublă
- 1x diodă 1N4148
- Rezistențe 7x 1Kohm
- rezistor 1x 820 ohm
- rezistor 3x 220 ohm
- 1 linie de benzi, distanță de 2,54 mm
- 1x cablu VGA
- 1x cablu audio
Pasul 2: Scheme
Iată o schemă colorată a proiectului integral. Nu atât de ortodox, dar mai ușor de urmărit, în speranța mea.
Cablurile sunt la fel de ușoare pe cât arată:
- liniile de culoare provin de la conectorul PC VGA la amplificatorul video; un rezistor de 1 Kohm la masă scade curentul la intrarea amplificatorului video. Pe partea de ieșire, o rezistență de serie reduce curentul la arcada CRT.
- linia de sincronizare este cumva mai „complexă”: sincronizarea separată de VGA este făcută compusă, mai întâi, apoi coborâtă de un divizor de tensiune pentru a respecta specificațiile Arduino DUE (logică de 3,3V). Divizorul de tensiune este calculat presupunând un semnal de sincronizare de 5V.
- amplificatorul video (THS7374) ar putea fi alimentat la 3,3V sau 5V; fiind faptul că alimentarea la 5V permite o gamă mai largă de tensiuni / semnale de intrare și fiind că THS7374 poate fi controlat de 3,3V chiar dacă este alimentat la 5V, am mers pe calea de 5V.
- masă video, masă arduino DUE, masă THS7374 și masă conector jamma sunt scurtcircuitate.
- Liniile Arduino DUE 5V și Jamma 5V NU TREBUIE CIRCUITE CURTE.
- NU extrageți amplificatorul audio de pe cablul USB: aveți nevoie de o sursă externă pentru asta din cauza limitelor de curent (adică alimentatorul PC ATX). În acest fel, vă veți deteriora portul USB sau chiar computerul.
Conector VGA: un cuvânt de precauție
Recent am avut ocazia să actualizez computerul folosit cu jammarduino DUE. Chiar dacă l-am mai testat cu două PC-uri diferite, amândoi au folosit carduri ATI din aceeași familie (ATI 9250 și 9550). Noul PC a fost echipat cu un HD5750 cu o singură ieșire analogică DVI (fără VGA). Acest lucru m-a forțat să folosesc un adaptor (pasiv) DVI la VGA. Ei bine, după unele lupte, am observat că cablul VGA conectat la adaptor TREBUIE să aibă doar pământul conectat la pinul 5 al conectorului VGA pentru a funcționa, nu pinii de la 6 la 10, așa cum este raportat în majoritatea schemelor de pe web. Rețineți acest lucru în cazul în care nu puteți vedea niciun semnal de sincronizare din placa video.
Pasul 3: schiță / cod
Mai întâi trebuie să instalați Arduino IDE; trebuie să instalați și SAM Cortex M3 Core (nu este prezent în mod implicit). Nu în ultimul rând, instalați driverele Arduino DUE. Consultați tutorialul oficial „Noțiuni introductive despre Arduino Due” pentru cele mai multe informații actualizate.
Schița pe care trebuie să o încărcați pe Arduino DUE este aici atașată. Dezarhivați și încărcați „jammarduinoDUE.ino” în ID-ul dvs. Arduino, apoi încărcați-l în arduino DUE prin portul „programare”. După ce schița a fost încărcată cu succes, deconectați cablul USB de la portul de „programare” și conectați Arduino DUE prin portul „Native USB”, altfel partea de intrare a codului nu va funcționa.
Practic, Arduino DUE măsoară frecvența de sincronizare și dezactivează amplificatorul video atunci când sincronizarea este prea mare pentru un CRT cu rezoluție mică. Arduino DUE gestionează și intrările care vin de la panoul de control, trimitând tastele MAME implicite la apăsarea anumitor butoane. O funcție de schimbare (activată prin menținerea apăsată a butonului P1 START) este de asemenea inclusă, precum interfețele comerciale.
În tabel, harta de taste implicită. Puteți schimba cu ușurință harta tastelor implicită sau puteți adăuga butoane direct după schiță.
De exemplu, dacă doriți să atribuiți taste de control al volumului pentru emulatorul dvs., ar trebui să definiți acele taste (să zicem tastatura „+” pentru creșterea volumului și tastatura „-„ pentru reducerea volumului) în meniul tastelor emu, mai întâi; apoi adăugați tasta deplasată la butoanele la care doriți să fie atribuită creșterea sau scăderea volumului. Să spunem că vreau să măresc volumul apăsând tasta Shift și butonul Player 1 3. Voi modifica linia
{26, HIGH, 0, 180, 180}, // spațiu - P1 B3
la
{26, HIGH, 0, 180, 223}, // spațiu - P1 B3 (+)
Acel „223” este codul de caractere ASCII pentru tastatura „+”.
Vă voi lăsa să vă dați seama cum să atribuiți "-" (sau orice preferați) funcției de "reducere a volumului" ca exercițiu (Sugestie: cod ASCII 222):)
Rețineți că în MAME puteți atribui doar volumul modului de serviciu, nu volumul general al emulației; aceasta înseamnă că, dacă placa emulată nu permite controlul volumului software-ului, volumul nu va fi afectat.
Pasul 4: Cum rămâne cu Input Lag?
Am făcut câteva teste pentru a vedea cât de mult întârziere ar putea introduce codul; Ei bine, prin trimiterea a 3 butoane apăsați în același timp, o buclă completă durează aproximativ 4 ms pentru a fi executată, cu atât mai puțin decât cei 33 ms ai unui cadru la 30 FPS.
Pasul 5: Ce zici de dulapurile Jamma Racing?
Roata potențiometrului
Dacă dulapul dvs. este un dulap de curse, este foarte probabil ca roata să fie bazată pe potențiometru (puteți vedea un potențiometru de 5 Kohm în partea din spate a panoului de control).
În primul rând, descărcați și instalați biblioteca Joystick (la data de astăzi se spune că doar versiunea 1 a bibliotecii este compatibilă cu arduino DUE, dar este încă o bibliotecă foarte bună).
Apoi, adăugați câteva schițe care urmează la schița din Pasul 4 pentru a manipula cu ușurință roata (unde să plasați liniile vă sunt lăsate ca exercițiu …)
#include
int deadZone = 0;
configurare nulă () {
Joystick.begin ();}
bucla nulă () {
int readPot = analogRead (A3);
int wheelPos = hartă (readPot, 0, 1023, -127, 127);
if (wheelPos> deadZone || wheelPos <-deadZone) {Joystick.setXAxis (wheelPos);}
else {Joystick.setXAxis (0);}
}
După cum puteți vedea, puteți seta o zonă mortă dacă este necesar (într-o roată arcade funcțională, cel mai bine este să o setați la zero).
Cablarea unui potențiometru la Arduino DUE este simplă: pinii laterali ai potențiometrului merg la + 3,3 V și GND, pinul ștergătorului la un port analog arduino DUE (a se vedea imaginea pentru referință). Am definit aici pinul analogic 3 (A3) ca intrare pentru ștergătorul potențiometrului roții, dar puteți seta pinul analogic care se potrivește cel mai bine nevoilor dumneavoastră.
PS: știți că pedalele din dulapurile de curse sunt adesea controlate de un potențiometru, decât din punct de vedere tehnic roțile și pedalele sunt același dispozitiv cu o formă diferită? Aceasta înseamnă că codul de aici ar putea fi folosit și pentru a controla pedale arcade autentice;)
Roată optică
Dacă roata dvs. este optică, poate fi manipulată cu ușurință, din nou, cu o mică modificare a schiței de pornire.
Un pinout foarte comun pentru codificatoarele optice Arcade (filatori Taito, codificatoare cu roți Atari și așa mai departe) este:
1. OptoA OUT
2. + 5V
3. GND
4. OptoB OUT
Conectați 2. și 3. la Arduino DUE 5V și GND și 1. și 4. la orice pin digital care vă place, acordând atenție faptului că este necesar un divizor de tensiune pentru a reduce ieșirea de 5V de la codificatorul optic la arduino DUE de 3.3V.. Nu trimiteți ieșiri OptoA și / sau OptoB 5V direct la pinii de intrare arduino DUE sau probabil veți prăji acele intrări sau chiar întreaga placă. Ai fost avertizat.
În schița de exemplu aici, voi folosi pinul digital 2 și pinul digital 3 ca ieșire optică A și ieșire optică B.
#include
boolean optA_state = HIGH;
int xAxisMov = 2;
configurare nulă () {
pinMode (2, INPUT_PULLUP); // OptA
pinMode (3, INPUT_PULLUP); // OptB
Mouse.begin ();
}
bucla nulă () {
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);}}} // loop end
Aceasta este o codare optică de numărare 1X cu rezoluție mică. Este mai mult decât suficient pentru aplicațiile Arcade, dar puteți crește rezoluția cu ușurință adăugând o linie de cod.
PS: știți că roțile arcade optice și filatoarele arcade sunt din punct de vedere tehnic același dispozitiv cu o formă diferită? Știți că trackball-urile sunt tehnic un spinner pe 2 axe? Aceasta înseamnă că codul de aici ar putea fi folosit pentru a controla filatoarele arcade autentice și, cu puține modificări ușoare, de asemenea, trackball-urile;)
Pasul 6: Unele imagini, sau nu s-a întâmplat
Iată câteva poze cu scutul pe care l-am făcut. Nu este o lucrare de nivel înalt (pariu, nu sunt un profesionist), dar este 100% balansată în cabinetul meu Jamma Arcade!