目次:
このインストラクターは、Arduinoを使ってAtari 2600またはZX Spectrum(Kempstonインターフェース付き)でNESコントローラーを使用する方法を説明します。
用品:
ステップ1:バックグラウンドトーク
私は最近Atari 2600を数台とジョイスティックを購入しました。両方のコンソールは機能していましたが、5つのジョイスティックのすべてが修復不可能なほど損傷していました。確かに、見つけるのは非常に簡単です古いAtari 2600コンソールが動作しているのを見つけるのは簡単ですが、便利な状態でオリジナルのジョイスティックを見つけるのは難しいです。
その一方で、私は予備のNESの「汎用の」コントローラをフリーマーケットで購入しました。
NESジョイスティックのシリアル化された信号をAtari 2600で必要とされるパラレル信号に変換するためにマイクロコントローラを使用することを考えましたが、カスタムマイクロコントローラボードの代わりにArduinoを使用できるかどうか疑問に思いました。電子工学の知識があまりない人でも、自分のアダプタを簡単に組み立てることができます。
ステップ2:「大きな」回路
回路はArduinoといくつかのコネクタのみを使用します。コードは非常に小さいので、Arduinoのボードならどれでも構いません。しかし、どちらにしてもここにリストが続きます。
部品表:
- 1 Arduino(どのバージョンでも構いません)
- DB-9オスコネクタ×2。 1つはNESの「汎用」コントローラ用、もう1つはテストドングル用です。
- 1 DB-9メスコネクタ、Atariに差し込みます。
- テストドングルの5つのLED
- テストドングル用5本の抵抗330オーム1/4ワット
- ワイヤーの束
DB9メスプラスワイヤーの代わりに古いAtari Joystickケーブルを再利用することはもちろん可能です。
NESコントローラケーブルを切断してArduinoに直接接続することもできますが、ケーブルのワイヤを確認する必要があります。
ステップ3:Arduinoのプログラミングといくつかのテストの実行
以下のコードをコンパイルしてArduinoにアップロードしてください。 IDEバージョン0.22を使用して開発されました。回路をATARIに接続する前に、ドングルを使用して回路の正しい動作を確認してください。ドングルのLEDは、NESコントローラのボタンに合わせて作動させるものとします。両方のアクションボタンは同じ(そして唯一の)Atariボタンにマッピングされています。ドングルでテストするには、Arduinoボードに電源を入れる必要があります。
//
// NES ControllerでATARI 2600をプレイするDanjovic、2012
// Arduino 0.22でコンパイル
//
/*
ATARI 2600ジョイスティック
Atari 2600ジョイスティックから次の指示を順番に起動します。
UP、DOWN、LEFT、RIGHT、TRIGGER
アタリジョイスティックの接続
機能DB-9 Arduino AVR
UP 1ピン2(PD2)
DOWN 2ピン3(PD3)
左3ピン4(PD4)
右4ピン5(PD5)
+ 5VCC 5 + 5V + Vcc
TRIGGER 6ピン6(PD6)
GND 9 GND GND
*/
/*
NESコントローラ
CMOSシフトレジスタ(CD4021)を内蔵しています。時計の上げ幅でのデータ変更
以下のようなボタンシーケンス
ラッチ___ --- _______________________
クロック_______-__-__-__-__-__-__
データxxxA SLT UP DW LF RG
NESコントローラーはArduinoによって供給されています。
機能DB-9 Arduino AVR
DATA 2のピン8(PB0)
ラッチ3ピン9(PB1)
クロック4ピン10(PB2)
+ 5VCC 7ピン11(PB3)
GND 8ピン12(PB4)
*/
//あなたのハードウェア設定に適応する
#define POWER_VIA_PORT_B3_B4 1 //電源としてポートピンB3とB4を使用
#undef int
#含める
/ * Atariジョイスティックのポート接続* /
int Up_Pin = 2。
int Down_Pin = 3。
int Left_Pin = 4。
int Right_Pin = 5。
int Trigger_Pin = 6。
/ * NESコントローラ接続* /
int Data_Pin = 8。
int Latch_Pin = 9。
int Clock_Pin = 10。
int PWR5V_Pin = 11。 // パワー
int PWRGND_Pin = 12。
void setup()
= _BV(PORTB3)
// NESコントローラでクロックサイクルを実行する
void do_clock(void){
digitalWrite(Clock_Pin、HIGH); //クロックピンを上げる
delayMicroseconds(10)。 // 10マイクロ秒休止します
digitalWrite(Clock_Pin、LOW); //ピンをオフにします
delayMicroseconds(50)。 //さらに10マイクロ秒休止します
}
/*
これが私たちのメインループです。それはラッチパルスを発し、それからボタンの状態を再設定し始めます。
Atariジョイスティックのポートピンは、shiftから読み込まれたビットの状態に従って設定されます。
NESコントローラの内部に登録します。
*/
void loop()
{
digitalWrite(Latch_Pin、HIGH); //ラッチ信号を上げる
delayMicroseconds(30)。 // 30マイクロ秒保持する
digitalWrite(Latch_Pin、LOW); //ラッチ信号をローレベルに戻す
delayMicroseconds(10)。 // 10マイクロ秒以上保持する
//ボタンAを処理します(覚えておいてください:ゼロはボタンが押されたことを意味します)
if(digitalRead(Data_Pin))
{
pinMode(Trigger_Pin、INPUT); //ピンのアサート解除(ゼロはボタンが押されたことを意味します)
}
それ以外の
{
pinMode(Trigger_Pin、OUTPUT); //アサートピン
}
do_clock(); //クロックパルスは各ビットの終わりに生成されます
// ProcessボタンB // Both NESボタンはAtariへのトリガーを生成する
if(digitalRead(Data_Pin))
{
pinMode(Trigger_Pin、INPUT); //ピンのアサート解除
}
それ以外の
{
pinMode(Trigger_Pin、OUTPUT); //アサートピン
}
do_clock();
//選択ボタンをスキップする
do_clock();
//スタートボタンをスキップする
do_clock();
// UP方向
if(digitalRead(Data_Pin))
{
pinMode(Up_Pin、INPUT); //ピンのアサート解除
}
それ以外の
{
pinMode(Up_Pin、OUTPUT); //アサートピン
}
do_clock();
//下方向への処理
if(digitalRead(Data_Pin))
{
pinMode(Down_Pin、INPUT); //ピンのアサート解除
}
それ以外の
{
pinMode(Down_Pin、OUTPUT); //アサートピン
}
do_clock();
//左方向の処理
if(digitalRead(Data_Pin))
{
pinMode(Left_Pin、INPUT); //ピンのアサート解除
}
それ以外の
{
pinMode(Left_Pin、OUTPUT); //アサートピン
}
do_clock();
//右方向の処理
if(digitalRead(Data_Pin))
{
pinMode(Right_Pin、INPUT); //ピンのアサート解除
}
それ以外の
{
pinMode(Right_Pin、OUTPUT); //アサートピン
}
do_clock(); // Kindaは役に立たないが、パターンを維持し続ける
//すべてのボタンを読み終わったら、次の読みまで10ミリ秒待ちます
遅延(10)。
}
ステップ4:遊ぶ!
サーキットの動作がドングルでテストされたので、それをAtariに接続できます。 Arduinoボードはジョイスティックコネクタから電源が供給されます(したがって外部電源は必要ありません)。
新しいコントローラーでコンソールを楽しんでください。