Innholdsfortegnelse:
- forsyninger:
- Trinn 1: Background Talk
- Trinn 2: Den store kretsen
- Trinn 3: Programmering av Arduino og gjør noen tester
- Trinn 4: Spiller!
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.