Mit Arduino können Sie Atari 2600 und ZX Spectrum mit einem NES-Controller spielen - Gunook

Mit Arduino können Sie Atari 2600 und ZX Spectrum mit einem NES-Controller spielen - Gunook

Inhaltsverzeichnis:

Anonim

Diese Anleitung zeigt Ihnen, wie Sie den NES-Controller in Atari 2600 oder ZX Spectrum (mit Kempston Interface) mithilfe eines Arduino verwenden.

Zubehör:

Schritt 1: Hintergrundgespräch

Ich habe kürzlich ein paar Atari 2600 und ein paar Joysticks gekauft. Beide Konsolen funktionierten, aber alle 5 Joysticks waren irreparabel beschädigt. Tatsächlich ist es sehr leicht zu finden, dass eine alte Atari 2600-Konsole funktioniert. Es ist jedoch schwierig, einen originalen Joystick in einem nützlichen Zustand zu finden.

Auf der anderen Seite hatte ich einen Ersatz-NES-Controller gekauft, der auf einem Flohmarkt einwandfrei funktionierte.

Ich dachte darüber nach, die serialisierten Signale im NES-Joystick mit einem Mikrocontroller in parallele Signale umzuwandeln, die vom Atari 2600 benötigt werden. Dann fragte ich mich, ob ich anstelle einer benutzerdefinierten Mikrocontroller-Karte ein Arduino verwenden könnte. So könnten andere Leute ohne viele Elektronikkenntnisse mit Leichtigkeit ihre eigenen Adapter zusammenbauen.

Schritt 2: Die 'große' Rennstrecke

Die Schaltung verwendet nur den Arduino und ein paar Anschlüsse. Der Code ist sehr klein, so dass jedes Arduino-Board ausreicht. Aber so oder so folgt hier die Liste.

Stückliste:

- 1 Arduino (jede Version reicht aus)

- 2 DB-9-Stecker. Eine für den NES 'generic' Controller und eine für den Testdongle

- 1 DB-9-Buchse zum Anschluss an den Atari.

- 5 LEDs für den Test-Dongle

- 5 Widerstände 330 Ohm 1/4 Watt für den Test-Dongle

- Ein Buch von Drähten

Es ist natürlich möglich, das alte Atari-Joystick-Kabel anstelle der DB9-Buchse plus Adern wiederzuverwenden.

Es ist auch möglich, das NES-Controller-Kabel abzuschneiden und direkt mit dem Arduino zu verbinden, aber Sie sollten die Drähte im Kabel identifizieren.

Schritt 3: Programmieren des Arduino und Durchführen einiger Tests

Kompilieren Sie den folgenden Code und laden Sie ihn auf das Arduino hoch. Es wurde mit IDE Version 0.22 entwickelt. Verwenden Sie einen Dongle, um das korrekte Verhalten des Stromkreises zu überprüfen, bevor Sie den Stromkreis an den ATARI anschließen. Die LEDs im Dongle werden gemäß den Tasten im NES-Controller aktiviert. Beide Aktionsschaltflächen sind derselben (und einzigen) Atari-Schaltfläche zugeordnet. Für den Test mit dem Dongle ist es notwendig, das Arduino Board mit Strom zu versorgen.

//

// Spiele auf dem ATARI 2600 mit NES Controller Von Danjovic, 2012

// Auf Arduino 0.22 kompiliert

//

/*

ATARI 2600 Joystick

Aktiviert nacheinander die folgenden Anweisungen von einem Atari 2600-Joystick

AUF, AB, LINKS, RECHTS, TRIGGER

ANSCHLÜSSE AM ATARI JOYSTICK

Funktion DB-9 Arduino AVR

UP 1 Pin 2 (PD2)

DOWN 2 Pin 3 (PD3)

LINKS 3 Pin 4 (PD4)

RECHTS 4 Pin 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 Pin 6 (PD6)

GND 9 GND GND

*/

