Arduino Membolehkan Anda Main Atari 2600 dan ZX Spectrum Menggunakan Pengawal NES: 4 Langkah (dengan Gambar)

Arduino Membolehkan Anda Main Atari 2600 dan ZX Spectrum Menggunakan Pengawal NES: 4 Langkah (dengan Gambar)

Isi kandungan:

Anonim

Pengajaran ini menunjukkan anda bagaimana menggunakan pengawal NES di Atari 2600 atau ZX Spectrum (dengan Kempston Interface) dengan bantuan Arduino.

Bekalan:

Langkah 1: Perbincangan Latar Belakang

Saya baru-baru ini memperoleh beberapa Atari 2600s dan sekumpulan joysticks. Kedua-dua konsol berfungsi tetapi semua 5 joysticks telah rosak tanpa pembaikan. Memang sangat mudah untuk mencari Ia mudah untuk mencari konsol Atari lama 2600 yang bekerja tetapi sukar untuk mencari kayu bedik asli dalam keadaan yang berguna.

Sebaliknya, saya mempunyai pengawal NES 'generik' yang dibeli di pasaran loak yang bekerja dengan sempurna.

Saya berfikir tentang menggunakan mikrokontroler untuk menukar isyarat berseri dalam alat mainan NES kepada isyarat selari yang dikehendaki oleh Atari 2600, tetapi kemudian saya tertanya-tanya bahawa jika bukan papan mikrokontroler adat saya boleh menggunakan Arduino. Jadi orang lain tanpa banyak kemahiran dalam bidang elektronik boleh memasang adapter mereka sendiri dengan mudah.

Langkah 2: Litar 'besar'

Litar ini hanya menggunakan Arduino dan beberapa penyambung. Kod ini sangat kecil, jadi mana-mana papan Arduino akan lakukan. Tapi sama ada cara berikut mengikut senarai.

Bil bahan:

- 1 Arduino (sebarang versi akan dilakukan)

- 2 DB-9 Male connectors. Satu untuk Pengawal generik 'NES' dan satu lagi untuk ujian dongle

- 1 DB-9 Penyambung wanita, untuk memasuki Atari.

- 5 Led untuk ujian dongle

- 5 resistor 330 Ohms 1/4 Watt untuk ujian dongle

- Cangkuk wayar

Sudah tentu ia mungkin untuk menggunakan semula kabel Atari Joystick yang lama dan bukan kabel DB9 wanita serta wayar.

Ia juga mungkin untuk memotong kabel pengawal NES dan menyambung terus ke Arduino, tetapi anda harus mengenal pasti kabel dalam kabel.

Langkah 3: Memodenkan Arduino dan Melakukan Beberapa Ujian

Kumpulkan dan muat naik kod di bawah untuk Arduino. Ia telah dibangunkan menggunakan versi IDE 0.22. Sebelum menyambungkan circuito kepada ATARI gunakan menggunakan Dongle untuk mengesahkan tingkah laku litar yang betul. Pemimpin di dongle akan diaktifkan mengikut butang di pengawal NES. Kedua-dua butang tindakan dipetakan ke butang Atari yang sama (dan tunggal). Untuk ujian dengan dongle, ia perlu untuk menyalakan papan Arduino.

//

// Mainkan pada ATARI 2600 dengan Pengawal NES Oleh Danjovic, 2012

/ / Dikompilkan pada Arduino 0.22

//

/*

ATARI 2600 Joystick

Mengaktifkan secara berurutan arahan berikut dari Atari 2600 Joystick

UP, DOWN, KIRI, KANAN, MEREKA

CONNECTIONS ON ATARI JOYSTICK

Fungsi DB-9 Arduino AVR

UP 1 Pin 2 (PD2)

DOWN 2 Pin 3 (PD3)

LEFT 3 Pin 4 (PD4)

RIGHT 4 Pin 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 Pin 6 (PD6)

GND 9 GND GND

*/

