« SE3 PSE Binome2023-4 » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 69 : | Ligne 69 : | ||
return 0; | return 0; | ||
} | } | ||
<pre> | </pre> | ||
ainsi que le Makefile fournit par notre enseignant: | ainsi que le Makefile fournit par notre enseignant: | ||
Ligne 121 : | Ligne 121 : | ||
size: $(TARGET).elf | size: $(TARGET).elf | ||
avr-size --format=avr --mcu=$(MCU) $(TARGET).elf | avr-size --format=avr --mcu=$(MCU) $(TARGET).elf | ||
<pre> | </pre> | ||
==Programmation µC== | ==Programmation µC== |
Version du 10 juin 2024 à 18:25
Notre manette
Introduction
Le projet que nous présentons ici vise à concevoir et réaliser une manette de jeu personnalisée, intégrant des composants électroniques simples et des techniques de programmation avancées. À travers ce projet, nous avons cherché à combiner l'apprentissage de la conception de circuits imprimés (PCB) avec le logiciel KiCad, la soudure des composants électroniques, ainsi que la programmation d'un microcontrôleur AVR pour faire fonctionner la manette.
Notre objectif principal était de créer une manette dotée de quatre boutons poussoirs et de quatre LED, toutes intégrées sur une carte électronique. Nous avons choisi KiCad pour sa flexibilité et ses outils puissants de conception de schémas et de routage de PCB. La programmation du microcontrôleur a été réalisée en utilisant des outils comme LUFA et LIBUSB, permettant ainsi la communication USB entre la manette et un ordinateur.
Conception Kicad
Premièrement, nous devons modéliser le schéma de notre carte PCB, pour cela nous avons fait le choix du logiciel dit Kicad pour sa simplicité et son efficacité mise en avant par les enseignants.
Nous nous somme inspiré de différents schéma déjà existant que les enseignants nous on fournit ainsi que nos propres recherches pour modéliser notre cartes et y intégré tout les éléments spécifique à notre projets, voici donc le schéma final de notre carte:
Une fois la schématique de notre manette validée par les enseignants, nous passons au routage de notre système, le routage consiste à préparer la fabrication de notre carte et lui donner l'allure souhaité en agençant minutieusement chaque composant et chaque fil de cuivre les reliant les un aux autres, voici notre routage complet et validé par nos enseignants:
Soudure
Une fois la carte sortie de fabrication et reçu en salle, l'heure est à la soudure de nos composants sur notre PCB, pour être rigoureux chaque composant, après avoir été soudé, doit être testé avec un multimètre pour vérifier la continuité à travers notre circuit.
Voici une photo de la carte soudée :
Programmation
Programmateur AVR
Nous pouvons dès à présent attaquer la partie programmation, nous allons tester nos LED en codant un simple code permettant de les faire clignoter, nous allons utiliser un programmateur AVR (à défaut d'avoir bootloader la carte pour l'instant) pour programmer pour µC et exécuter le code
voici le code en question:
#include <stdio.h> #include <avr/io.h> #include <util/delay.h> #define F_CPU 8000000UL // Définition de la fréquence du microcontrôleur (8 MHz) int main(void) { CLKSEL0 = 0b00010101; // sélection de l'horloge externe CLKSEL1 = 0b00001111; // minimum de 8Mhz CLKPR = 0b10000000; // modification du diviseur d'horloge (CLKPCE=1) CLKPR = 0; // 0 pour pas de diviseur (diviseur de 1) // Configuration des broches PD1 et PD2 comme sorties DDRD |= (1 << PD1) | (1 << PD2); while (1) { // Allumer la LED connectée à PD1 PORTD |= (1 << PD1); _delay_ms(500); // Attendre 500 millisecondes // Éteindre la LED connectée à PD1 et allumer la LED connectée à PD2 PORTD &= ~(1 << PD1); PORTD |= (1 << PD2); _delay_ms(500); // Attendre 500 millisecondes // Éteindre la LED connectée à PD2 PORTD &= ~(1 << PD2); _delay_ms(500); // Attendre 500 millisecondes } return 0; }
ainsi que le Makefile fournit par notre enseignant:
export CC = avr-gcc export MCU = atmega8u2 export TARGET_ARCH = -mmcu=$(MCU) export CFLAGS = -Wall -I. -DF_CPU=16000000 -Os #-g export LDFLAGS = -g $(TARGET_ARCH) -lm -Wl,--gc-sections # -Os TARGET = AVR_prog TERM = /dev/ttyUSB0 #TERM = /dev/ttyACM0 CPPFLAGS = -mmcu=$(MCU) PGMER = -c stk500v1 -b 57600 -P $(TERM) PGMERISP = -c stk500v1 -b 115200 -P $(TERM) ARVDUDECONF= -C /usr/local/arduino/arduino-0021/hardware/tools/avrdude.conf export DUDE = /usr/bin/avrdude -F -v -p $(MCU) $(AVRDUDECONF) C_SRC = $(wildcard *.c) OBJS = $(C_SRC:.c=.o) all: $(TARGET).hex ass:$(C_SRC) $(CC) -S $(CPPFLAGS) $(CFLAGS) $< -o $@ clean: rm -f *.o %.o:%.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ $(TARGET).elf: $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) $(TARGET).hex: $(TARGET).elf avr-objcopy -j .text -j .data -O ihex $(TARGET).elf $(TARGET).hex upload: $(TARGET).hex stty -F $(TERM) hupcl # reset $(DUDE) $(PGMER) -U flash:w:$(TARGET).hex # $(DUDE) $(PGMERISP) -U flash:w:$(TARGET).hex size: $(TARGET).elf avr-size --format=avr --mcu=$(MCU) $(TARGET).elf
Programmation µC
Programmation via ISP
Après avoir bootloader notre microControlleur via l'ISP, notre manette est reconnaissable par l'ordinateur et prête à l'emploi, nous avons utiliser la commande "lsusb" dans le terminal pour voir si l'ordinateur détectait notre manette lorsque nous la branchons via USB:
Test des LED
LUFA & LIBSUB
Joystick
LED
Merge
Conclusion
GIT
projet git : https://archives.plil.fr/yyahiani/Yassine_Bilal_PSE.git