Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Ta instrukcja pokaże Ci, jak stworzyć prostą osłonę dla Arduino DUE, aby połączyć prawdziwą maszynę arkadową z CRT o niskiej rozdzielczości i złączem jamma do komputera.
Główne cele tarczy to:
- do wzmocnienia sygnału wideo wychodzącego z karty graficznej (za niskie napięcie jak na oryginalny monitor Arcade CRT)
- aby chronić monitor CRT o niskiej rozdzielczości przed sygnałami synchronizacji poziomej o zbyt wysokiej częstotliwości
- aby "przetłumaczyć" naciśnięcia przycisków na arkadowym panelu sterowania na coś, co może obsłużyć komputer
Pokażę Ci jak rozszerzyć użycie interfejsu o sterowanie kierownicami i błystkami Arcade Racing.
Uwaga: osłona NIE wymusza sygnału synchronizacji wideo na niskich częstotliwościach: potrzebujesz do tego specjalnego oprogramowania. Proponuję użyć emudriverów CRT lub Soft15KHz.
Krok 1: Sprzęt
Zakładam, że masz pod ręką stację lutowniczą i trochę cyny i wiesz, jak z nich korzystać. Ponieważ wzmacniacz wideo to SMD o rastrze 0,65 mm, sugeruję zakup topnika lutowniczego, aby pomóc w lutowaniu tego mikroba. Użyłem taniego pióra Rosing Mildly Activated (RMA) z doskonałymi wynikami.
Interfejs składa się z:
- 1x płytka mikrokontrolera Arduino DUE
- 1x wzmacniacz wideo THS7374
- 1x przejściówka TSSOP14 na DIP14
- 1x wzmacniacz audio
- 1x podstrunnica jamma
- 1x płytka prototypowa 5x7 cm, dwustronna
- 1x dioda 1N4148
- Rezystory 7x 1Kohm
- 1x rezystor 820 omów, - Rezystor 3x 220 omów
- 1x linia paska, rozstaw 2,54 mm
-1x kabel VGA;
- 1x kabel audio
Krok 2: Schematy
Oto schemat kolorystyczny całego projektu. Nie tak ortodoksyjny, ale mam nadzieję, że łatwiejszy do naśladowania.
Okablowanie jest tak proste, jak się wydaje:
- kolorowe linie wychodzą ze złącza PC VGA do wzmacniacza wideo; rezystor 1Kohm do masy obniża prąd na wejściu wzmacniacza wideo. Po stronie wyjściowej rezystancja szeregowa obniża prąd do arkadowego CRT.
- linia synchronizacji jest nieco bardziej „złożona”: oddzielna synchronizacja z VGA jest najpierw kompozytowa, a następnie obniżona przez dzielnik napięcia zgodnie ze specyfikacją Arduino DUE (logika 3,3 V). Dzielnik napięcia jest obliczany przy założeniu sygnału synchronizacji 5V.
- wzmacniacz wideo (THS7374) może być zasilany napięciem 3,3V lub 5V; ponieważ zasilanie przy 5 V pozwala na szerszy zakres napięć/sygnałów wejściowych, a ponieważ THS7374 może być kontrolowane przez 3,3 V, nawet jeśli sok jest przy 5 V, poszedłem na 5 V.
- zwarcie masy wideo, masy arduino DUE, masy THS7374 i masy złącza jamma.
- Linie Arduino DUE 5V i Jamma 5V NIE MOGĄ BYĆ ZWARTE.
- NIE wyciskaj wzmacniacza audio z kabla USB: potrzebujesz do tego zewnętrznego źródła ze względu na ograniczenia prądowe (np. zasilacz PC ATX). W ten sposób uszkodzisz port USB, a nawet komputer.
Złącze VGA: słowo ostrzeżenia
Niedawno miałem okazję zaktualizować komputer używany z moim jammarduino DUE. Nawet jeśli wcześniej testowałem go z dwoma różnymi komputerami, oba używały kart ATI z tej samej rodziny (ATI 9250 i 9550). Nowy komputer PC został wyposażony w HD5750 z pojedynczym wyjściem analogowym DVI (bez VGA). To zmusiło mnie do użycia (pasywnego) adaptera DVI na VGA. No cóż, po kilku zmaganiach zauważyłem, że kabel VGA podłączony do przejściówki MUSI mieć tylko masę podłączoną do pinu 5 złącza VGA, a nie piny od 6 do 10, jak podano na większości schematów w sieci. Pamiętaj o tym na wypadek, gdybyś nie widział żadnego sygnału synchronizacji z karty wideo.
Krok 3: Szkic/Kod
Musisz najpierw zainstalować Arduino IDE; musisz również zainstalować SAM Cortex M3 Core (domyślnie nieobecny). Na koniec zainstaluj sterowniki Arduino DUE. Aby uzyskać najbardziej aktualne informacje, zapoznaj się z oficjalnym samouczkiem „Pierwsze kroki z Arduino Due”.
Szkic, który musisz przesłać do Arduino DUE, znajduje się tutaj. Rozpakuj i załaduj "jammarduinoDUE.ino" do Arduino IDE, a następnie prześlij do arduino DUE przez port "programowanie". Po pomyślnym wgraniu szkicu odłącz kabel USB od portu „programowanie” i podłącz Arduino DUE przez port „Native USB”, inaczej wejściowa część kodu nie zadziała.
Zasadniczo Arduino DUE mierzy częstotliwość synchronizacji i wyłącza wzmacniacz wideo, gdy synchronizacja jest zbyt wysoka dla CRT o niskiej rozdzielczości. Arduino DUE obsługuje również wejścia pochodzące z panelu sterowania, wysyłając domyślne klawisze MAME po naciśnięciu określonego przycisku. Dostępna jest również funkcja zmiany biegów (aktywowana przez przytrzymanie przycisku P1 START), podobnie jak interfejsy komercyjne.
W tabeli domyślna mapa klawiszy. Możesz łatwo zmienić domyślną mapę klawiszy lub dodać przyciski bezpośrednio na szkicu.
Na przykład, jeśli chcesz przypisać klawisze regulacji głośności do emulatora, powinieneś najpierw zdefiniować te klawisze (powiedzmy keyboard "+" do zwiększania głośności i klawiatura "-" do zmniejszania głośności) w menu klawiszy emu; następnie dodaj przesunięty klawisz do przycisków, do których chcesz przypisać zwiększanie lub zmniejszanie głośności. Powiedzmy, że chcę zwiększyć głośność, naciskając klawisz Shift i przycisk Player 1 3. Zmodyfikuję linię
{26, WYSOKA, 0, 180, 180}, //spacja - P1 B3
do
{26, WYSOKI, 0, 180, 223}, //spacja - P1 B3 (+)
„223” to kod znaków ASCII dla klawiatury „+”.
Pozwolę Ci wymyślić, jak przypisać "-" (lub cokolwiek wolisz) do funkcji "zmniejszania głośności" jako ćwiczenie (Wskazówka: kod ASCII 222):)
Pamiętaj, że w MAME możesz przypisać tylko głośność trybu serwisowego, a nie ogólną głośność emulacji; oznacza to, że jeśli emulowana płyta nie pozwala na programową regulację głośności, głośność nie będzie miała wpływu.
Krok 4: A co z opóźnieniem wejściowym?
Przeprowadziłem kilka testów, aby zobaczyć, jak duże opóźnienie może wprowadzić kod; cóż, wysyłając 3 przyciski w tym samym czasie, wykonanie pełnej pętli zajmuje około 4 ms, na razie mniej niż 33 ms, na którą klatka trwa 30 FPS.
Krok 5: A co z szafkami Jamma Racing?
Koło potencjometru
Jeśli twoja szafka jest szafką wyścigową, bardzo prawdopodobne jest, że kierownica jest oparta na potencjometrze (możesz zobaczyć potencjometr 5Kohm z tyłu panelu sterowania).
Najpierw pobierz i zainstaluj bibliotekę Joystick (na dzień dzisiejszy mówi się, że tylko wersja 1 biblioteki jest zgodna z arduino DUE, ale nadal jest to bardzo dobra biblioteka).
Następnie dodaj kilka linii, które następują po szkicu w kroku 4, aby łatwo obsługiwać koło (gdzie umieścić linie, pozostawiono ci jako ćwiczenie…)
#włączać
int martwa strefa = 0;
pusta konfiguracja () {
Joystick.początek();}
pusta pętla () {
int readPot = analogRead(A3);
int wheelPos = map(readPot, 0, 1023, -127, 127);
if(wheelPos>deadZone || wheelPos<-deadZone){ Joystick.setXAxis(wheelPos);}
jeszcze {Joystick.setXAxis(0);}
}
Jak widać, w razie potrzeby można ustawić martwą strefę (w dobrze działającym kole zręcznościowym najlepiej ustawić ją na zero).
Okablowanie potencjometru do Arduino DUE jest proste: boczne piny potencjometru przechodzą do + 3,3 V i GND, pin wycieraczki do portu analogowego arduino DUE (patrz zdjęcie w celach informacyjnych). Zdefiniowałem tutaj pin analogowy 3 (A3) jako wejście wycieraczki potencjometru koła, ale możesz ustawić pin analogowy, który najlepiej odpowiada Twoim potrzebom.
PS: czy wiesz, że pedały w szafach wyścigowych często sterowane są potencjometrem, niż technicznie koła i pedały to to samo urządzenie o innym kształcie? Oznacza to, że kod tutaj może być użyty również do sterowania prawdziwymi pedałami zręcznościowymi;)
Koło optyczne
Jeśli twoje koło jest optyczne, można nim łatwo manipulować, ponownie, z niewielką modyfikacją początkowego szkicu.
Bardzo powszechnym pinoutem dla optycznych enkoderów Arcade (obroty Taito, enkodery Atari itd.) to:
1. Wyjście OptoA
2. +5V
3. GND
4. WYJŚCIE OPTOB
Podłącz 2. i 3. do Arduino DUE 5 V i GND oraz 1. i 4. do dowolnego pinu cyfrowego, który lubisz, zwróć uwagę, że dzielnik napięcia jest niezbędny, aby obniżyć napięcie 5 V z enkodera optycznego do 3,3 V, które może obsłużyć arduino DUE. Nie wysyłaj wyjść OptoA i/lub OptoB 5V bezpośrednio do pinów wejściowych arduino DUE, ponieważ prawdopodobnie usmażysz te wejścia lub nawet całą płytę. Zostałeś ostrzeżony.
W przykładowym szkicu użyję cyfrowego pinu 2 i cyfrowego pinu 3 jako wyjścia optycznego A i wyjścia optycznego B.
#włączać
wartość logiczna optA_state = WYSOKA;
int xAxisMov = 2;
pusta konfiguracja () {
pinMode (2, INPUT_PULLUP); //Opcja A
pinMode (3, INPUT_PULLUP); //OpcjaB
Mysz.początek();
}
pusta pętla () {
if (optA_state == WYSOKI && digitalRead(2) == NISKI){
optA_stan=!optA_stan;
if(digitalRead(3) == HIGH){ Mouse.move(xAxisMov, 0, 0);} else{Mouse.move(-xAxisMov, 0, 0);} } }//koniec pętli
Jest to kodowanie optyczne 1X Counting o niskiej rozdzielczości. Jest to więcej niż wystarczające dla aplikacji Arcade, ale możesz łatwo zwiększyć rozdzielczość, dodając wiersz kodu.
PS: czy wiesz, że optyczne koła arkadowe i arkadowe spinnery to technicznie to samo urządzenie o innym kształcie? Czy wiesz, że trackballe są technicznie spinnerem 2-osiowym? Oznacza to, że kod tutaj może być używany do sterowania prawdziwymi spinnerami zręcznościowymi, a po kilku łatwych modyfikacjach także trackballami;)
Krok 6: Niektóre zdjęcia lub to się nie stało
Oto kilka zdjęć wykonanej przeze mnie tarczy. Nie jest to praca na wysokim poziomie (założę się, że nie jestem zawodowcem), ale w moim jamma Arcade Cabinet jest w 100%!