Πίνακας περιεχομένων:

Jammarduino DUE - DIY PC to Jamma Interface για Arcade Cabinets: 6 Βήματα
Jammarduino DUE - DIY PC to Jamma Interface για Arcade Cabinets: 6 Βήματα

Βίντεο: Jammarduino DUE - DIY PC to Jamma Interface για Arcade Cabinets: 6 Βήματα

Βίντεο: Jammarduino DUE - DIY PC to Jamma Interface για Arcade Cabinets: 6 Βήματα
Βίντεο: Управление 16 серводвигателями с использованием модуля PCA9685 и Arduino V2 2024, Νοέμβριος
Anonim
Jammarduino DUE - DIY PC to Jamma Interface για Arcade Cabinets
Jammarduino DUE - DIY PC to Jamma Interface για Arcade Cabinets

Αυτό το διδακτικό θα σας δείξει πώς να δημιουργήσετε μια απλή θωράκιση για το Arduino DUE για διασύνδεση ενός γνήσιου μηχανή arcade με χαμηλή ανάλυση CRT και σύνδεσμο jamma στον υπολογιστή σας.

Οι κύριοι πόροι της ασπίδας είναι:

- για ενίσχυση του σήματος βίντεο που βγαίνει από την κάρτα βίντεο (πολύ χαμηλή τάση για γνήσια οθόνη Arcade CRT)

- για προστασία της οθόνης CRT χαμηλής ανάλυσης από σήματα οριζόντιου συγχρονισμού πολύ υψηλής συχνότητας

- για να "μεταφράσει" το κουμπί πατά στον πίνακα ελέγχου arcade σε κάτι που μπορεί να χειριστεί ο υπολογιστής

Θα σας δείξω πώς να επεκτείνετε τη χρήση της διεπαφής για τον έλεγχο των τροχών και των περιστρεφόμενων Arcade Racing.

Σημείωση: η ασπίδα ΔΕΝ αναγκάζει το σήμα συγχρονισμού βίντεο σε χαμηλές συχνότητες: χρειάζεστε κάποιο συγκεκριμένο λογισμικό για αυτό. Σας προτείνω να χρησιμοποιήσετε emudrivers CRT ή Soft15KHz.

Βήμα 1: Υλικό

Θα υποθέσω ότι έχετε έναν σταθμό συγκόλλησης και λίγο κασσίτερο με το χέρι και ξέρετε πώς να τα χρησιμοποιήσετε. Δεδομένου ότι ο ενισχυτής βίντεο είναι ένα SMD με βήμα 0,65 mm, σας προτείνω να αγοράσετε κάποια ροή συγκόλλησης για να βοηθήσετε τη συγκόλληση αυτού του μικροβίου. Χρησιμοποίησα μια φθηνή "χωρίς καθάρισμα" στυλό Rosing Mildly Activated (RMA) με εξαιρετικά αποτελέσματα.

Η διεπαφή αποτελείται από:

- 1x πλακέτα μικροελεγκτή Arduino DUE

- 1x ενισχυτής βίντεο THS7374

- 1x προσαρμογέας TSSOP14 σε DIP14

- 1x ενισχυτής ήχου

- 1x ταμπλό Jamma

- 1x 5x7 cm πρωτότυπη σανίδα, διπλή πλευρά

- 1x δίοδος 1N4148

- Αντιστάσεις 7x 1Kohm

- Αντίσταση 1x 820 ohm

- Αντίσταση 3x 220 ohm

- 1x γραμμή λωρίδας, απόσταση 2,54 mm

- 1x καλώδιο VGA

- 1x καλώδιο ήχου

Βήμα 2: Διαγράμματα

Σχήματα
Σχήματα

Εδώ είναι ένα χρωματιστό σχέδιο ολόκληρου του έργου. Όχι τόσο ορθόδοξο, αλλά πιο εύκολο να το ακολουθήσω, με τις ελπίδες μου.

Τα δόντια είναι τόσο εύκολα όσο φαίνονται:

- οι χρωματικές γραμμές προέρχονται από τον σύνδεσμο PC VGA στον ενισχυτή βίντεο. μια αντίσταση 1Kohm στη γείωση μειώνει το ρεύμα στην είσοδο του ενισχυτή βίντεο. Στην πλευρά εξόδου, μια σειρά αντίστασης μειώνει το ρεύμα στο arcade CRT.

