İçindekiler:
- Gereçler:
- 1. Adım: Arka Plan Konuşması
- Adım 2: 'Büyük' Devre
- Adım 3: Arduino'yu Programlamak ve Bazı Testler Yapmak
- 4. Adım: Oynuyor!
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.