/*

Pengawal NES

Mengandungi CMOS Shift Register (CD4021). Perubahan data untuk menaikkan sempadan Jam

urutan urutan seperti di bawah.

selak ___ --- _______________________

Jam _______-__-__-__-__-__-__-__

Data xxxA B SL ST UP DW LF RG

Pengawal NES dikuasakan oleh Arduino.

Fungsi DB-9 Arduino AVR

DATA 2 Pin 8 (PB0)

LATCH 3 Pin 9 (PB1)

JAM 4 PIN 10 (PB2)

+ 5VCC 7 Pin 11 (PB3)

GND 8 Pin 12 (PB4)

*/

// menyesuaikan diri dengan konfigurasi perkakasan anda

#define POWER_VIA_PORT_B3_B4 1 // gunakan pin port B3 dan B4 sebagai bekalan kuasa

#undef int

#include

/ * Sambungan port joystick Atari * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * Sambungan Pengawal NES * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // kuasa

int PWRGND_Pin = 12;

batal persediaan ()

= _BV (PORTB3)

// Lakukan kitaran jam pada pengawal NES Jam jam

void do_clock (void) {

digitalWrite (Clock_Pin, HIGH); // Menaikkan pin jam

delayMicroseconds (10); / // berhenti selama 10 mikroseconds

digitalWrite (Clock_Pin, LOW); // set pin off

delayMicroseconds (50); / // menjeda selama 10 mikrodetik yang lain

}

/*

Inilah gelung utama kami. Ia mengeluarkan denyutan selak kemudian mula memancarkan keadaan butang.

Pin pelabuhan joystick Atari ditetapkan mengikut keadaan bit yang dibaca dari anjakan

daftar dalam pengawal NES.

*/

kekosongan gelung ()

{

digitalWrite (Latch_Pin, HIGH); / // Menaikkan isyarat selak

delayMicroseconds (30); // memegangnya selama 30 mikrodetik

digitalWrite (Latch_Pin, LOW); // Isikan kembali isyarat selak ke tahap yang rendah

delayMicroseconds (10); // tahan untuk lebih 10 mikrodetik

// Proses Button A (ingat: Butang bermaksud sifar ditekan)

jika (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); / // Unassert pin (butang sifar bermakna ditekan)

}

lain

{

pinMode (Trigger_Pin, OUTPUT); // Menegaskan pin

}

do_clock (); // Denyut jam dijana pada akhir setiap bit

// Proses Button B // Kedua butang NES menjana pencetus kepada Atari

jika (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); / // Unassert pin

}

lain

{

pinMode (Trigger_Pin, OUTPUT); // Menegaskan pin

}

do_clock ();

/ Langkau Langkau Butang

do_clock ();

// Langkau Mula Butang

do_clock ();

/ // Arah UP

jika (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); / // Unassert pin

}

lain

{

pinMode (Up_Pin, OUTPUT); // Menegaskan pin

}

do_clock ();

// Proses arah DOWN

jika (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); / // Unassert pin

}

lain

{

pinMode (Down_Pin, OUTPUT); // Menegaskan pin

}

do_clock ();

// Arah arah LEFT

jika (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); / // Unassert pin

}

lain

{

pinMode (Left_Pin, OUTPUT); // Menegaskan pin

}

do_clock ();

// KADAR KEPUTUSAN TUJUAN

jika (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); / // Unassert pin

}

lain

{

pinMode (Right_Pin, OUTPUT); // Menegaskan pin

}

do_clock (); // Kinda tidak berguna, tetapi terus memelihara corak

// Setelah membaca semua butang, tunggu 10 miliseconds sebelum bacaan seterusnya

kelewatan (10);

}

Langkah 4: Bermain!

Sekarang bahawa kerja litar diuji dengan dongle, anda boleh menyambungkannya ke Atari. Papan Arduino kemudiannya akan dikuasakan oleh penyambung joystick (oleh itu tidak memerlukan kuasa luaran).

Nikmati konsol anda dengan pengawal baru.