Commit df996f823d73bb8f26d0fc04421d8e41c7562c50
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,7 +232,7 @@ int main(){ | ||
232 | receive_data(tab_PA, &boutons, &joystick_x, &joystick_y); //Réception des boutons et joystick | 232 | receive_data(tab_PA, &boutons, &joystick_x, &joystick_y); //Réception des boutons et joystick |
233 | //printf("fin rcpt\n"); | 233 | //printf("fin rcpt\n"); |
234 | printf("Boutons : %02x, Joystick_x : %02x, Joystick_y :%02x\n", boutons, joystick_x, joystick_y); //Affichage si changement | 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 | boutons_anc = boutons; | 237 | boutons_anc = boutons; |
238 | joystick_x_anc = joystick_x; | 238 | joystick_x_anc = joystick_x; |
README.md
@@ -2,83 +2,105 @@ READ ME | @@ -2,83 +2,105 @@ READ ME | ||
2 | 2 | ||
3 | Tutorat système | 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,20 +80,20 @@ void commande_leds(){ | ||
80 | if (temp_serial !=0){ | 80 | if (temp_serial !=0){ |
81 | leds = temp_serial; | 81 | leds = temp_serial; |
82 | // Allumer LED de 'A' à 'F' | 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 | // Eteindre LED de 'a' à 'f' | 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,15 +174,3 @@ int main(void){ | ||
174 | } | 174 | } |
175 | return 0; | 175 | return 0; |
176 | } | 176 | } |
177 | - | ||
178 | - | ||
179 | - | ||
180 | - | ||
181 | - | ||
182 | - | ||
183 | - | ||
184 | - | ||
185 | - | ||
186 | - | ||
187 | - | ||
188 | - |