Arduino Lader dig spille Atari 2600 og ZX Spectrum ved hjælp af en NES Controller: 4 trin (med billeder)

Arduino Lader dig spille Atari 2600 og ZX Spectrum ved hjælp af en NES Controller: 4 trin (med billeder)

Indholdsfortegnelse:

Anonim

Dette instruerbare viser dig, hvordan du bruger NES controller i Atari 2600 eller ZX Spectrum (med Kempston Interface) ved hjælp af en Arduino.

forsyninger:

Trin 1: Background Talk

Jeg har for nylig erhvervet et par Atari 2600'er og en flok joysticks. Begge konsoller arbejdede, men alle de 5 joysticks blev beskadiget uden reparation. Faktisk er det meget nemt at finde Det er nemt at finde en gammel Atari 2600-konsol, men det er svært at finde en original joystick i brugbar tilstand.

På den anden side havde jeg en ekstra NES 'generisk' controller købt i et loppemarked, der fungerede perfekt.

Jeg tænkte på at bruge en mikrocontroller til at konvertere de serielle signaler i NES joystick til parallelle signaler, der kræves af Atari 2600, men så spekulerede jeg på, at hvis jeg i stedet for et brugerdefineret microcontroller board kunne bruge en Arduino. Så andre mennesker uden mange færdigheder i elektronik kunne samle deres egne adaptere med let.

Trin 2: Den 'store' kredsløb

Kredsløbet bruger kun Arduino og et par stik. Koden er meget lille, så ethvert Arduino bord vil gøre. Men hverken her følger listen.

Materialeblad:

- 1 Arduino (enhver version vil gøre)

- 2 DB-9 male stik. En til NES 'generiske' Controller og en anden til testdonglen

- 1 DB-9 Female Connector til at tilslutte til Atari.

- 5 ledninger til testdonglen

- 5 modstande 330 ohm 1/4 watt til testdonglen

- En buch af ledninger

Det er selvfølgelig muligt at genbruge det gamle Atari Joystick-kabel i stedet for DB9 kvindelige pluskabler.

Det er også muligt at skære NES controller kabel og tilslutte direkte til Arduino, men du bør identificere ledningerne i kablet.

Trin 3: Programmering af Arduino og udførelse af nogle tests

Kompilér og upload koden nedenfor til Arduino. Det blev udviklet ved hjælp af IDE version 0.22. Før du tilslutter kredsløbet til ATARI brug, brug en Dongle til at kontrollere kredsløbets korrekte adfærd. Ledningerne i donglen skal aktiveres i overensstemmelse med knapperne i NES-controlleren. Begge handlingsknapper kortlægges til samme (og såle) Atari-knap. Til testen med donglen er det nødvendigt at drive Arduino bordet.

//

// Spil på ATARI 2600 med NES Controller Af Danjovic, 2012

// Udarbejdet på Arduino 0,22

//

/*

ATARI 2600 Joystick

Aktiverer sekventielt følgende retninger fra en Atari 2600 Joystick

OP, NED, VENSTRE, HØJRE, TRIGGER

TILSLUTNINGER PÅ ATARI JOYSTICK

Funktion DB-9 Arduino AVR

UP 1 Pin 2 (PD2)

DOWN 2 Pin 3 (PD3)

VENSTRE 3 Pin 4 (PD4)

RIGHT 4 Pin 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 Pin 6 (PD6)

GND 9 GND GND

*/

/*

NES Controller

Indeholder et CMOS Shift Register (CD4021). Dataændring på hævning af klokken

knappesekvens som nedenfor.

låsen ___ --- _______________________

Ur _______-__-__-__-__-__-__-__

Data xxxA B SL ST UP DW LF RG

NES-controlleren drives af Arduino.

Funktion DB-9 Arduino AVR

DATA 2 Pin 8 (PB0)

LATCH 3 Pin 9 (PB1)

CLOCK 4 Pin 10 (PB2)

+ 5VCC 7 Pin 11 (PB3)

GND 8 Pin 12 (PB4)

*/

// Tilpas til din hardwarekonfiguration

#define POWER_VIA_PORT_B3_B4 1 // brug portstifter B3 og B4 som strømforsyning

#undef int

#omfatte

/ * Atari Joystick-portforbindelser * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * NES Controller tilslutninger * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // strøm

int PWRGND_Pin = 12;

void setup ()

= _BV (PORTB3)

// Udfør en ur cyklus på NES controller Clock line

void do_clock (void) {

digitalWrite (Clock_Pin, HIGH); // Hæv klokstiften

delayMicroseconds (10); // pauser i 10 mikrosekunder

digitalWrite (Clock_Pin, LOW); // Sæt tappen af

delayMicroseconds (50); // pauser i yderligere 10 mikrosekunder

}

/*

Her er vores hovedløkke. Det udsender en låsepuls, og begynder at genoprette tilstanden af ​​knapperne.

Atari-joystickportstifterne er indstillet i overensstemmelse med tilstanden af ​​bitene, der læses fra skift

registrer dig inde i NES-controlleren.

*/

void loop ()

{

digitalWrite (Latch_Pin, HIGH); // Løft låsesignalet

delayMicroseconds (30); // hold det i 30 microseconds

digitalWrite (Latch_Pin, LOW); // Ret låsesignal til lavt niveau

delayMicroseconds (10); // Hold den i mere 10 mikrosekunder

// procesknap A (husk: en nul betyder knappen trykket)

hvis (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Unassert pin (nul betyder knappen trykket)

}

andet

{

pinMode (Trigger_Pin, OUTPUT); // Assert pin

}

do_clock (); // En klokkeimpuls genereres i slutningen af ​​hver bit

// Processknap B // Begge NES-knappen genererer en trigger til Atari

hvis (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Unassert pin

}

andet

{

pinMode (Trigger_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Spring Vælg knap

do_clock ();

// Spring startknap

do_clock ();

// UP retning

hvis (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); // Unassert pin

}

andet

{

pinMode (Up_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Process DOWN retning

hvis (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); // Unassert pin

}

andet

{

pinMode (Down_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Fremgangsmåde VENSTRE retning

hvis (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); // Unassert pin

}

andet

{

pinMode (Left_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Proces RIGHT retning

hvis (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); // Unassert pin

}

andet

{

pinMode (Right_Pin, OUTPUT); // Assert pin

}

do_clock (); // Kinda ubrugelige, men holdt for at mantain mønsteret

// Efter at have læst alle knapper, vent 10 milisekunder inden næste læsning

forsinkelse (10);

}

Trin 4: Spiller!

Nu da kredsløbet blev testet med donglen, kan du forbinde det med Atari. Arduino bordet bliver drevet af joystick-stikket (derfor kræver der ikke ekstern strøm).

Nyd din konsol med den nye controller.