Talaan ng mga Nilalaman:
- Mga Kagamitan:
- Hakbang 1: Background Talk
- Hakbang 2: Ang 'malaking' Circuit
- Hakbang 3: Programming ang Arduino at Paggawa ng Mga Pagsusuri
- Hakbang 4: Nagpe-play!
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.