« SE3 PSE Binome2023-8 » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(32 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
=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: [https://archives.plil.fr/itepeli/Manette_1er_SystE.git Archive GIT] | |||
=Partie KICAD= | |||
Projet KiCAD : [[Fichier:SE3-man-TEPELI-WACQUET.zip]] | Projet KiCAD : [[Fichier:SE3-man-TEPELI-WACQUET.zip]] | ||
[[Fichier:Schematic manette cikad p2 0311.png|vignette|Capture d'écran du schématique de l'ATMega.| | Nous avons pour cela à disposition une archive Kicad à compléter. | ||
[[Fichier:Schematic manette p1 0311.png|vignette|Capture d'écran du schématique des autres composants.|centré| | |||
[[Fichier:Routage manette kicad 0311.png|vignette|Capture d'écran du routage de la carte.| | 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. | ||
[[Fichier:MANROUT0904.svg|vignette|Fichier SVG du routage de la carte.|centré | |||
[[Fichier:ABBD5287-E8A9-42DC-AECC-35DDBC979780.jpg|vignette|Photo prise durant la soudure des composants.|centré| | Schématique KICAD : | ||
[[Fichier:Schematic manette cikad p2 0311.png|vignette|Capture d'écran du schématique de l'ATMega.|500x500px|gauche]] | |||
[[Fichier:Schematic manette p1 0311.png|vignette|Capture d'écran du schématique des autres composants.|centré|815x815px]] | |||
Routage KICAD et Fichier SVG : | |||
[[Fichier:Routage manette kicad 0311.png|vignette|Capture d'écran du routage de la carte.|435x435px|gauche]] | |||
[[Fichier:MANROUT0904.svg|vignette|Fichier SVG du routage de la carte.|543x543px|centré]] | |||
=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 : | |||
[[Fichier:ABBD5287-E8A9-42DC-AECC-35DDBC979780.jpg|vignette|Photo prise durant la soudure des composants.|500x500px|centré]] | |||
[[Fichier:Photo carte soudé .jpg|vignette|¨Photo de la carte soudée]] | |||
= 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. | |||
[[Fichier:Screenshot from 2024-06-10 18-05-04.png|centré|vignette|Capture d'écran du code d'implémentation du Joystick|611x611px]] | |||
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. | |||
[[Fichier:VID 20240610 175557.mp4|centré|vignette|Vidéo des tests des boutons avec jstest-gtk]] | |||
Nous avons ensuite modifié le code d'un de nos SpaceInvaders, grâce à un tutoriel, pour nous permettre d'utiliser la manette.[[Fichier:VID 20240607 143829.mp4|centré|vignette|Démonstration de l'utilisation de 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 :<syntaxhighlight> | |||
DDRF &= 0b11001100; | |||
</syntaxhighlight>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 :<syntaxhighlight lang="c"> | |||
PORTF &= 0b11001100; | |||
_delay_ms(1000); | |||
PORTF |= 0b00110011; | |||
</syntaxhighlight> | |||
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 :<syntaxhighlight lang="c"> | |||
MCUSR &= ~(1 << WDRF); | |||
MCUSR &= ~(1 << WDRF); | |||
</syntaxhighlight> | |||
==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. |
Version actuelle datée du 10 juin 2024 à 21:31
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.