/*

NES-Controller

Enthält ein CMOS-Schieberegister (CD4021). Datenänderung bei Erhöhung der Grenze der Uhr

Tastenfolge wie unten.

Latch ___ --- _______________________

Uhr _______-__-__-__-__-__-__-__

Daten xxxA B SL ST UP DW LF RG

Der NES-Controller wird vom Arduino mit Strom versorgt.

Funktion DB-9 Arduino AVR

DATA 2 Pin 8 (PB0)

LATCH 3 Pin 9 (PB1)

UHR 4 Pin 10 (PB2)

+ 5VCC 7 Pin 11 (PB3)

GND 8 Pin 12 (PB4)

*/

// an deine Hardwarekonfiguration anpassen

#define POWER_VIA_PORT_B3_B4 1 // Port-Pins B3 und B4 als Stromversorgung verwenden

#undef int

#umfassen

/ * Atari Joystick Port Verbindungen * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * NES-Controller-Verbindungen * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // Leistung

int PWRGND_Pin = 12;

void setup ()

= _BV (PORTB3)

// Einen Taktzyklus auf der Taktleitung des NES-Controllers ausführen

void do_clock (void) {

digitalWrite (Clock_Pin, HIGH); // Uhrstift anheben

delayMicroseconds (10); // pausiert für 10 Mikrosekunden

digitalWrite (Clock_Pin, LOW); // setzt den Pin ab

delayMicroseconds (50); // hält für weitere 10 Mikrosekunden an

}

/*

Hier ist unsere Hauptschleife. Es gibt einen Latch-Impuls aus und beginnt dann, den Zustand der Tasten wiederherzustellen.

Die Atari-Joystick-Port-Pins werden entsprechend dem Status der aus der Verschiebung gelesenen Bits gesetzt

Registrieren Sie sich im NES-Controller.

*/

leere Schleife ()

{

digitalWrite (Latch_Pin, HIGH); // Erhöhen Sie das Latch-Signal

delayMicroseconds (30); // halte es für 30 Mikrosekunden

digitalWrite (Latch_Pin, LOW); // Latch-Signal auf niedrigen Pegel zurücksetzen

delayMicroseconds (10); // halte es länger als 10 Mikrosekunden

// Schaltfläche A verarbeiten (denken Sie daran: Eine Null bedeutet, dass die Schaltfläche gedrückt wurde)

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Pin entfernen (Null bedeutet gedrückt)

}

sonst

{

pinMode (Trigger_Pin, OUTPUT); // Pin bestätigen

}

do_clock (); // Am Ende jedes Bits wird ein Takt generiert

// Process Button B // Beide NES Buttons erzeugen einen Trigger für Atari

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Pin deaktivieren

}

sonst

{

pinMode (Trigger_Pin, OUTPUT); // Pin bestätigen

}

do_clock ();

// Auswahltaste überspringen

do_clock ();

// Startknopf überspringen

do_clock ();

// AUF Richtung

if (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); // Pin deaktivieren

}

sonst

{

pinMode (Up_Pin, OUTPUT); // Pin bestätigen

}

do_clock ();

// Abwärtsrichtung verarbeiten

if (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); // Pin deaktivieren

}

sonst

{

pinMode (Down_Pin, OUTPUT); // Pin bestätigen

}

do_clock ();

// LINKE Richtung verarbeiten

if (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); // Pin deaktivieren

}

sonst

{

pinMode (Left_Pin, OUTPUT); // Pin bestätigen

}

do_clock ();

// RICHTIGE Richtung verarbeiten

if (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); // Pin deaktivieren

}

sonst

{

pinMode (Right_Pin, OUTPUT); // Pin bestätigen

}

do_clock (); // Ein bisschen nutzlos, aber behielt das Muster bei

// Nachdem Sie alle Schaltflächen gelesen haben, warten Sie 10 Millisekunden, bevor Sie das nächste Mal lesen

Verzögerung (10);

}

Schritt 4: Spielen!

Nachdem die Schaltung mit dem Dongle getestet wurde, können Sie sie mit dem Atari verbinden. Das Arduino-Board wird dann über den Joystick-Anschluss mit Strom versorgt (benötigt daher keine externe Stromversorgung).

Genießen Sie Ihre Konsole mit dem neuen Controller.