สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: พูดคุยพื้นหลัง
- ขั้นตอนที่ 2: วงจร 'ใหญ่'
- ขั้นตอนที่ 3: เขียนโปรแกรม Arduino และทำการทดสอบบางอย่าง
- ขั้นตอนที่ 4: เล่น!
คำแนะนำนี้แสดงวิธีการใช้คอนโทรลเลอร์ 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 จะขับเคลื่อนโดยขั้วต่อจอยสติ๊ก (ดังนั้นจึงไม่จำเป็นต้องใช้พลังงานจากภายนอก)
สนุกกับคอนโซลของคุณด้วยคอนโทรลเลอร์ใหม่