สารบัญ:

Jammarduino DUE - DIY PC to Jamma Interface สำหรับตู้อาเขต: 6 ขั้นตอน
Jammarduino DUE - DIY PC to Jamma Interface สำหรับตู้อาเขต: 6 ขั้นตอน

วีดีโอ: Jammarduino DUE - DIY PC to Jamma Interface สำหรับตู้อาเขต: 6 ขั้นตอน

วีดีโอ: Jammarduino DUE - DIY PC to Jamma Interface สำหรับตู้อาเขต: 6 ขั้นตอน
วีดีโอ: How to wire a 2 player Jamma wiring harness (unprofessionally) 2024, พฤศจิกายน
Anonim
Jammarduino DUE - DIY PC to Jamma Interface สำหรับตู้อาเขต
Jammarduino DUE - DIY PC to Jamma Interface สำหรับตู้อาเขต

คำแนะนำนี้จะแสดงวิธีสร้างเกราะป้องกันอย่างง่ายสำหรับ Arduino DUE เพื่อเชื่อมต่อเครื่องอาร์เคดของแท้ที่มี CRT ความละเอียดต่ำและตัวเชื่อมต่อ jamma กับพีซีของคุณ

โล่เทหลักคือ:

- เพื่อขยายสัญญาณวิดีโอที่ออกมาจากการ์ดแสดงผล (แรงดันไฟฟ้าต่ำเกินไปสำหรับจอภาพ Arcade CRT ของแท้)

- เพื่อป้องกันจอภาพ CRT ความละเอียดต่ำของคุณจากสัญญาณซิงค์แนวนอนความถี่สูงเกินไป

- เพื่อ "แปล" กดปุ่มบนแผงควบคุมอาร์เคดเป็นสิ่งที่พีซีสามารถจัดการได้

ฉันจะแสดงวิธีขยายส่วนต่อประสานที่ใช้ควบคุมวงล้อและสปินเนอร์ของ Arcade Racing

หมายเหตุ: โล่ไม่ได้บังคับให้สัญญาณซิงค์วิดีโอเป็นความถี่ต่ำ: คุณต้องการซอฟต์แวร์เฉพาะสำหรับสิ่งนั้น ฉันแนะนำให้คุณใช้ CRT emudrivers หรือ Soft15KHz

ขั้นตอนที่ 1: ฮาร์ดแวร์

ฉันจะถือว่าคุณมีสถานีบัดกรีและดีบุกด้วยมือและคุณรู้วิธีใช้งาน เนื่องจากแอมพลิฟายเออร์วิดีโอเป็น SMD ที่มีระยะพิทช์ 0.65 มม. ฉันแนะนำให้คุณซื้อฟลักซ์การบัดกรีเพื่อช่วยประสานจุลินทรีย์นั้น ฉันใช้ปากกา Rosing Mildly Activated (RMA) ราคาถูก "ไม่ต้องทำความสะอาด" ที่ให้ผลลัพธ์ที่ยอดเยี่ยม

อินเทอร์เฟซประกอบด้วย:

- 1x บอร์ดไมโครคอนโทรลเลอร์ Arduino DUE

- แอมพลิฟายเออร์วิดีโอ THS7374 1x

- 1x อะแดปเตอร์ TSSOP14 ถึง DIP14

- 1x เครื่องขยายเสียง

- 1x jamma ฟิงเกอร์บอร์ด

- บอร์ดต้นแบบ 1x 5x7 ซม. สองด้าน

- 1x 1N4148 ไดโอด

- ตัวต้านทาน 7x 1Kohm

- ตัวต้านทาน 1x 820 โอห์ม

- ตัวต้านทาน 3x 220 โอห์ม

- เส้นแถบ 1x ระยะห่าง 2.54 มม.

- 1x สาย VGA

- 1x สายสัญญาณเสียง

ขั้นตอนที่ 2: แผนผัง

แผนผัง
แผนผัง

นี่คือโครงร่างสีของโครงการทั้งหมด ไม่ใช่ออร์โธดอกซ์ แต่ง่ายกว่าในความหวังของฉัน

การเดินสายไฟนั้นง่ายอย่างที่คิด:

- เส้นสีมาจากขั้วต่อ PC VGA ไปยังเครื่องขยายสัญญาณวิดีโอ ตัวต้านทาน 1Kohm ลงกราวด์จะลดกระแสไปยังอินพุตเครื่องขยายสัญญาณวิดีโอ ด้านเอาต์พุต ความต้านทานแบบอนุกรมจะลดกระแสลงสู่ 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: คุณต้องมีแหล่งภายนอกสำหรับสิ่งนั้นเนื่องจากข้อจำกัดในปัจจุบัน (เช่น PC ATX PSU) การทำเช่นนั้นจะทำให้พอร์ต 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 เริ่มต้นเมื่อกดปุ่มเฉพาะ ฟังก์ชัน shift (เปิดใช้งานโดยกดปุ่ม P1 START ค้างไว้) รวมอยู่ด้วย เช่น อินเทอร์เฟซเชิงพาณิชย์

