![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)](https://img.gwsigeps.com/img/circuits/arduino-lets-you-play-atari-2600-and-zx-spectrum-using-a-nes-controller-5.jpg)
Table des matières:
- Provisions:
- Étape 1: Discussion de fond
- Étape 2: Le "grand" circuit
- Étape 3: Programmation de l'Arduino et réalisation de certains tests
- Étape 4: jouer!
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.