- η γραμμή συγχρονισμού είναι κατά κάποιο τρόπο πιο "πολύπλοκη": ο ξεχωριστός συγχρονισμός από το VGA γίνεται σύνθετος, πρώτα, στη συνέχεια χαμηλώνεται με διαχωριστή τάσης για να τηρηθούν οι προδιαγραφές Arduino DUE (λογική 3.3V). Ο διαιρέτης τάσης υπολογίζεται υποθέτοντας ένα σήμα συγχρονισμού 5V.

- Ο ενισχυτής βίντεο (THS7374) θα μπορούσε να τροφοδοτηθεί με τάση 3,3V ή 5V. Επειδή η τροφοδοσία στα 5V επιτρέπει ένα ευρύτερο φάσμα τάσεων/σημάτων εισόδου και επειδή το THS7374 μπορεί να ελεγχθεί κατά 3,3V ακόμη και αν είναι 5V, πήγα με τον 5V τρόπο.

- γείωση βίντεο, γείωση arduino DUE, γείωση THS7374 και γείωση σύνδεσης jamma είναι βραχυκυκλωμένα.

- Οι γραμμές Arduino DUE 5V και Jamma 5V ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΣΥΝΤΟΜΟΤΕΡΑ.

- ΜΗΝ χυθείτε τον ενισχυτή ήχου από το καλώδιο USB: χρειάζεστε εξωτερική πηγή για αυτό λόγω των τρέχοντων ορίων (δηλαδή το PCU ATX PCU). Κάτι τέτοιο θα καταστρέψει τη θύρα USB ή ακόμα και τον υπολογιστή σας.

Υποδοχή VGA: μια λέξη προσοχής

Είχα πρόσφατα την ευκαιρία να ενημερώσω τον υπολογιστή που χρησιμοποιείται με το jammarduino DUE. Ακόμα κι αν το είχα δοκιμάσει με δύο διαφορετικούς υπολογιστές πριν, και οι δύο χρησιμοποιούσαν κάρτες ATI της ίδιας οικογένειας (ATI 9250 και 9550). Ο νέος υπολογιστής ήταν εξοπλισμένος με HD5750 με μία αναλογική έξοδο DVI (χωρίς VGA). Αυτό με ανάγκασε να χρησιμοποιήσω έναν (παθητικό) προσαρμογέα DVI σε VGA. Λοιπόν, μετά από κάποιες δυσκολίες παρατήρησα ότι το καλώδιο VGA που είναι συνδεδεμένο στον προσαρμογέα ΠΡΕΠΕΙ να έχει μόνο τη γείωση που συνδέεται με τον ακροδέκτη 5 του συνδέσμου VGA, όχι καρφίτσες από 6 έως 10 όπως αναφέρονται στα περισσότερα σχήματα στον ιστό. Λάβετε υπόψη αυτό σε περίπτωση που δεν μπορείτε να δείτε κανένα σήμα συγχρονισμού από την κάρτα βίντεο.

Βήμα 3: Σκίτσο/Κωδικός

Σκίτσο/Κωδικός
Σκίτσο/Κωδικός

Πρέπει πρώτα να εγκαταστήσετε το Arduino IDE. πρέπει επίσης να εγκαταστήσετε το SAM Cortex M3 Core (δεν υπάρχει από προεπιλογή). Τελευταίο αλλά όχι λιγότερο σημαντικό, εγκαταστήστε προγράμματα οδήγησης Arduino DUE. Ανατρέξτε στο επίσημο σεμινάριο "Ξεκινώντας με το Arduino Due" για τις πιο ενημερωμένες πληροφορίες.

Το σκίτσο που πρέπει να ανεβάσετε στο Arduino DUE επισυνάπτεται εδώ. Αποσυμπιέστε και φορτώστε το "jammarduinoDUE.ino" σε σας Arduino IDE και, στη συνέχεια, ανεβάστε το στο arduino DUE μέσω της θύρας "προγραμματισμού". Αφού μεταφορτωθεί επιτυχώς το σκίτσο, αποσυνδέστε το καλώδιο USB από τη θύρα "προγραμματισμού" και συνδέστε το Arduino DUE μέσω θύρας "Native USB", διαφορετικά το τμήμα εισόδου του κώδικα δεν θα λειτουργήσει.

Βασικά, το Arduino DUE μετρά τη συχνότητα συγχρονισμού και απενεργοποιεί τον ενισχυτή βίντεο όταν ο συγχρονισμός είναι πολύ υψηλός για CRT χαμηλής ανάλυσης. Το Arduino DUE χειρίζεται επίσης τις εισόδους που προέρχονται από τον πίνακα ελέγχου, στέλνοντας προεπιλεγμένα πλήκτρα MAME σε συγκεκριμένο πάτημα κουμπιού. Περιλαμβάνεται επίσης μια λειτουργία αλλαγής (ενεργοποιημένη κρατώντας πατημένο το κουμπί P1 START), όπως οι εμπορικές διεπαφές.

