Commit df996f823d73bb8f26d0fc04421d8e41c7562c50

Authored by rguillom
1 parent 0fd27a37

fix + README

Showing 3 changed files with 73 additions and 63 deletions   Show diff stats
Pgm PC/init_USB.c
... ... @@ -232,7 +232,7 @@ int main(){
232 232 receive_data(tab_PA, &boutons, &joystick_x, &joystick_y); //Réception des boutons et joystick
233 233 //printf("fin rcpt\n");
234 234 printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%02x\n", boutons, joystick_x, joystick_y); //Affichage si changement
235   - if ((boutons != boutons_anc) || (joystick_x != joystick_x_anc) || (joystick_y != joystick_y_anc)) printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%c\n", boutons, joystick_x, joystick_y); //Affichage si changement
  235 + //if ((boutons != boutons_anc) || (joystick_x != joystick_x_anc) || (joystick_y != joystick_y_anc)) printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%c\n", boutons, joystick_x, joystick_y); //Affichage si changement
236 236  
237 237 boutons_anc = boutons;
238 238 joystick_x_anc = joystick_x;
... ...
README.md
... ... @@ -2,83 +2,105 @@ READ ME
2 2  
3 3 Tutorat système
4 4  
5   -Rémy Guillomon // Guillaume Cremaschi
  5 +Rémi Guillomon // Guillaume Cremaschi
6 6  
7   -Objectif : Créer une manette avec une carte Arduino relier en connexion USB avec un PC.
  7 +Objectif : Utiliser un shield Arduino de jeu et assurer la liaison USB à un PC.
8 8  
9   -Pour compiler, lancer et ultiliser les programmes :
  9 +I. Compilations et exécution
10 10  
  11 +Les compilations et l'exécution se déroulent en plusieurs étapes.
11 12  
12   -Étape 1: Vérifier que la carte ne soit pas flashée.
  13 +- Étape 1: Vérifiez que la carte ne soit pas flashée.
13 14  
14   -\>lsusb
  15 +`lsusb`
15 16  
16   -On doit voir une ligne "Arduino SA Uno (CDC ACM)" apparaître.
17 17  
18   -Si elle est déjà flashée, il faut enregistrer le binaire du lien : https://raw.githubusercontent.com/arduino/ArduinoCore-avr/master/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex
  18 +Si l'ATMega16u2 est déjà flashé, il faut enregistrer le binaire du lien : https://raw.githubusercontent.com/arduino/ArduinoCore-avr/master/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-uno.hex
19 19  
20   -Court-circuiter les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur
  20 +Court-circuitez les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur
21 21  
22   -Puis écrire :
  22 +Puis écrivez dans un terminal :
  23 +```
  24 +\> dfu-programmer atmega16u2 erase
  25 +\> dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex
  26 +\> dfu-programmer atmega16u2 reset
  27 +```
23 28  
24   -\>dfu-programmer atmega16u2 erase
  29 +Débranchez et rebranchez le port USB de la carte.
25 30  
26   -\>dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex
  31 +- Étape 2 : Compilation et chargement du programme main.c dans l'ATMega328P
27 32  
28   -\>dfu-programmer atmega16u2 reset
  33 +Dans un terminal, entrez ces commandes.
  34 +```
  35 +make all
  36 +make upload
  37 +```
  38 +Passez en root pour l'upload si nécessaire.
29 39  
30   -Débrancher et rebrancher le port USB de la carte.
  40 +Vous pouvez tester ce progrmme directement avec la commande
31 41  
32   -Étape 2 :
  42 +`minicom -8 -o -b 9600 -D /dev/ttyACM0`
33 43  
34   -Compiler et Upload le programme main.c sur l'arduino.
35 44  
36   -\>make all
  45 +- Étape 3: Flasher l'ATMega16U2 avec le programme de la partie 3
37 46  
38   -\>make upload
  47 +Entrez dans le répertoire suivant et compilez
  48 +```
  49 +cd lufa-master/PolytechLille/PAD/
  50 +make all
  51 +```
39 52  
40   -Passer en root pour l'upload si nécessaire.
  53 +Puis Flashez le micro-contrôleur :
  54 +Court-circuitez les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur et tapez ces lignes
41 55  
42   -Remarque : Nous pouvons tester ce progrmme directement avec :
  56 +```
  57 +dfu-programmer atmega16u2 erase
  58 +dfu-programmer atmega16u2 flash PAD.hex
  59 +dfu-programmer atmega16u2 reset
  60 +```
43 61  
44   -\>minicom -8 -o -b 9600 -D /dev/ttyACM0
  62 +Débranchez et rebranchez le port USB de la carte à nouveau.
45 63  
  64 +- Étape 4: Compilation du programme sur le PC
46 65  
47   -Le programme est maintenant sur l'Arduino.
  66 +Placez-vous dans le répertoire Pgm PC
48 67  
  68 +`cd ../../../Pgm\ PC/`
49 69  
50   -Étape 3:
51   -Flasher la carte
  70 +et compilez.
52 71  
53   -\>cd lufa-master/PolytechLille/PAD/
  72 +`gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra`
54 73  
55   -\>make all
  74 +- Etape 5 :
56 75  
57   -Court-circuiter les broches GND et RESET de l'ATMega16U2 sur l'ICSP de ce micro-contrôleur
  76 +Vous pouvez lancer le programme en exécutant le fichier généré.
  77 +`
  78 +./exe
  79 +`
58 80  
59   -\>dfu-programmer atmega16u2 erase
  81 +II. Etat du programme
60 82  
61   -\>dfu-programmer atmega16u2 flash PAD.hex
  83 +- Ce qui fonctionne :
62 84  
63   -\>dfu-programmer atmega16u2 reset
  85 + Le programme de l'ATMega328P est fonctionnel. Lors d'un changement d'état des boutons ou d'un déplacement du joystick, il envoie à la suite un octet de début de trame, l'octet associé au boutons, la valeur de l'axe x du joystick et celle de l'axe y. Ces trois derniers octets sont mis en forme comme conseillé dans l'énoncé.
64 86  
65   -Débrancher et rebrancher le port USB de la carte.
  87 + La réclamation des interfaces se déroule sans accroc.
66 88  
67   -Étape 4:
68   -Compiler la partie 1 et l'exécuter.
  89 + La connexion entre l'ATMega16U2 et le PC par les points d'accès s'établit correctement. De plus, l'envoi des données sur la liaison série par l'ATMega328P fonctionne (testé avec minicom).
69 90  
70 91  
71   -\>cd ../../../Pgm\ PC/
  92 +- Ce qui ne fonctionne pas :
  93 +
  94 + Nous n'avons pas eu l'occasion de réaliser la commande des LED depuis l'exécutable du PC.
  95 +
  96 + La réception des données sur la liaison série de l'ATmega16U2, via la fonction Reception_Serie() n'est en effet pas opérationnelle. Une fois initialisés, les octets des boutons et des axes des joysticks, sont bien transmis au PC (et affichés sur le terminal) mais leur valeur ne change pas malgré les intéractions avec la manette.
  97 +
  98 + Il est possible que la commande des LED via le PC ne soit pas non plus fonctionnelle à cause du premier point abordé.
72 99  
73   -\>gcc -o exe init_USB.c -lusb-1.0 -Wall -Wextra
74 100  
75   -\>./exe
76 101  
77 102  
78 103  
79   -Ce qui marche :
80 104  
81   -_ La Partie 2, fonctionne correctement et compile sans warnings.
82 105  
83 106  
84   -Ce qui ne marche pas : (La partie 3 marche-t-elle ?)
... ...
... ... @@ -80,20 +80,20 @@ void commande_leds(){
80 80 if (temp_serial !=0){
81 81 leds = temp_serial;
82 82 // Allumer LED de 'A' à 'F'
83   - if (leds == 65) PORTB = PORTB | 0x01;
84   - if (leds == 66) PORTB = PORTB | 0x02;
85   - if (leds == 67) PORTB = PORTB | 0x04;
86   - if (leds == 68) PORTB = PORTB | 0x08;
87   - if (leds == 69) PORTB = PORTB | 0x10;
88   - if (leds == 70) PORTB = PORTB | 0x20;
  83 + if (leds == 'A') PORTB = PORTB | 0x01;
  84 + if (leds == 'B') PORTB = PORTB | 0x02;
  85 + if (leds == 'C') PORTB = PORTB | 0x04;
  86 + if (leds == 'D') PORTB = PORTB | 0x08;
  87 + if (leds == 'E') PORTB = PORTB | 0x10;
  88 + if (leds == 'F') PORTB = PORTB | 0x20;
89 89  
90 90 // Eteindre LED de 'a' à 'f'
91   - if (leds == 97) PORTB = PORTB & 0xfe;
92   - if (leds == 98) PORTB = PORTB & 0xfd;
93   - if (leds == 99) PORTB = PORTB & 0xfb;
94   - if (leds == 100) PORTB = PORTB & 0xf7;
95   - if (leds == 101) PORTB = PORTB & 0xef;
96   - if (leds == 102) PORTB = PORTB & 0xdf;
  91 + if (leds == 'a') PORTB = PORTB & 0xfe;
  92 + if (leds == 'b') PORTB = PORTB & 0xfd;
  93 + if (leds == 'c') PORTB = PORTB & 0xfb;
  94 + if (leds == 'd') PORTB = PORTB & 0xf7;
  95 + if (leds == 'e') PORTB = PORTB & 0xef;
  96 + if (leds == 'f') PORTB = PORTB & 0xdf;
97 97 }
98 98 }
99 99  
... ... @@ -174,15 +174,3 @@ int main(void){
174 174 }
175 175 return 0;
176 176 }
177   -
178   -
179   -
180   -
181   -
182   -
183   -
184   -
185   -
186   -
187   -
188   -
... ...