Arduino lar deg spille Atari 2600 og ZX Spectrum ved hjelp av en NES Controller: 4 trinn (med bilder)

Arduino lar deg spille Atari 2600 og ZX Spectrum ved hjelp av en NES Controller: 4 trinn (med bilder)

Innholdsfortegnelse:

Anonim

Dette instruerbare viser deg hvordan du bruker NES-kontrolleren i Atari 2600 eller ZX Spectrum (med Kempston Interface) ved hjelp av en Arduino.

forsyninger:

Trinn 1: Background Talk

Jeg har nylig kjøpt et par Atari 2600-tall og en haug med joysticks. Begge konsollene jobbet, men alle de fem styrepinnene ble skadet utover reparasjon. Faktisk er det veldig enkelt å finne Det er lett å finne en gammel Atari 2600-konsoll som fungerer, men det er vanskelig å finne en original joystick i nyttig stand.

På den annen side hadde jeg en ekstra NES 'generisk' kontroller kjøpt i et loppemarked som fungerte perfekt.

Jeg tenkte på å bruke en mikrokontroller for å konvertere serialiserte signaler i NES-joystick til parallelle signaler som kreves av Atari 2600, men da lurte jeg på at hvis jeg i stedet for et tilpasset mikrokontrollerbord kunne bruke en Arduino. Så andre mennesker uten mange ferdigheter i elektronikk kan sette sammen sine egne adaptere med enkelhet.

Trinn 2: Den store kretsen

Kretsen bruker bare Arduino og et par kontakter. Koden er veldig liten, så noen Arduino bord vil gjøre. Men hverken her følger listen.

Stykklister:

- 1 Arduino (noen versjon vil gjøre)

- 2 DB-9 mannlige kontakter. En for NES 'generisk' Controller og en annen til testdonglen

- 1 DB-9 Female-kontakt, for å koble til Atari.

- 5 ledd for testdonglen

- 5 motstander 330 ohm 1/4 watt for testdonglen

- En buch av ledninger

Selvfølgelig er det mulig å gjenbruke den gamle Atari Joystick-kabelen i stedet for DB9 kvinnelige pluss ledninger.

Det er også mulig å kutte NES-regulatorkabelen og koble direkte til Arduino, men du bør identifisere ledningene i kabelen.

Trinn 3: Programmering av Arduino og gjør noen tester

Kompilere og last opp koden nedenfor til Arduino. Den ble utviklet ved hjelp av IDE versjon 0.22. Før du kobler kretsen til ATARI-bruk, bruk en dongle for å bekrefte kretsens korrekte oppførsel. Lysene i donglen skal aktiveres i henhold til knappene i NES-kontrolleren. Begge handlingsknappene er kartlagt til samme (og såle) Atari-knappen. For testen med donglen er det nødvendig å koble Arduino bordet.

//

// Spill på ATARI 2600 med NES Controller Av Danjovic, 2012

// Utarbeidet på Arduino 0.22

//

/*

ATARI 2600 Joystick

Aktiverer sekvensielt følgende retninger fra en Atari 2600 Joystick

OPP, NED, VENSTRE, RIGHT, TRIGGER

TILSLUTNINGER PÅ ATARI JOYSTICK

Funksjon DB-9 Arduino AVR

UP 1 Pin 2 (PD2)

NED 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

Inneholder et CMOS-skiftregister (CD4021). Dataendring på å øke grensen til klokken

knappesekvens som nedenfor.

lås ___ --- _______________________

Klokke _______-__-__-__-__-__-__-__

Data xxxA B SL STOP DW LF RG

NES-kontrolleren drives av Arduino.

Funksjon DB-9 Arduino AVR

DATA 2 Pin 8 (PB0)

LATCH 3 Pin 9 (PB1)

Klokke 4 pin 10 (PB2)

+ 5VCC 7 Pin 11 (PB3)

GND 8 Pin 12 (PB4)

*/

// tilpasse til maskinvarekonfigurasjonen

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

#undef int

#inkludere

/ * Atari Joystick portforbindelser * /

int Up_Pin = 2;

int Down_Pin = 3;

int venstre_pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * NES Controller-tilkoblinger * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // makt

int PWRGND_Pin = 12;

ugyldig oppsett ()

= _BV (PORTB3)

// Utfør en klokke syklus på NES kontrolleren Klokke linje

void do_clock (void) {

digitalWrite (Clock_Pin, HIGH); // Hev klokkepinnen

delayMicroseconds (10); // pauser i 10 mikrosekunder

digitalWrite (Clock_Pin, LOW); // setter pinnen av

delayMicroseconds (50); // pauser for ytterligere 10 mikrosekunder

}

/*

Her er vår hovedløkke. Det utsteder en låsepuls, og begynner å øke tilstanden til knappene.

Atari-joystick-portpinnene er satt i samsvar med tilstanden til bitene som leses fra skift

registrer deg inne i NES-kontrolleren.

*/

tomromsløyfe ()

{

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

delayMicroseconds (30); // hold den i 30 mikrosekunder

digitalWrite (Latch_Pin, LOW); // Returlåsesignalet til lavt nivå

delayMicroseconds (10); // hold den i mer 10 mikrosekunder

// Prosess Knapp A (Husk: En null betyr knappetrykk)

hvis (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Unassert pin (null betyr knappen trykket)

}

ellers

{

pinMode (Trigger_Pin, OUTPUT); // Assert pin

}

do_clock (); // En klokkepuls genereres på slutten av hver bit

// Prosessknapp B // Begge NES-knappen genererer en utløser til Atari

hvis (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Unassert pin

}

ellers

{

pinMode (Trigger_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Hopp over velg knapp

do_clock ();

// Hopp over startknappen

do_clock ();

// UP-retning

hvis (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); // Unassert pin

}

ellers

{

pinMode (Up_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Behandle NED retning

hvis (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); // Unassert pin

}

ellers

{

pinMode (Down_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Prosess VENSTRE retning

hvis (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); // Unassert pin

}

ellers

{

pinMode (Left_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Prosess RIGHT retning

hvis (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); // Unassert pin

}

ellers

{

pinMode (Right_Pin, OUTPUT); // Assert pin

}

do_clock (); // Kinda ubrukelig, men holdt for å mantain mønsteret

// Etter å ha lest alle knappene, vent 10 milissekunder før neste lesing

forsinkelse (10);

}

Trinn 4: Spiller!

Nå som kretsens arbeid ble testet med donglen, kan du koble den til Atari. Arduino-kortet vil da bli drevet av joystick-kontakten (krever derfor ikke ekstern strøm).

Nyt konsollen med den nye kontrolleren.