Pinapayagan ka ng Arduino Play Atari 2600 at ZX Spectrum Paggamit ng Controller ng NES: 4 na Hakbang (na may Mga Larawan)

Pinapayagan ka ng Arduino Play Atari 2600 at ZX Spectrum Paggamit ng Controller ng NES: 4 na Hakbang (na may Mga Larawan)

Talaan ng mga Nilalaman:

Anonim

Ang instructable na ito ay nagpapakita sa iyo kung paano gamitin ang controller ng NES sa Atari 2600 o ZX Spectrum (na may Kempston Interface) sa tulong ng isang Arduino.

Mga Kagamitan:

Hakbang 1: Background Talk

Kamakailan-lamang na nakuha ko ang isang pares ng Atari 2600s at isang grupo ng mga joysticks. Ang parehong consoles ay nagtatrabaho ngunit ang lahat ng 5 joysticks ay nasira na hindi naayos. Sa katunayan, napakadaling hanapin Ito ay madali upang mahanap ang isang lumang Atari 2600 console nagtatrabaho ngunit mahirap upang makahanap ng isang orihinal na joystick sa kapaki-pakinabang na kondisyon.

Sa kabilang banda, nagkaroon ako ng isang ekstrang pangkalikasan ng NES na binili sa isang pulgas na merkado na kumikilos nang perpekto.

Akala ko ang tungkol sa paggamit ng isang microcontroller upang i-convert ang serialized signal sa NES joystick sa parallel signal na kinakailangan ng Atari 2600, ngunit pagkatapos ay nagtaka ako na kung sa halip ng isang pasadyang board microcontroller maaari kong gamitin ang isang Arduino. Kaya ang ibang mga tao na walang maraming kasanayan sa elektronika ay maaaring mag-ipon ng kanilang sariling mga adapter nang madali.

Hakbang 2: Ang 'malaking' Circuit

Ang circuit ay gumagamit lamang ng Arduino at isang pares ng mga konektor. Ang code ay napakaliit, kaya ang anumang Arduino board ay gagawin. Ngunit alinman sa paraan dito ay sumusunod sa listahan.

Bill ng Materyales:

- 1 Arduino (anumang bersyon ay gagawin)

- 2 DB-9 Male konektor. Isa para sa generic na Controller ng NES at isa pa sa test dongle

- 1 DB-9 Female connector, upang i-plug sa Atari.

- 5 Leds para sa test dongle

- 5 resistors 330 Ohms 1/4 Watt para sa test dongle

- Isang buch ng wires

Siyempre posible na muling gamitin ang lumang cable ng Atari Joystick sa halip ng DB9 babae at mga wire.

Posible ring i-cut ang cable ng NES controller at direktang kumonekta sa Arduino, ngunit dapat mong tukuyin ang mga wire sa cable.

Hakbang 3: Programming ang Arduino at Paggawa ng Mga Pagsusuri

Magtipon at i-upload ang code sa ibaba sa Arduino. Ito ay binuo gamit ang IDE bersyon 0.22. Bago ang pagkonekta sa circuito sa paggamit ng ATARI gumamit ng Dongle upang i-verify ang tamang pag-uugali ng circuit. Ang mga leds sa dongle ay dapat na aktibo ayon sa mga pindutan sa controller ng NES. Ang parehong mga pindutan ng pagkilos ay naka-map sa parehong (at nag-iisang) Atari button. Para sa pagsusulit sa dongle, kinakailangan ang kapangyarihan ng Arduino board.

//

// I-play sa ATARI 2600 sa NES Controller Ni Danjovic, 2012

// Naipon sa Arduino 0.22

//

/*

ATARI 2600 Joystick

Aktibo ang sunud-sunod ang mga sumusunod na direksyon mula sa isang Atari 2600 Joystick

UP, DOWN, KALIWA, KARAPATAN, TRIGGER

MGA CONNECTIONS SA ATARI JOYSTICK

Function DB-9 Arduino AVR

UP 1 Pin 2 (PD2)

DOWN 2 Pin 3 (PD3)

KALIWA 3 Pin 4 (PD4)

KARAPATANG 4 Pin 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 Pin 6 (PD6)

GND 9 GND GND

*/

