Arduino, NES Denetleyicisini Kullanarak Atari 2600 ve ZX Spektrumunu Oynamanıza İzin Verir: 4 Adım (Resimlerle)

Arduino, NES Denetleyicisini Kullanarak Atari 2600 ve ZX Spektrumunu Oynamanıza İzin Verir: 4 Adım (Resimlerle)

İçindekiler:

Anonim

Bu talimat, Atari 2600 veya NX Spectrum'da (Kempston Arayüzü ile) NES kontrol ünitesinin bir Arduino yardımı ile nasıl kullanılacağını gösterir.

Gereçler:

1. Adım: Arka Plan Konuşması

Kısa bir süre önce birkaç Atari 2600 ve birkaç joystick satın aldım. Her iki konsol da çalışıyordu ancak 5 joystick'in tümü onarımın ötesinde hasar gördü. Aslında, bulmak çok kolaydır Eski bir Atari 2600 konsolunun çalışmasını bulmak kolaydır, ancak kullanışlı bir durumda orijinal bir joystick bulmak zordur.

Öte yandan, bit pazarında mükemmel çalışan bir NES 'jenerik' kontrolörüm vardı.

NES kumanda kolundaki serileştirilmiş sinyalleri Atari 2600'ün gerektirdiği paralel sinyallere dönüştürmek için bir mikrodenetleyici kullanmayı düşündüm, ama sonra özel bir mikrodenetleyici kartı yerine bir Arduino kullanabileceğimi merak ettim. Böylece elektronik konusunda çok fazla yeteneği olmayan diğer insanlar kendi adaptörlerini kolay bir şekilde bir araya getirebiliyorlardı.

Adım 2: 'Büyük' ​​Devre

Devre sadece Arduino ve birkaç bağlayıcı kullanır. Kod çok küçük, yani herhangi bir Arduino kurulu yapacak. Fakat buradaki iki yol da listeyi takip ediyor.

Malzeme Listesi:

- 1 Arduino (herhangi bir sürüm yapacak)

- 2 DB-9 Erkek konnektörleri. Biri NES 'generic' Controller için, diğeri test dongle’ına

- Atari'ye takmak için 1 DB-9 Dişi konnektör.

- Test cihazı için 5 Led

- Test cihazı için 5 direnç 330 Ohm 1/4 Watt

- Bir demet tel

Tabii ki eski Atari Joystick kablosunu DB9 dişi artı telleri yerine yeniden kullanmak mümkün.

NES denetleyici kablosunu kesmek ve doğrudan Arduino'ya bağlamak da mümkündür, ancak kablodaki kabloları tanımlamanız gerekir.

Adım 3: Arduino'yu Programlamak ve Bazı Testler Yapmak

Aşağıdaki kodu derleyin ve Arduino'ya yükleyin. IDE 0.22 versiyonu kullanılarak geliştirilmiştir. Sirkülasyonu ATARI'ya bağlamadan önce devrenin doğru davranışını doğrulamak için bir Dongle kullanın. Dongle içindeki ledler, NES kontrol ünitesindeki düğmelere göre etkinleştirilecektir. Her iki eylem düğmesi de aynı (ve tek) Atari düğmesine eşlenir. Dongle ile yapılan test için Arduino kartını çalıştırmak gerekir.

//

// NES Denetleyici ile ATARI 2600'de oynayın Danjovic, 2012 tarafından

// Arduino'da derlendi 0.22

//

/*

ATARI 2600 Oyun Çubuğu

Atari 2600 Joystickinden aşağıdaki talimatları sırayla etkinleştirir

YUKARI, AŞAĞI, SOL, DOĞRU, DOĞRU

ATARI JOYSTICK BAĞLANTILARI

İşlev DB-9 Arduino AVR

YUKARI 1 Pin 2 (PD2)

AŞAĞI 2 Pin 3 (PD3)

SOL 3 Pim 4 (PD4)

SAĞ 4 Pin 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 Pin 6 (PD6)

GND 9 GND GND

*/