Στον πίνακα ο προεπιλεγμένος χάρτης κλειδιού. Μπορείτε να αλλάξετε τον προεπιλεγμένο χάρτη κλειδιών ή να προσθέσετε κουμπιά κατά βούληση απευθείας στο σκίτσο εύκολα.

Για παράδειγμα, εάν θέλετε να αντιστοιχίσετε πλήκτρα ελέγχου έντασης ήχου για τον εξομοιωτή σας, θα πρέπει πρώτα να ορίσετε αυτά τα πλήκτρα (ας πούμε το πληκτρολόγιο "+" για την αύξηση της έντασης και το πληκτρολόγιο "-" για μείωση της έντασης). στη συνέχεια, προσθέστε το μετατοπισμένο πλήκτρο στα κουμπιά στα οποία θέλετε να εκχωρηθεί η αύξηση ή μείωση της έντασης. Ας πούμε ότι θέλω να αυξήσω την ένταση πατώντας το πλήκτρο shift και το κουμπί Player 1 3. Θα τροποποιήσω τη γραμμή

{26, HIGH, 0, 180, 180}, // space - P1 B3

προς το

{26, HIGH, 0, 180, 223}, // space - P1 B3 (+)

Αυτό το "223" είναι ο κωδικός χαρακτήρων ASCII για το πληκτρολόγιο "+".

Θα σας αφήσω να καταλάβετε πώς να αντιστοιχίσετε το "-" (ή ό, τι προτιμάτε) στη συνάρτηση "μείωση έντασης" ως άσκηση (Υπόδειξη: κωδικός ASCII 222):)

Λάβετε υπόψη ότι στο MAME μπορείτε να αντιστοιχίσετε μόνο τον τόμο της λειτουργίας υπηρεσίας και όχι τον γενικό τόμο εξομοίωσης. αυτό σημαίνει ότι εάν η εξομοιωμένη πλακέτα δεν επιτρέπει τον έλεγχο της έντασης του λογισμικού, η ένταση δεν θα επηρεαστεί.

Βήμα 4: Τι γίνεται με το Input Lag;

Έκανα κάποιες δοκιμές για να δω πόση καθυστέρηση θα μπορούσε να εισαγάγει ο κώδικας. Λοιπόν, στέλνοντας 3 κουμπιά πατήστε ταυτόχρονα για να ολοκληρωθεί ένας πλήρης βρόχος περίπου 4 ms, μέχρι στιγμής λιγότερο από τα 33 ms ένα πλαίσιο διαρκεί στα 30 FPS.

Βήμα 5: Τι γίνεται με τα Jamma Racing Cabinets;

Τι γίνεται με τα Jamma Racing Cabinets
Τι γίνεται με τα Jamma Racing Cabinets

Τροχός ποτενσιόμετρου

Εάν το ντουλάπι σας είναι ντουλάπι αγώνων, είναι πολύ πιθανό ο τροχός να βασίζεται σε ποτενσιόμετρο (μπορείτε να δείτε ένα ποτενσιόμετρο 5Kohm στην πίσω πλευρά του πίνακα ελέγχου).

Πρώτα απ 'όλα, κάντε λήψη και εγκαταστήστε τη βιβλιοθήκη Joystick (μέχρι σήμερα μόνο η έκδοση 1 της βιβλιοθήκης λέγεται ότι είναι συμβατή με το arduino DUE, αλλά εξακολουθεί να είναι μια πολύ καλή βιβλιοθήκη).

Στη συνέχεια, προσθέστε τις λίγες γραμμές που ακολουθούν στο σκίτσο στο Βήμα 4 για να χειριστείτε εύκολα τον τροχό (πού να τοποθετήσετε τις γραμμές που σας αφήνονται ως άσκηση…)

#περιλαμβάνω

int deadZone = 0;

void setup () {

Joystick.begin ();}

void loop () {

int readPot = analogRead (A3);

int wheelPos = χάρτης (readPot, 0, 1023, -127, 127);

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

else {Joystick.setXAxis (0);}

}

Όπως μπορείτε να δείτε, μπορείτε να ορίσετε μια ζώνη ζώνης εάν είναι απαραίτητο (σε έναν καλό τροχό εργασίας, είναι καλύτερο να το ρυθμίσετε στο μηδέν).