/*

Controller ng NES

Naglalaman ng CMOS Shift Register (CD4021). Pagbabago ng data sa pagtaas ng hangganan ng Orasan

pindutan ng pagkakasunud-sunod bilang sa ibaba.

aldaba ___ --- _______________________

Orasan _______-__-__-__-__-__-__-__

Data xxxA B SL ST UP DW LF RG

Ang controller ng NES ay pinapatakbo ng Arduino.

Function 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)

*/

/ iakma sa iyong config ng hardware

#define POWER_VIA_PORT_B3_B4 1 // gumamit ng pin ng port B3 at B4 bilang supply ng kuryente

#undef int

# isama

/ * Mga koneksyon ng koneksyon ng port ng Atari * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * NES Controller na koneksyon * /

int Data_Pin = 8;

Int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // kapangyarihan

int PWRGND_Pin = 12;

walang bisa setup ()

= _BV (PORTB3)

/ / Magsagawa ng isang orasan ng orasan sa NES controller Clock line

walang bisa do_clock (walang bisa) {

digitalWrite (Clock_Pin, HIGH); / / Ibituhin ang pin ng orasan

delayMicroseconds (10); / / Huminto para sa 10 microseconds

digitalWrite (Clock_Pin, LOW); / / Nagtatakda ang pin off

delayMicroseconds (50); / / i-pause para sa isa pang 10 microseconds

}

/*

Narito ang aming pangunahing loop. Ito ay naglalabas ng isang pulse ng trangka pagkatapos ay nagsisimula na muling ibalik ang estado ng mga pindutan.

Ang mga pin ng joystick port ng Atari ay itinakda ayon sa estado ng mga bits na nabasa mula sa shift

magrehistro sa loob ng controller ng NES.

*/

walang bisa loop ()

{

digitalWrite (Latch_Pin, HIGH); // Itaas ang signal ng aldaba

delayMicroseconds (30); / hold ito para sa 30 microseconds

digitalWrite (Latch_Pin, LOW); // Magbalik signal ng aldaba sa mababang antas

delayMicroseconds (10); / hold ito para sa higit pang 10 microseconds

// Proseso ng Pindutan A (tandaan: Ang isang zero ay nangangahulugan ng pindutan na pinindot)

kung (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); / / Unassert pin (zero ibig sabihin pindutan ng pinindot)

}

iba pa

{

pinMode (Trigger_Pin, Output); / / Magpatulong ng pin

}

do_clock (); // Ang pulso ng orasan ay nabuo sa dulo ng bawat bit

// Proseso ng Pindutan B // Ang parehong pindutan ng NES ay bumubuo ng isang trigger sa Atari

kung (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); / / Unassert pin

}

iba pa

{

pinMode (Trigger_Pin, Output); / / Magpatulong ng pin

}

do_clock ();

// Laktawan ang Piliin ang Pindutan

do_clock ();

// Laktawan ang Start Button

do_clock ();

/ // UP direksyon

kung (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); / / Unassert pin

}

iba pa

{

pinMode (Up_Pin, Output); / / Magpatulong ng pin

}

do_clock ();

// Paunlarin ang DOWN direksyon

kung (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); / / Unassert pin

}

iba pa

{

pinMode (Down_Pin, Output); / / Magpatulong ng pin

}

do_clock ();

// Paraan ng LEFT na Paraan

kung (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); / / Unassert pin

}

iba pa

{

pinMode (Left_Pin, Output); / / Magpatulong ng pin

}

do_clock ();

// Direksyon ng KARAPATAN ng KARAPATAN

kung (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); / / Unassert pin

}

iba pa

{

pinMode (Right_Pin, Output); / / Magpatulong ng pin

}

do_clock (); / / Kinda walang silbi, ngunit pinanatili sa mantain ang pattern

/ / Pagkatapos mabasa ang lahat ng mga pindutan, maghintay ng 10 miliseconds bago ang susunod na pagbabasa

pagkaantala (10);

}

Hakbang 4: Nagpe-play!

Ngayon na ang circuit na nagtatrabaho ay nasubok sa dongle maaari mong ikonekta ito sa Atari. Ang Arduino board ay pagkatapos ay pinapatakbo ng connector ng joystick (samakatuwid ay hindi nangangailangan ng panlabas na kapangyarihan).

Masiyahan sa iyong console gamit ang bagong controller.