/*

NES Denetleyici

Bir CMOS Vardiya Kaydı (CD4021) içerir. Clock'un yükseltme sınırındaki veri değişikliği

aşağıdaki gibi düğme dizisi.

mandal ___ --- _______________________

Saat _______-__-__-__-__-__-__-__

Veri xxxA B SL ST YUKARI LF RG

NES denetleyicisi, Arduino tarafından desteklenmektedir.

İşlev DB-9 Arduino AVR

VERİ 2 Pim 8 (PB0)

LATCH 3 Pim 9 (PB1)

SAAT 4 Pim 10 (PB2)

+ 5VCC 7 Pin 11 (PB3)

GND 8 Pim 12 (PB4)

*/

// donanım yapılandırmanıza adapte olun

#define POWER_VIA_PORT_B3_B4 1 // güç kaynağı olarak B3 ve B4 port pinlerini kullanın

#undef int

#Dahil etmek

/ * Atari Joystick liman bağlantıları * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * NES Denetleyici bağlantıları * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // güç

int PWRGND_Pin = 12;

geçersiz kurulum ()

= _BV (PORTB3)

// NES denetleyicisi Saat satırında bir saat döngüsü gerçekleştirin

void do_clock (void) {

digitalWrite (Clock_Pin, HIGH); // Saat pinini yükseltin

delayMicroseconds (10); // 10 mikrosaniye duraklar

digitalWrite (Clock_Pin, LOW); // pimi kapatır

delayMicroseconds (50); // 10 mikrosaniyeyi duraklatır

}

/*

İşte ana döngümüz. Bir mandal darbesi verir, ardından düğmelerin durumuna ulaşmaya başlar.

Atari kumanda kolu bağlantı noktası pimleri, vardiyadan okunan bitlerin durumuna göre ayarlanır

NES kontrol ünitesine kaydedin.

*/

geçersiz döngü ()

{

digitalWrite (Latch_Pin, HIGH); // Mandal sinyalini yükseltin

delayMicroseconds (30); // 30 mikrosaniye boyunca tut

digitalWrite (Latch_Pin, LOW); // Mandal sinyalini düşük seviyeye getir

delayMicroseconds (10); // 10 mikrosaniyeden fazla tut

// İşlem Düğmesi A (unutmayın: Sıfır, düğmeye basıldığını gösterir)

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Pimi sökme (sıfır, düğmeye basılması anlamına gelir)

}

Başka

{

pinMode (Trigger_Pin, OUTPUT); // İğne pimi

}

do_clock (); // Her bitin sonunda bir saat darbesi üretilir

// İşlem Düğmesi B // Her iki NES düğmesi de Atari'ye bir tetikleyici oluşturur

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Pin göstergesini kaldır

}

Başka

{

pinMode (Trigger_Pin, OUTPUT); // İğne pimi

}

do_clock ();

// Seçme Düğmesini Atla

do_clock ();

// Başlat Düğmesini Atla

do_clock ();

// YUKARI yönü

if (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); // Pin göstergesini kaldır

}

Başka

{

pinMode (Up_Pin, OUTPUT); // İğne pimi

}

do_clock ();

// AŞAĞI yönünü işle

if (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); // Pin göstergesini kaldır

}

Başka

{

pinMode (Down_Pin, OUTPUT); // İğne pimi

}

do_clock ();

// SOL yön işleme

if (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); // Pin göstergesini kaldır

}

Başka

{

pinMode (Left_Pin, OUTPUT); // İğne pimi

}

do_clock ();

// SAĞ yönü

if (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); // Pin göstergesini kaldır

}

Başka

{

pinMode (Right_Pin, OUTPUT); // İğne pimi

}

do_clock (); // Biraz işe yaramaz, fakat kalıbı korumaya devam etti

// Tüm düğmeleri okuduktan sonra, bir sonraki okumadan önce 10 milisaniye bekleyin

gecikmesi (10);

}

4. Adım: Oynuyor!

Şimdi çalışan devre dongle ile test edilmiştir, onu Atari'ye bağlayabilirsiniz. Arduino kartına daha sonra kumanda kolu konektörü tarafından güç verilecektir (bu nedenle harici güç gerektirmez).

Konsolun tadını yeni kontrol cihazıyla çıkarın.