|
||||||||
|
||||||||
| This page is also available in English | ||||||||
| Résumé du projet | [cacher] |
On m'a demandé d'essayer de convertir une manette d'Intellivision 1 à USB et j'ai réussi.
Le résultat final est visible sur la photo à gauche.Une partie amusante de ce projet a été d'avoir à découvrir le fonctionnement de la manette moi même. En effet, mes recherches ne m'ont pas permis d'obtenir de l'information pertinante sur le fonctionnement de la manette. Mais ne vous en faites pas, j'ai au moins pris le temps de documenter son fonctionnement dans la section fonctionnement. Les caractéristiques principales du résultat sont:
|
| Schéma | [cacher] |
Voici le schéma:![]() Une table faisant correspondre les numéros de fils avec des couleurs est donnée dans la section Fonctionnement. Important: Ces numéros de fils sont pour les manette d'Intellivision 1 seulement! Pour le moment, je n'ai aucune idée du câblage des autres manettes similaires. Si vous souhaitez essayer avec une autre manette, je vous suggère d'utiliser l'information de la section fonctionnement pour comparer avec votre manette. N'oubliez pas de me faire connaître vos résultats! Liste des composantes:
Pour la connection USB, simplement dénuder un cable USB et souder les fils directement sur le circuit. USB utilise des couleurs de fils standardisés, mais faites attention, il y a parfois des exceptions.
|
| Programmation du microcontrôleur | [cacher] |
| Les micrôcontroleurs sont des composantes qui doivent être programmés pour qu'elles fassent
quelque chose d'utile. Voici donc le fichier .hex qu'il faut programmer dans le microcontroleur: intellivusb-1.0.hex Plusieurs microcontrôleurs possèdent quelque chose qu'on appelle 'Fuse bytes'. Dans le cas du ATmega8, il y en a deux: Le 'high byte' et le 'low byte'. Ces deux octets servent à configurer certains paramètres du microcontrôleur. Quel type d'horloge? Crystal? Résonateur? Oscillateur RC interne? Permettre la programmation par ISP? Il est impératif de configurer les fuse bytes avec les bonnes valeurs. L'utilisation de mauvaises valeurs peut rendre le microcontrôleur inutilisable. Pour ce projet, voici les bonnes valeurs: high byte = 0xc9, low byte = 0x9f Pour de l'information sur la programmation d'un AVR, visitez ma page sur la programmation d'AVR |
| Code source | [cacher] |
| Le code source est disponible sous licence GPL et se compile avec avr-gcc. Pour éviter
des conflits, veuillez ne pas distribuer de versions où le report descriptor a été
modifié sans d'abord remplacer le Vendor ID et Product ID par les vôtres. intellivusb-1.0.tar.gz |
| Circuit pour montage en surface | [cacher] |
La version en montage en surface utlise mon circuit imprimé
Multiuse PCB2.
Voici à quoi ce projet ressemble lorsque ce circuit est utilisé:
|
| Fonctionnement | [cacher] |
| Au début du projet j'ai cherché sur le net pour de l'information concernant le fontionnement
de la manette mais je n'ai rien trouvé d'utile. J'ai donc du découvrir
le fonctionnement moi même. Ce fut bien intéressant. Voici donc
comment la manette fonctionne. (D'après mes observations). La manette possède 12 boutons placés comme sur un clavier de téléphone, 4 boutons sur les côtés (Les boutons supérieurs de chaque côté sont équivalents), et un disque rotatif. La manette que j'ai utilisé (Intellivision 1) possède 9 conducteurs et le connecteur est prévu pour être branché à l'intérieur de la console. Voici une table associant les couleurs et les numéros de fils:
Considérant qu'il y a seulement 9 fils et qu'il n'y a pas d'électronique dans la manete, il est évident que les boutons sont organisés sous forme de matrice. Il faut donc en faire le balayage en logiciel. Voici un tableau montrant la relation entre les fils et les boutons: ![]() Le disque détecte 16 directions différentes. La direction actuelle est transmise en utilisant 6 fils (#2 à #6, #1 commun). On constate que ces fils entrent en conflit avec ceux du clavier 'téléphone'. Ces pourquoi les 12 boutons 'téléphone' ne peuvent pas être utilisés en même temps que le disque. On remarque qu'il y a toujours qu'un seul bit qui change entre les directions adjacentes. Cela vous rappelle le code Gray?
![]() Lorsqu'aucun des fils #2 à #6 est relié au fil 1, le disque est à la position de repos (Aucune direction/Centré).
|