Isi kandungan:
- Bekalan:
- Langkah 1: Perbincangan Latar Belakang
- Langkah 2: Litar 'besar'
- Langkah 3: Memodenkan Arduino dan Melakukan Beberapa Ujian
- Langkah 4: Bermain!
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.