ในตารางคีย์แมปเริ่มต้น คุณสามารถเปลี่ยนคีย์แมปเริ่มต้นหรือเพิ่มปุ่มตามที่คุณต้องการโดยตรงบนร่างได้อย่างง่ายดาย

ตัวอย่างเช่น หากคุณต้องการกำหนดปุ่มควบคุมระดับเสียงสำหรับโปรแกรมจำลอง คุณควรกำหนดปุ่มเหล่านั้น (เช่น แป้นกด "+" สำหรับเพิ่มระดับเสียง และแป้นกด "-" สำหรับลดระดับเสียง) ในเมนูปุ่มอีมูก่อน จากนั้นเพิ่มปุ่ม shift ไปที่ปุ่มที่คุณต้องการให้เพิ่มหรือลดระดับเสียง ให้บอกว่าฉันต้องการเพิ่มระดับเสียงโดยกดปุ่ม shift และปุ่ม Player 1 3 ฉันจะแก้ไขบรรทัด

{26, สูง, 0, 180, 180}, //เว้นวรรค - P1 B3

ถึง

{26, สูง, 0, 180, 223}, //เว้นวรรค - P1 B3 (+)

"223" นั้นคือรหัสอักขระ ASCII สำหรับปุ่มกด "+"

ฉันจะให้คุณหาวิธีกำหนด "-" (หรืออะไรก็ตามที่คุณต้องการ) ให้กับฟังก์ชัน "ลดระดับเสียง" เป็นแบบฝึกหัด (คำแนะนำ: รหัส ASCII 222):)

โปรดทราบว่าใน MAME คุณสามารถกำหนดโวลุ่มโหมดบริการเท่านั้น ไม่ใช่โวลุ่มการจำลองทั่วไป ซึ่งหมายความว่าหากบอร์ดจำลองไม่อนุญาตให้มีการควบคุมระดับเสียงของซอฟต์แวร์ ระดับเสียงจะไม่ได้รับผลกระทบ

ขั้นตอนที่ 4: สิ่งที่เกี่ยวกับ Input Lag?

ฉันทำการทดสอบเพื่อดูว่าโค้ดสามารถแนะนำได้มากน้อยเพียงใด โดยการส่ง 3 ปุ่มพร้อมกันการวนซ้ำจะใช้เวลาประมาณ 4 มิลลิวินาทีในการดำเนินการซึ่งน้อยกว่า 33 มิลลิวินาทีต่อเฟรมที่ 30 FPS

ขั้นตอนที่ 5: สิ่งที่เกี่ยวกับ Jamma Racing Cabinets?

แล้วตู้ Jamma Racing ล่ะ?
แล้วตู้ Jamma Racing ล่ะ?

ล้อโพเทนชิออมิเตอร์

หากตู้ของคุณเป็นตู้แบบรถแข่ง เป็นไปได้มากว่าล้อเป็นแบบโพเทนชิออมิเตอร์ (คุณสามารถเห็นโพเทนชิออมิเตอร์ 5Kohm ที่ด้านหลังของแผงควบคุม)

ก่อนอื่นให้ดาวน์โหลดและติดตั้งไลบรารีจอยสติ๊ก (ณ วันที่ปัจจุบันมีเพียงเวอร์ชัน 1 ของไลบรารีที่กล่าวว่าเข้ากันได้กับ arduino DUE แต่ยังคงเป็นไลบรารีที่ดีมาก)

จากนั้นเพิ่มสองสามบรรทัดที่ตามหลังภาพร่างในขั้นตอนที่ 4 เพื่อจัดการกับวงล้อได้อย่างง่ายดาย (ตำแหน่งที่จะวางเส้นที่เหลือให้คุณเป็นแบบฝึกหัด…)

#รวม

int deadZone = 0;

การตั้งค่าเป็นโมฆะ () {

จอยสติ๊ก.begin();}

วงเป็นโมฆะ () {

int readPot = analogRead (A3);

int wheelPos = แผนที่ (readPot, 0, 1023, -127, 127);

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

อย่างอื่น {Joystick.setXAxis(0);}

}

อย่างที่คุณเห็น คุณสามารถตั้งค่าเดดโซนได้หากจำเป็น (ในวงล้ออาร์เคดที่ทำงานได้ดี ทางที่ดีควรตั้งค่าให้เป็นศูนย์)

การเดินสายโพเทนชิออมิเตอร์ไปยัง Arduino DUE นั้นตรงไปตรงมา: หมุดด้านข้างของโพเทนชิออมิเตอร์ไปที่ +3.3V และ GND, พินที่ปัดน้ำฝนไปยังพอร์ตแอนะล็อก Arduino DUE (ดูรูปสำหรับการอ้างอิง) ฉันกำหนดขาอะนาล็อก 3 (A3) ที่นี่เป็นอินพุตสำหรับที่ปัดน้ำฝนของโพเทนชิออมิเตอร์แบบล้อ แต่คุณสามารถตั้งค่าพินอะนาล็อกที่เหมาะสมกับความต้องการของคุณมากที่สุด

