Arduino Memungkinkan Anda Bermain Atari 2600 dan ZX Spectrum Menggunakan Pengontrol NES: 4 Langkah (dengan Gambar)

Arduino Memungkinkan Anda Bermain Atari 2600 dan ZX Spectrum Menggunakan Pengontrol NES: 4 Langkah (dengan Gambar)

Daftar Isi:

Anonim

Instruksi ini menunjukkan kepada Anda cara menggunakan pengontrol NES di Atari 2600 atau ZX Spectrum (dengan Kempston Interface) dengan bantuan Arduino.

Persediaan:

Langkah 1: Bicara Latar Belakang

Saya baru-baru ini mendapatkan sepasang Atari 2600 dan sekelompok joystick. Kedua konsol bekerja tetapi 5 joystick rusak tidak dapat diperbaiki. Memang, sangat mudah untuk menemukan Sangat mudah untuk menemukan konsol Atari 2600 lama yang bekerja tetapi sulit untuk menemukan joystick asli dalam kondisi berguna.

Di sisi lain, saya memiliki kontroler 'generik' NES cadangan yang dibeli di pasar loak yang bekerja dengan sempurna.

Saya berpikir tentang menggunakan mikrokontroler untuk mengubah sinyal bersambung dalam joystick NES ke sinyal paralel yang diperlukan oleh Atari 2600, tetapi kemudian saya bertanya-tanya bahwa jika alih-alih papan mikrokontroler khusus saya dapat menggunakan Arduino. Sehingga orang lain yang tidak memiliki banyak keahlian dalam elektronika dapat memasang adaptor mereka sendiri dengan mudah.

Langkah 2: Sirkuit 'besar'

Rangkaian ini hanya menggunakan Arduino dan beberapa konektor. Kode ini sangat kecil, sehingga papan Arduino akan melakukannya. Namun demikian cara berikut ini mengikuti daftar.

Bill of material:

- 1 Arduino (versi apa pun bisa digunakan)

- 2 konektor DB-9 Pria. Satu untuk NES 'generic' Controller dan satu lagi untuk dongle tes

- 1 konektor DB-9 Female, untuk dihubungkan ke Atari.

- 5 Leds untuk dongle uji

- 5 resistor 330 Ohm 1/4 Watt untuk dongle uji

- Sekeping kabel

Tentu saja mungkin untuk menggunakan kembali kabel Atari Joystick lama daripada kabel DB9 betina plus.

Dimungkinkan juga untuk memotong kabel pengontrol NES dan menghubungkan langsung ke Arduino, tetapi Anda harus mengidentifikasi kabel-kabel dalam kabel.

Langkah 3: Memprogram Arduino dan Melakukan Beberapa Tes

Kompilasi dan unggah kode di bawah ini ke Arduino. Ini dikembangkan menggunakan IDE versi 0.22. Sebelum menghubungkan circuito ke ATARI, gunakan dongle untuk memverifikasi perilaku sirkuit yang benar. Led di dongle harus diaktifkan sesuai dengan tombol pada pengontrol NES. Kedua tombol aksi dipetakan ke tombol Atari yang sama (dan satu-satunya). Untuk pengujian dengan dongle perlu menyalakan papan Arduino.

//

// Main di ATARI 2600 dengan NES Controller Oleh Danjovic, 2012

// Disusun di Arduino 0.22

//

/*

ATARI 2600 Joystick

Mengaktifkan secara berurutan arah berikut dari Atari 2600 Joystick

ATAS, BAWAH, KIRI, KANAN, PEMICU

SAMBUNGAN PADA ATARI JOYSTICK

Fungsi DB-9 Arduino AVR

UP 1 Pin 2 (PD2)

BAWAH 2 Pin 3 (PD3)

LEFT 3 Pin 4 (PD4)

KANAN 4 Pin 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 Pin 6 (PD6)

GND 9 GND GND

*/

/*

Pengontrol NES

Berisi CMOS Shift Register (CD4021). Perubahan data pada peningkatan batas Jam

urutan tombol seperti di bawah ini.

kait ___ --- _______________________

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

Data xxxA B SL ST UP DW LF RG

Pengontrol NES ditenagai 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)

*/

// sesuaikan dengan konfigurasi perangkat keras Anda

#define POWER_VIA_PORT_B3_B4 1 // gunakan pin port B3 dan B4 sebagai catu daya

#undef int

#termasuk

/ * Koneksi port Atari Joystick * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * Koneksi Pengendali NES * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // kekuasaan

int PWRGND_Pin = 12;

pengaturan batal ()

= _BV (PORTB3)

// Lakukan siklus jam pada NES controller Clock line

batal do_clock (batal) {

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

delayMicroseconds (10); // jeda selama 10 mikrodetik

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

delayMicroseconds (50); // jeda selama 10 mikrodetik lainnya

}

/*

Inilah loop utama kami. Ini mengeluarkan latch pulse kemudian mulai menunjukkan keadaan tombol.

Pin port joystick Atari diatur sesuai dengan keadaan bit yang dibaca dari shift

mendaftar di dalam pengontrol NES.

*/

membatalkan loop ()

{

digitalWrite (Latch_Pin, HIGH); // Naikkan sinyal kait

delayMicroseconds (30); // tahan selama 30 mikrodetik

digitalWrite (Latch_Pin, LOW); // Kembalikan sinyal kait ke level rendah

delayMicroseconds (10); // tahan selama lebih dari 10 mikrodetik

// Proses Tombol A (ingat: Tombol nol berarti ditekan)

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Lepaskan pin (tombol nol berarti ditekan)

}

lain

{

pinMode (Trigger_Pin, OUTPUT); // Tegaskan pin

}

do_clock (); // Pulsa jam dihasilkan di akhir setiap bit

// Tombol Proses B // Kedua tombol NES menghasilkan pemicu untuk Atari

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Lepaskan pin

}

lain

{

pinMode (Trigger_Pin, OUTPUT); // Tegaskan pin

}

do_clock ();

// Lewati Tombol Pilih

do_clock ();

// Lewati Tombol Mulai

do_clock ();

// Arah UP

if (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); // Lepaskan pin

}

lain

{

pinMode (Up_Pin, OUTPUT); // Tegaskan pin

}

do_clock ();

// Memproses arah BAWAH

if (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); // Lepaskan pin

}

lain

{

pinMode (Down_Pin, OUTPUT); // Tegaskan pin

}

do_clock ();

// Proses arah KIRI

if (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); // Lepaskan pin

}

lain

{

pinMode (Left_Pin, OUTPUT); // Tegaskan pin

}

do_clock ();

// Memproses arah KANAN

if (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); // Lepaskan pin

}

lain

{

pinMode (Right_Pin, OUTPUT); // Tegaskan pin

}

do_clock (); // Agak sia-sia, tapi tetap mempertahankan polanya

// Setelah membaca semua tombol, tunggu 10 milidetik sebelum membaca selanjutnya

keterlambatan (10);

}

Langkah 4: Bermain!

Sekarang rangkaian listrik telah diuji dengan dongle, Anda dapat menghubungkannya ke Atari. Papan Arduino kemudian akan ditenagai oleh konektor joystick (oleh karena itu tidak memerlukan daya eksternal).

Nikmati konsol Anda dengan controller baru.