Η σύνδεση ενός ποτενσιόμετρου στο Arduino DUE είναι απλή: οι πλευρικές ακίδες του ποτενσιόμετρου πηγαίνουν σε +3.3V και GND, ο πείρος του υαλοκαθαριστήρα σε μια αναλογική θύρα arduino DUE (δείτε την εικόνα για αναφορά). Καθορίζω εδώ τον αναλογικό πείρο 3 (Α3) ως είσοδο για τον υαλοκαθαριστήρα του ποτενσιόμετρου τροχού, αλλά μπορείτε να ορίσετε τον αναλογικό πείρο που ταιριάζει καλύτερα στις ανάγκες σας.

ΥΓ: γνωρίζετε ότι τα πεντάλ στα ντουλάπια των αγώνων ελέγχονται συχνά με ποτενσιόμετρο, από τεχνική άποψη οι τροχοί και τα πεντάλ είναι η ίδια συσκευή με διαφορετικό σχήμα; Αυτό σημαίνει ότι ο κωδικός εδώ θα μπορούσε να χρησιμοποιηθεί για τον έλεγχο των γνήσιων πετάλων arcade επίσης;)

Οπτικός Τροχός

Εάν ο τροχός σας είναι οπτικός, μπορείτε επίσης να τον χειριστείτε εύκολα, πάλι, με μια ελαφριά τροποποίηση στο αρχικό σκίτσο.

Ένα πολύ συνηθισμένο pinout για οπτικούς κωδικοποιητές Arcade (περιστροφείς Taito, κωδικοποιητές τροχών Atari και ούτω καθεξής) είναι:

1. OptoA OUT

2. +5V

3. GND

4. OptoB OUT

Συνδέστε τα 2. και 3. στο Arduino DUE 5V και GND, και 1. και 4. σε οποιαδήποτε ψηφιακή ακίδα που σας αρέσει να προσέχετε ότι είναι απαραίτητος ένας διαχωριστής τάσης για να μειωθεί η έξοδος 5V από τον οπτικό κωδικοποιητή στο 3,3V arduino DUE που μπορεί να χειριστεί Το Μην στείλετε εξόδους OptoA ή/και OptoB 5V απευθείας στις καρφίτσες εισόδου arduino DUE, πιθανότατα θα τηγανίσετε αυτές τις εισόδους ή ακόμα και ολόκληρο τον πίνακα. Σε έχω προειδοποιήσει.

Στο παράδειγμα σκίτσο εδώ θα χρησιμοποιήσω την ψηφιακή ακίδα 2 και την ψηφιακή ακίδα 3 ως οπτική έξοδο Α και οπτική έξοδο Β.

#περιλαμβάνω

boolean optA_state = HIGH;

int xAxisMov = 2;

void setup () {

pinMode (2, INPUT_PULLUP); // OptA

pinMode (3, INPUT_PULLUP); // OptB

Mouse.begin ();

}

void loop () {

εάν (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);}}} // τέλος βρόχου

Πρόκειται για οπτική κωδικοποίηση χαμηλής ανάλυσης 1X Counting. Είναι κάτι παραπάνω από επαρκές για εφαρμογές Arcade, αλλά μπορείτε να αυξήσετε εύκολα την ανάλυση προσθέτοντας κάποια γραμμή κώδικα.

ΥΓ: γνωρίζετε ότι οι οπτικοί τροχοί arcade και οι spinners είναι τεχνικά η ίδια συσκευή με διαφορετικό σχήμα; Γνωρίζετε ότι τα trackball είναι τεχνικά 2 άξονες; Αυτό σημαίνει ότι ο κώδικας εδώ θα μπορούσε να χρησιμοποιηθεί για τον έλεγχο γνήσιων παιχνιδιών arcade και, με λίγες, εύκολες τροποποιήσεις, επίσης μπάλες;)

Βήμα 6: Κάποιες φωτογραφίες, ή δεν συνέβη

Κάποιες φωτογραφίες, ή δεν συνέβη!
Κάποιες φωτογραφίες, ή δεν συνέβη!
Κάποιες φωτογραφίες, ή δεν συνέβη!
Κάποιες φωτογραφίες, ή δεν συνέβη!
Κάποιες φωτογραφίες, ή δεν συνέβη!
Κάποιες φωτογραφίες, ή δεν συνέβη!
Κάποιες φωτογραφίες, ή δεν συνέβη!
Κάποιες φωτογραφίες, ή δεν συνέβη!

Εδώ είναι μερικές εικόνες της ασπίδας που έφτιαξα. Δεν είναι έργο υψηλού επιπέδου (στοίχημα, δεν είμαι επαγγελματίας), αλλά είναι 100% λικνισμένο στο jamma Arcade Cabinet μου!

Συνιστάται: