Arduino ช่วยให้คุณเล่น Atari 2600 และ ZX Spectrum โดยใช้คอนโทรลเลอร์ NES: 4 ขั้นตอน (พร้อมรูปภาพ)

Arduino ช่วยให้คุณเล่น Atari 2600 และ ZX Spectrum โดยใช้คอนโทรลเลอร์ NES: 4 ขั้นตอน (พร้อมรูปภาพ)

สารบัญ:

Anonim

คำแนะนำนี้แสดงวิธีการใช้คอนโทรลเลอร์ NES ใน Atari 2600 หรือ ZX Spectrum (พร้อมอินเทอร์เฟซ Kempston) ด้วยความช่วยเหลือของ Arduino

วัสดุ:

ขั้นตอนที่ 1: พูดคุยพื้นหลัง

ฉันเพิ่งได้รับสองสามอาตาริ 2600 และจอยสติ๊ก คอนโซลทั้งสองทำงานได้ แต่จอยสติ๊กทั้ง 5 ตัวนั้นเสียหายเกินกว่าจะซ่อมได้ อันที่จริงแล้วมันหาง่ายมากมันง่ายที่จะหาคอนโซล Atari 2600 รุ่นเก่าที่ใช้งานได้ แต่มันยากที่จะหาจอยสติ๊กแบบดั้งเดิมในสภาพที่มีประโยชน์

ในทางกลับกันฉันมีตัวควบคุม 'ทั่วไป' ของ NES ที่ซื้อมาในตลาดนัดที่ทำงานได้อย่างสมบูรณ์แบบ

ฉันคิดเกี่ยวกับการใช้ไมโครคอนโทรลเลอร์เพื่อแปลงสัญญาณอนุกรมในจอยสติ๊ก NES เป็นสัญญาณขนานที่ Atari 2600 ต้องการ แต่แล้วฉันก็สงสัยว่าถ้าเป็นไมโครคอนโทรลเลอร์ที่กำหนดเองฉันสามารถใช้ Arduino แทน ดังนั้นคนอื่น ๆ ที่ไม่มีทักษะด้านอิเล็คทรอนิคส์จึงสามารถประกอบอะแดปเตอร์ของตัวเองได้อย่างง่ายดาย

ขั้นตอนที่ 2: วงจร 'ใหญ่'

วงจรใช้เฉพาะ Arduino และตัวเชื่อมต่อสองสามตัว รหัสมีขนาดเล็กมากดังนั้นบอร์ด Arduino ใด ๆ จะทำ แต่วิธีใดก็ตามที่นี่ติดตามรายการ

รายการวัสดุ:

- 1 Arduino (ทุกรุ่นจะทำ)

- 2 ขั้วต่อ DB-9 ตัวผู้ หนึ่งตัวสำหรับตัวควบคุม 'ทั่วไป' ของ NES และอีกตัวหนึ่งสำหรับดองเกิลทดสอบ

- ขั้วต่อ DB-9 1 ตัวเมียเพื่อต่อเข้ากับอาตาริ

- ไฟ LED 5 ดวงสำหรับดองเกิลทดสอบ

- 5 ตัวต้านทาน 330 โอห์ม 1/4 วัตต์สำหรับดองเกิลทดสอบ

- สายไฟ

แน่นอนว่าเป็นไปได้ที่จะนำสาย Atari Joystick เก่ามาใช้แทนสาย DB9 หญิงและสายไฟ

นอกจากนี้ยังเป็นไปได้ที่จะตัดสายเคเบิลควบคุม NES และเชื่อมต่อโดยตรงกับ Arduino แต่คุณควรระบุสายไฟในสายเคเบิล

ขั้นตอนที่ 3: เขียนโปรแกรม Arduino และทำการทดสอบบางอย่าง

รวบรวมและอัปโหลดรหัสด้านล่างไปยัง Arduino มันได้รับการพัฒนาโดยใช้ IDE รุ่น 0.22 ก่อนที่จะเชื่อมต่อวงจรกับ ATARI ให้ใช้ Dongle เพื่อตรวจสอบพฤติกรรมที่ถูกต้องของวงจร ไฟ LED ในด็องเกิลจะเปิดใช้งานตามปุ่มในตัวควบคุม NES ปุ่มการกระทำทั้งสองถูกแมปไปยังปุ่ม Atari (และผู้เดียว) ปุ่มเดียวกัน สำหรับการทดสอบด็องเกิลนั้นจำเป็นต้องจ่ายไฟให้กับบอร์ด Arduino

//

// เล่นบน ATARI 2600 กับ NES Controller โดย Danjovic, 2012

// รวบรวมใน Arduino 0.22

//

/*

ATARI 2600 ก้านควบคุม

เปิดใช้งานทิศทางต่อไปนี้ตามลำดับจาก Atari 2600 Joystick

ขึ้นลงซ้ายขวาทริกเกอร์

การเชื่อมต่อกับ ATARI JOYSTICK

ฟังก์ชั่น Arduino AVR DB-9

ขึ้น 1 ขา 2 (PD2)

ลง 2 ขา 3 (PD3)

ซ้าย 3 ขา 4 (PD4)

ขวา 4 ขา 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 ขา 6 (PD6)

GND 9 GND GND

*/

/*

ตัวควบคุม NES

มี CMOS Shift Register (CD4021) การเปลี่ยนแปลงข้อมูลบนขอบยกของนาฬิกา

ลำดับปุ่มดังต่อไปนี้

สลัก ___ --- _______________________

นาฬิกา _______-__-__-__-__-__-__-__

ข้อมูล xxxA B SL ขึ้น DW LF RG

คอนโทรลเลอร์ NES ใช้พลังงานจาก Arduino

ฟังก์ชั่น Arduino AVR DB-9

DATA 2 Pin 8 (PB0)

LATCH 3 ขา 9 (PB1)

นาฬิกา 4 ขา 10 (PB2)

+ 5VCC 7 Pin 11 (PB3)

GND 8 Pin 12 (PB4)

*/

// ปรับให้เข้ากับการกำหนดค่าฮาร์ดแวร์ของคุณ

#define POWER_VIA_PORT_B3_B4 1 // ใช้พอร์ตหมุด B3 และ B4 เป็นแหล่งจ่ายไฟ

#undef int

#include

/ * การเชื่อมต่อพอร์ต Atari Joystick * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * NES การเชื่อมต่อคอนโทรลเลอร์ * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // พลังงาน

int PWRGND_Pin = 12;

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

= _BV (PORTB3)

// ทำรอบสัญญาณนาฬิกาบนตัวควบคุม NES สายนาฬิกา

เป็นโมฆะ do_clock (เป็นโมฆะ) {

digitalWrite (Clock_Pin, HIGH); // ยกเข็มนาฬิกา

delayMicroseconds (10); // หยุดเป็นเวลา 10 ไมโครวินาที

digitalWrite (Clock_Pin, LOW); // ตั้งค่าพินออก

delayMicroseconds (50); // หยุดชั่วคราวอีก 10 microseconds

}

/*

นี่คือวงหลักของเรา มันเป็นเรื่องของการเต้นของชีพจรจากนั้นก็เริ่มที่จะ reat สถานะของปุ่ม

หมุดพอร์ตของจอยสติ๊ก Atari ถูกตั้งค่าตามสถานะของบิตที่อ่านจากการเลื่อน

ลงทะเบียนภายในคอนโทรลเลอร์ NES

*/

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

{

digitalWrite (Latch_Pin, HIGH); // ยกสัญญาณสลัก

delayMicroseconds (30); // ถือไว้ 30 ไมโครวินาที

digitalWrite (Latch_Pin, LOW); // ให้สัญญาณสลักกลับไปที่ระดับต่ำ

delayMicroseconds (10); // ถือไว้ 10 ไมโครวินาที

// ปุ่มกระบวนการ A (จดจำ: A หมายถึงปุ่มศูนย์กด)

ถ้า (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // ถอนการยืนยัน PIN (ศูนย์หมายถึงกดปุ่ม)

}

อื่น

{

pinMode (Trigger_Pin, OUTPUT); // ยืนยันรหัส

}

do_clock (); // ชีพจรนาฬิกาถูกสร้างขึ้นที่ส่วนท้ายของแต่ละบิต

// ปุ่มกระบวนการ B // ปุ่ม NES ทั้งสองสร้างทริกเกอร์ไปที่อาตาริ

ถ้า (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // ถอนการยืนยัน PIN

}

อื่น

{

pinMode (Trigger_Pin, OUTPUT); // ยืนยันรหัส

}

do_clock ();

// ข้ามปุ่มเลือก

do_clock ();

// ข้ามปุ่มเริ่ม

do_clock ();

// ทิศทางขึ้น

ถ้า (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); // ถอนการยืนยัน PIN

}

อื่น

{

pinMode (Up_Pin, OUTPUT); // ยืนยันรหัส

}

do_clock ();

// ประมวลผลทิศทางลง

ถ้า (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); // ถอนการยืนยัน PIN

}

อื่น

{

pinMode (Down_Pin, OUTPUT); // ยืนยันรหัส

}

do_clock ();

// ทิศทางซ้ายกระบวนการ

ถ้า (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); // ถอนการยืนยัน PIN

}

อื่น

{

pinMode (Left_Pin, OUTPUT); // ยืนยันรหัส

}

do_clock ();

// ทิศทางขวาของกระบวนการ

ถ้า (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); // ถอนการยืนยัน PIN

}

อื่น

{

pinMode (Right_Pin, OUTPUT); // ยืนยันรหัส

}

do_clock (); // ใจดีไร้ประโยชน์ แต่ยังคงรักษารูปแบบ

// หลังจากอ่านปุ่มทั้งหมดให้รอ 10 วินาทีก่อนที่จะอ่านต่อไป

ล่าช้า (10);

}

ขั้นตอนที่ 4: เล่น!

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

สนุกกับคอนโซลของคุณด้วยคอนโทรลเลอร์ใหม่