PS: คุณรู้หรือไม่ว่าแป้นเหยียบในตู้แข่งมักจะถูกควบคุมโดยโพเทนชิออมิเตอร์ กว่าทางเทคนิคแล้วล้อและแป้นเหยียบเป็นอุปกรณ์เดียวกันกับที่มีรูปร่างต่างกัน ซึ่งหมายความว่ารหัสที่นี่สามารถใช้เพื่อควบคุมแป้นเหยียบอาร์เคดของแท้ได้เช่นกัน;)

ล้อออปติคอล

หากวงล้อของคุณเป็นแบบออปติคัล ก็สามารถจัดการได้อย่างง่ายดายเช่นกัน อีกครั้งด้วยการดัดแปลงเล็กน้อยเพื่อสเก็ตช์เริ่มต้น

Pinout ทั่วไปสำหรับตัวเข้ารหัส Arcade แบบออปติคัล (สปินเนอร์ Taito, ตัวเข้ารหัสล้อ Atari และอื่นๆ) คือ:

1. OptoA OUT

2. +5V

3. GND

4. OptoB ออก

เชื่อมต่อ 2 และ 3 กับ Arduino DUE 5V และ GND และ 1 และ 4 กับพินดิจิตอลใด ๆ ที่คุณต้องการให้ความสนใจว่าตัวแบ่งแรงดันไฟฟ้ามีความจำเป็นเพื่อลดเอาต์พุต 5V จากตัวเข้ารหัสออปติคัลเป็น 3.3V arduino DUE ที่สามารถจัดการได้. อย่าส่งเอาต์พุต OptoA และ/หรือ OptoB 5V ไปยังพินอินพุต Arduino DUE โดยตรง ไม่เช่นนั้นคุณอาจจะทอดอินพุตเหล่านั้นหรือแม้แต่บอร์ดทั้งหมด คุณได้รับการเตือน

ในภาพตัวอย่างที่นี่ ฉันจะใช้พินดิจิทัล 2 และพินดิจิทัล 3 เป็นออปติคัลเอาท์ A และออปติคัลเอาท์ B

#รวม

บูลีน optA_state = สูง;

int xAxisMov = 2;

การตั้งค่าเป็นโมฆะ () {

โหมดพิน (2, INPUT_PULLUP); //OptA

โหมดพิน (3, INPUT_PULLUP); //OptB

Mouse.begin();

}

วงเป็นโมฆะ () {

ถ้า (optA_state == สูง && digitalRead(2) == ต่ำ){

optA_state=!optA_state;

if(digitalRead(3) == HIGH){ Mouse.move(xAxisMov, 0, 0);} else{Mouse.move(-xAxisMov, 0, 0);} } }//สิ้นสุดการวนซ้ำ

นี่คือการเข้ารหัสออปติคัล 1X Counting ความละเอียดต่ำ เพียงพอสำหรับแอปพลิเคชัน Arcade แต่คุณสามารถเพิ่มความละเอียดได้อย่างง่ายดายโดยการเพิ่มโค้ดบางบรรทัด

PS: คุณรู้หรือไม่ว่าล้ออาร์เคดแบบออปติคัลและสปินเนอร์อาร์เคดเป็นอุปกรณ์เดียวกันกับที่มีรูปร่างต่างกัน คุณรู้หรือไม่ว่าแทร็กบอลเป็นสปินเนอร์ 2 แกนในทางเทคนิค? ซึ่งหมายความว่ารหัสที่นี่สามารถใช้เพื่อควบคุมสปินเนอร์อาร์เคดของแท้และมีแทร็กบอลที่ดัดแปลงได้ง่ายเช่นกัน;)

ขั้นตอนที่ 6: รูปบางส่วนหรือไม่เกิดขึ้น

บางรูปหรือมันไม่เกิดขึ้น!
บางรูปหรือมันไม่เกิดขึ้น!
บางรูปหรือมันไม่เกิดขึ้น!
บางรูปหรือมันไม่เกิดขึ้น!
บางรูปหรือมันไม่เกิดขึ้น!
บางรูปหรือมันไม่เกิดขึ้น!
บางรูปหรือมันไม่เกิดขึ้น!
บางรูปหรือมันไม่เกิดขึ้น!

นี่คือภาพบางส่วนของโล่ที่ฉันทำ มันไม่ใช่งานระดับสูง (พนันได้เลยว่าฉันไม่ใช่มืออาชีพ) แต่มันโยก 100% ใน jamma Arcade Cabinet ของฉัน!

แนะนำ: