Interfacer un PS2 (PS2) Controller - CuriousInventor didacticiels

Intro: Il y a toutes sortes de guides qui expliquent comment interfacer un contrôleur PS2 déjà là-bas. L'objectif est ici de consolider les informations et le rendre aussi vite que possible pour se lever et courir. S'il vous plaît laissez-nous savoir au sujet des erreurs!

Mettre à jour. Consultez la bibliothèque ps2 que Bill Porter arduino a contribué à polir.

  • Interface matérielle / Connexions de câblage
  • Protocole logiciel
    • Niveau faible. comment octets individuels sont transférées
    • haut niveau. descriptions paquets / protocole
    • Bouton Mappages pour contrôleur PS2 Dual Shock et contrôleur Guitar Hero.
    • liste des commandes et des explications complètes.
  • Exemple commandes nécessaires pour lire tous analogiques (joysticks et pressions) et les moteurs de commande
  • Enregistré commande et de réponse entre le réel et le contrôleur PlayStation lors de la première connexion
  • projets MPLAB (code c) pour PIC18F4550 pour commander une PS2. Vous aurez besoin d'un programmeur (PICKIT2) et sans IDE de www.microchip.com, MPLAB.

Interface matérielle / connexions de câblage:

Interfacer un PS2 (PS2) Controller - CuriousInventor didacticiels

Couleurs de fil et fonctionnalités: Il y a 9 fils, 6 fils sont nécessaires au minimum pour parler au contrôleur: (horloge, données, commande, puissance - sol, attention). Pour faire fonctionner les moteurs de vibration, motor_power est également nécessaire.

Faible niveau - Comment Bytes et Packets sont transférés:

La station de lecture envoie un octet en même temps qu'il reçoit un (full duplex) via la liaison série. Les figures suivantes montrent des signaux réels entre un contrôleur de héros playstation et guitare configuré en mode analogique (barre de wammy renvoie la valeur à 7 bits (0x7f - 0x00)).

Interfacer un PS2 (PS2) Controller - CuriousInventor didacticiels

L'horloge est haut jusqu'à ce qu'un octet doit être envoyé. Il tombe alors faible (actif bas) pour démarrer 8 cylces au cours de laquelle les données sont simultanément envoyées et reçues. Lorsque le bord d'horloge tombe bas, les valeurs de la ligne commencent à changer. Lorsque l'horloge va de bas en haut, la valeur sont effectivement lus. Octets sont transférés LSB (bit le moins significatif) en premier lieu, de sorte que les bits de gauche (plus tôt dans le temps) sont moins importantes.

Interfacer un PS2 (PS2) Controller - CuriousInventor didacticiels

Interfacer un PS2 (PS2) Controller - CuriousInventor didacticiels

coups de portée montrant les lignes et accuser réception d'attention.

De haut niveau: la structure de paquets, commande et données Signification:

Une grande partie de cette section provient de la consolidation de Dowty et port homebrew de sniffer et émulateur.

Les paquets ont un en-tête de trois octets suivi par un supplément de 2, 6 ou 18 octets de données de commande et de commande supplémentaires (comme les états des boutons, les commandes de moteur de vibration, les pressions de boutons, etc.).

Un exemple que l'échange d'un contrôleur à double choc lors de la première branché:

par défaut du contrôleur en mode numérique et ne transmet que l'état de marche / arrêt des boutons du 4ème et 5ème octet. Aucune donnée de la manette, la pression ou les capacités de contrôle des vibrations.

(Aucun bouton pressé)

  • Chacun des 18 bits dans FF FF 03 correspondent à un octet de réponse, à partir des états numériques, puis 4 joysticks analogiques, puis 12 octets de pression.
  • Par défaut, les valeurs de pression ne sont pas renvoyés, donc c'est la commande qui est nécessaire pour leur permettre.

Byte Séquence Configuration du contrôleur pour le mode analogique + Bouton pression + Vibration Control

La séquence suivante configurera un contrôleur pour renvoyer toutes les valeurs analogiques disponibles et la carte également les moteurs gauche et droite pour commander octets 4 et 5.

-- 0x42 Sondage une fois juste pour le plaisir

-- 0x43 Go en mode de configuration

-- 0x44 Activer le mode analogique

-- 0x4D Configuration mappage de commande de moteur

-- 0x4F contrôleur de configuration pour retourner l'ensemble des valeurs de pression

-- 0x43 mode de configuration de sortie

-- 0x42 Exemple Poll (boucle this)

pressions de bouton (0xFF = entièrement enfoncé)

enregistrements Poignée de main (première communication) entre Play Station 2 et Contrôleurs Divers

Cet excellent listes de feuilles à la fois les commandes et les données de réponse entre une station de lecture et divers contrôleurs lorsque le dispositif de commande est tout d'abord branché. Comprend héros de guitare, double choc, un fil moins katana et knock-off chinois (regarde le même que le double choc).

À la fois un jeu de héros de guitare et jeu dirt bike (pour obtenir des données de commande de moteur de vibration) ont été utilisés.

Nous avons utilisé 2 PIC18F4550 faire le port renifler, voir ci-dessous pour télécharger le code.

Code de PIC18F4550 lire une PlayStation 2 Dual Shock ou Guitar Hero Controller

Le premier programme permet de configurer un contrôleur en mode analogique de sorte que tous les joysticks et les pressions de bouton peuvent être lus. Il met également la pression de gauche au contrôleur du moteur de vibration gauche et la pression de touche droite pour changer le moteur de vibration plus petit droit.

Chaque commande et le paquet de réponse est envoyé sur un port série à 57600 kbs.

Le deuxième programme peut fonctionner en deux modes:

  • Continous SPI série: chaque octet SPI est envoyé par le port série à 57600. Etant donné que la station de jeu communique à 512kbs, le code utilise un tampon circulaire pour capturer des octets SPI jusqu'à ce que le playstation fait une pause entre des paquets, au moment où il envoie les données via série.
  • Capturer en vrac et Dump: Caputer environ 650 octets de données dans des tampons, puis vider le lot entier à travers série. Nous avons utilisé ce code pour capturer la communication initiale entre une station de lecture et contrôleur quand ils se connectent. Il y a probablement environ 100 façons plus propre de le faire, mais les PICs que nous avions à portée de main n'avait qu'un seul port SPI, donc deux PICs ont été utilisés en même temps pour capturer à la fois la commande et les lignes de données. Un PIC renverrait c'est des enregistrements immédiatement, et l'autre attendrait pendant quelques secondes, au cours de laquelle un interrupteur a été renversé pour connecter le série du PC au 2e PIC.

Remarque: évitez l'horloge de connexion SPI du PIC à l'horloge d'une station de lecture lorsque le PIC est configuré en tant que maître SPI.