Arduino vous permet de lire les spectres Atari 2600 et ZX à l'aide d'un contrôleur NES: 4 étapes (avec photos)

Arduino vous permet de lire les spectres Atari 2600 et ZX à l'aide d'un contrôleur NES: 4 étapes (avec photos)

Table des matières:

Anonim

Ce manuel vous explique comment utiliser un contrôleur NES dans Atari 2600 ou ZX Spectrum (avec l'interface Kempston) à l'aide d'un Arduino.

Provisions:

Étape 1: Discussion de fond

J'ai récemment acquis deux Atari 2600 et plusieurs joysticks. Les deux consoles fonctionnaient mais les 5 manettes de jeu étaient endommagées et irréparables. En effet, il est très facile à trouver. Il est facile de trouver une ancienne console Atari 2600 qui fonctionne mais il est difficile de trouver un joystick original en état de marche.

D'autre part, j'avais acheté un contrôleur «générique» NES de rechange sur un marché aux puces qui fonctionnait parfaitement.

J'ai envisagé d'utiliser un microcontrôleur pour convertir les signaux sérialisés de la manette NES en signaux parallèles requis par Atari 2600, mais je me suis demandé ensuite si, au lieu d'une carte de microcontrôleur personnalisée, je pouvais utiliser un Arduino. Ainsi, d’autres personnes peu qualifiées en électronique pourraient assembler facilement leurs propres adaptateurs.

Étape 2: Le "grand" circuit

Le circuit utilise uniquement l’Arduino et quelques connecteurs. Le code est très petit, donc n'importe quelle carte Arduino fera l'affaire. Mais ici ou là suit la liste.

Nomenclature:

- 1 Arduino (n'importe quelle version fera l'affaire)

- 2 connecteurs mâles DB-9. Un pour le contrôleur '' générique '' NDA et un autre pour le dongle de test

- 1 connecteur DB-9 Femme à brancher sur l’Atari.

- 5 Leds pour le dongle de test

- 5 résistances 330 Ohms 1/4 Watt pour le dongle de test

- Un tas de fils

Bien sûr, il est possible de réutiliser l’ancien câble Atari Joystick au lieu des câbles DB9 femelle plus.

Il est également possible de couper le câble du contrôleur NES et de le connecter directement à l'Arduino, mais vous devez identifier les fils dans le câble.

Étape 3: Programmation de l'Arduino et réalisation de certains tests

Compilez et téléchargez le code ci-dessous sur l’Arduino. Il a été développé avec IDE version 0.22. Avant de connecter le circuit à ATARI, utilisez un dongle pour vérifier le comportement correct du circuit. Les leds du dongle doivent être activés conformément aux boutons du contrôleur NES. Les deux boutons d'action sont mappés sur le même (et unique) bouton Atari. Pour le test avec le dongle, il est nécessaire d’alimenter la carte Arduino.

//

// Joue sur ATARI 2600 avec le contrôleur NES Par Danjovic, 2012

// Compilé sur Arduino 0.22

//

/*

Joystick ATARI 2600

Active séquentiellement les instructions suivantes à partir d’un joystick Atari 2600

HAUT, BAS, GAUCHE, DROITE, TRIGGER

CONNEXIONS SUR LE JOYSTICK ATARI

Fonction DB-9 Arduino AVR

UP 1 Pin 2 (PD2)

DOWN 2 Pin 3 (PD3)

GAUCHE 3 Broche 4 (PD4)

DROITE 4 Pin 5 (PD5)

+ 5VCC 5 + 5V + Vcc

TRIGGER 6 Pin 6 (PD6)

GND 9 GND GND

*/

/*

Contrôleur NES

Contient un registre à décalage CMOS (CD4021). Changement de données sur la bordure de relèvement de l'horloge

séquence de boutons ci-dessous.

loquet ___ --- _______________________

L'horloge _______-__-__-__-__-__-__-__

Données xxxA B SL ST UP UP LW RG

Le contrôleur NES est alimenté par l'Arduino.

Fonction DB-9 Arduino AVR

DATA 2 Pin 8 (PB0)

VERROU 3 Pin 9 (PB1)

HORLOGE 4, broche 10 (PB2)

+ 5VCC 7 Pin 11 (PB3)

GND 8 Pin 12 (PB4)

*/

// s'adapte à votre configuration matérielle

#define POWER_VIA_PORT_B3_B4 1 // utilise les broches de port B3 et B4 comme source d'alimentation

#undef int

#comprendre

/ * Connexions du port Atari Joystick * /

int Up_Pin = 2;

int Down_Pin = 3;

int Left_Pin = 4;

int Right_Pin = 5;

int Trigger_Pin = 6;

/ * Connexions du contrôleur NES * /

int Data_Pin = 8;

int Latch_Pin = 9;

int Clock_Pin = 10;

int PWR5V_Pin = 11; // Puissance

int PWRGND_Pin = 12;

void setup ()

= _BV (PORTB3)

// Effectue un cycle d'horloge sur la ligne d'horloge du contrôleur NES

void do_clock (void) {

digitalWrite (Clock_Pin, HIGH); // Relever la goupille

délaiMicrosecondes (10); // fait une pause de 10 microsecondes

digitalWrite (Clock_Pin, LOW); // désactive l'épingle

délaiMicrosecondes (50); // fait une pause de 10 microsecondes supplémentaires

}

/*

Voici notre boucle principale. Il émet une impulsion de verrouillage puis commence à rétablir l'état des boutons.

Les broches du port du joystick Atari sont définies en fonction de l’état des bits lus à partir du décalage

inscrivez-vous à l'intérieur du contrôleur NES.

*/

boucle vide ()

{

digitalWrite (Latch_Pin, HIGH); // Augmente le signal de verrouillage

délaiMicrosecondes (30); // maintenez-le pendant 30 microsecondes

digitalWrite (Latch_Pin, LOW); // retourne le signal de verrouillage au niveau bas

délaiMicrosecondes (10); // maintenez-le pendant plus de 10 microsecondes

// Bouton de traitement A (rappelez-vous: un zéro signifie que vous avez appuyé sur un bouton)

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Broche Unassert (zéro signifie que le bouton est enfoncé)

}

autre

{

pinMode (Trigger_Pin, OUTPUT); // Assert pin

}

do_clock (); // Une impulsion d'horloge est générée à la fin de chaque bit

// Bouton de traitement B // Les deux boutons NES génèrent un déclencheur pour Atari

if (digitalRead (Data_Pin))

{

pinMode (Trigger_Pin, INPUT); // Unassert pin

}

autre

{

pinMode (Trigger_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Ignorer le bouton de sélection

do_clock ();

// Ignorer le bouton de démarrage

do_clock ();

// direction UP

if (digitalRead (Data_Pin))

{

pinMode (Up_Pin, INPUT); // Unassert pin

}

autre

{

pinMode (Up_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Traite la direction VERS LE BAS

if (digitalRead (Data_Pin))

{

pinMode (Down_Pin, INPUT); // Unassert pin

}

autre

{

pinMode (Down_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Traiter direction gauche

if (digitalRead (Data_Pin))

{

pinMode (Left_Pin, INPUT); // Unassert pin

}

autre

{

pinMode (Left_Pin, OUTPUT); // Assert pin

}

do_clock ();

// Traiter à droite

if (digitalRead (Data_Pin))

{

pinMode (Right_Pin, INPUT); // Unassert pin

}

autre

{

pinMode (Right_Pin, OUTPUT); // Assert pin

}

do_clock (); // Un peu inutile, mais gardé pour maintenir le modèle

// Après avoir lu tous les boutons, attendez 10 millisecondes avant de lire

délai (10);

}

Étape 4: jouer!

Maintenant que le fonctionnement du circuit a été testé avec le dongle, vous pouvez le connecter à l'Atari. La carte Arduino sera alors alimentée par le connecteur du joystick (ne nécessite donc pas d'alimentation externe).

Profitez de votre console avec le nouveau contrôleur.