« SE3 PSE Binome2023-8 » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 46 : | Ligne 46 : | ||
Photographie lors de la soudure : | Photographie lors de la soudure : | ||
[[Fichier:ABBD5287-E8A9-42DC-AECC-35DDBC979780.jpg|vignette|Photo prise durant la soudure des composants.| | [[Fichier:ABBD5287-E8A9-42DC-AECC-35DDBC979780.jpg|vignette|Photo prise durant la soudure des composants.|500x500px|gauche]] | ||
= Intégration dans le jeu = | = Intégration dans le jeu = |
Version du 10 juin 2024 à 21:00
Préambule
Ce projet consiste à réaliser une manette de jeu, pour cela nous allons utiliser un micro-contrôleur : L'Atmega16u4.
Pour y parvenir, nous devons :
- Concevoir un PCB qui servira de manette
- Souder les différents composants
- Créer un programme qui envoie des données depuis la manette au PC (pour jouer)
- Créer un programme qui envoie des données depuis le PC à la manette (en l'occurrence, allumer les LEDs en fonction du nombre de vies restantes)
Lien de l'archive GiT: Archive GIT
Partie KICAD
Projet KiCAD : Fichier:SE3-man-TEPELI-WACQUET.zip
Nous avons pour cela à disposition une archive Kicad à compléter.
Nous avions à disposition des connecteurs ISP pour pouvoir bootloader le micro-contrôleur, un connecteur ISP pour pouvoir téléverser nos codes et alimenter la carte, des boutons de Reset et HWB pour pouvoir réinitialiser la carte et permettre de téléverser de nouveaux programmes, ainsi que des boutons et des LEDs pour jouer au jeu.
Schématique KICAD :
Routage KICAD et Fichier SVG :
Soudure
On a commencé par le Quartz, le microcontrôleur et le connecteur ISP pour bootloader la carte.
On a commencé par le Quartz, le microcontrôleur et le connecteur ISP pour bootloader la carte.
Ensuite le port USB et on a vérifié si l'Atmega est alimenté.
Suite à cela, on a soudé les boutons HWB et RESET pour pouvoir se mettre en mode DFU.
Enfin, les LEDs et les boutons de jeu.
Photographie lors de la soudure :
Intégration dans le jeu
Bootloading
Avoir de pouvoir téléverser de codes, nous avons dû bootloader la carte via le connecteur ISP et une carte Arduino.
Implémentation des boutons
Ensuite grâce au dossier ressource "Joystick", nous avons pu contrôler le vaisseau de SpaceInvaders.
Pour que notre carte soit considérée comme un Joystick, il faut qu'elle comporte 2 axes de déplacement, les boutons ne sont pas obligatoires.
Notre carte ne comporte que 4 boutons, nous avons décidé d'en utiliser 2 en tant que boutons et 2 en tant qu'axe X, l'axe Y existe mais n'est pas implémentée, nous avons complétement supprimé l'axe Z.
Nous avons seulement eu besoin de modifier le Makefile pour pouvoir cibler la carte bootloadée et les conditions de modification des valeurs des axes et des boutons.
Lors de notre conception, nous avons relié les boutons au ground, nous avons donc programmer en inverse pour utiliser correctement nos boutons.
Nous avons testé ce code grâce à l'outil : jstest-gtk, qui nous montre de façon visuel l'état des axes et des boutons.
Nous avons ensuite modifié le code d'un de nos SpaceInvaders, grâce à un tutoriel, pour nous permettre d'utiliser la manette.
Implémentation des LEDs
Pour cette partie, nous avons utilisé et complété le dossier ressource "Minimal" et la libusb .
Nous avons d'abord essayer de piloter les LEDs directement avec les registres.
On positionne les pins connectés aux LEDs en Output :
DDRF &= 0b11001100;
Ensuite nous envoyons soit des 1 ou des 0 pour respectivement éteindre ou allumer les LEDs.
Lors de la conceptions, nous avons connectés nos LEDs au VCC, le pilotage des LEDs se fait aussi en inverse.
Par exemple :
PORTF &= 0b11001100;
_delay_ms(1000);
PORTF |= 0b00110011;
Ce code allume les LEDs pendant 1 seconde puis les éteint , nous utilisons des masques pour ne pas influencer sur les autres éléments connectés au registre F.
Nos LEDs sont connectées au Registre F, ce registre pose problème pour contrôler nos LEDs, nous avons donc dû utiliser le morceau de code suivant :
MCUSR &= ~(1 << WDRF);
MCUSR &= ~(1 << WDRF);
Fusion des implémentations boutons et LEDs
Maintenant que nous avons implémenté les boutons et les LEDs séparement, nous allons les fusionner en un seul programme.
Bilan du Projet
Nous avons réussi à concevoir et jouer avec la manette au SpaceInvaders mais nous n'avons pas réussi à utiliser la libusb pour envoyer des données pour contrôler les LEDs. Nous n'avons pas souder certaines LEDs et résistances, elles n'étaient pas très importantes car elles étaient pilotées directement par les boutons et non par le micro-contrôleur.