« I2L 2022 Groupe1 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(39 versions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
= Proposition de système =
== Proposition de système ==
Notre proposition :


Créer un pad numérique avec 12 touches, les chiffres (de 0 à 9), le point et la touche verrou numérique.
* Créer un pad numérique avec 12 touches, les chiffres (de 0 à 9), le point, la touche verrou numérique et trois led (rouge, bleu, vert).


= Contre-proposition =
Les propositions acceptées :
* La touche "verrou numérique" permet d'avoir une double signification des touches (numérique/flèches de direction), avec une LED de contrôle de l'activation du verrou.
* Un mini-simon est disponible en mode autonome, trois leds (rouge, bleu et vert) associées aux touches 1, 2 et 3.


== Contre-proposition ==
Pas de souci sur le principe. Mais étant donné que le code pour votre carte est le plus simple à réaliser vous devez ajouter une fonctionnalité supplémentaire.
Pas de souci sur le principe. Mais étant donné que le code pour votre carte est le plus simple à réaliser vous devez ajouter une fonctionnalité supplémentaire.


Ligne 11 : Ligne 15 :
* un jeu en mode autonome (quand le périphérique est alimenté sans être connecté à un bus USB), par exemple un mini-simon avec les 3 LED associées aux touches 1,2 et 3.
* un jeu en mode autonome (quand le périphérique est alimenté sans être connecté à un bus USB), par exemple un mini-simon avec les 3 LED associées aux touches 1,2 et 3.


= Fichiers =
== Fonctionnement du système embarqué ==


[[File:I2L-2022-CARUYER-MONBORREN.zip|Projet KiCAD]]
=== Le clavier ===
Lorsque le système embarqué est connecté sur un pc, celui-ci est en mode clavier numérique, on peut alors utiliser les touches allant de 0 à 9, la virgule et  la touche verrouillage numérique qui nous permet de passer en mode utilisation des flèches au lieu des chiffres.
 
=== Le simon ===
Lorsque le système embarqué est branché juste en alimentation (par exemple sur une batterie externe) celui-ci est en mode simon.
 
# Un nombre n de leds s'allument tour à tour pour montrer l'ordre, n étant un nombre entre 5 et 15
# Une fois l'affichage des leds terminé, le jeu attend une action de l'utilisateur par les boutons 1, 2, 3 ou 5 de l'utilisateur
# Lors de l'appui sur la touche 1, 2 ou 3 correspondantes aux leds rouge (1), bleu (2) et verte (3)
# Si le joueur appuie dans le mauvais ordre : il perd une vie sur les 3 de départs, si les 3 vies sont perdues la led rouge s'allume 5 fois rapidement signalant que le joueur a perdu et le jeu recommence du niveau n=5
# Si le joueur appuie dans le bon ordre : la led correspondante s'allume 100 ms et s'éteint, attendant la suite, si toute la combinaison est trouvée : les leds s'allument et s'éteignent dans l'ordre 5 fois puis n s'incrémente et rejoue une combinaison allant à n+1 leds
# Ce comportement (comportement de victoire) se fait en boucle lorsque l'intégralité des 10 niveaux est passé avec succès
# Comportement de perte : perte d'une vie
# Comportement lorsque le joueur n'a plus de vie : la led rouge s'allume 5 fois puis le jeu recommence au niveau 5 (début)
# Comportement de victoire de niveau : les leds s'allument et s'éteignent dans l'ordre 5 fois puis n s'incrémente
# Comportement de victoire des 10 niveaux : les 3 leds s'allument et s'éteignent en boucle
# Lors de l'appui sur la touche 5 (milieu) : les leds s'allument avec le nombre de vie du joueur (si 2 leds s'allument c'est que le joueur a 2 vies)
 
 
Ci dessous l'algorithme correspondant
<syntaxhighlight line="1">
Définir un nombre de LEDs entre 5 et 15
Définir un nombre de vies initial à 3
Définir un niveau initial à 5
 
Tant que le joueur n'a pas terminé les 10 niveaux avec succès :
    Générer une séquence de LEDs aléatoire de longueur égale au niveau actuel
    Afficher la séquence en allumant les LEDs tour à tour
 
    Réinitialiser l'index de la séquence à 0
    Réinitialiser le statut de victoire à vrai
 
    Tant que l'index de la séquence est inférieur à la longueur de la séquence et le statut de victoire est vrai :
        Attendre l'appui d'un bouton (1, 2, 3 ou 5) par le joueur
       
        Si le joueur appuie sur le bouton 5 :
          Afficher le nombre de vies restantes en allumant le nombre correspondant de LEDs
          Continuer à la prochaine itération du jeu
       
        Sinon:
          Si le bouton appuyé est différent de la LED attendue à l'index actuel de la séquence :
              Diminuer le nombre de vies du joueur de 1
 
              Si le nombre de vies du joueur est égal à 0 :
                  Allumer la LED rouge 5 fois rapidement pour signaler la défaite
                  Réinitialiser le niveau à 5
 
                  Sortir de la boucle de vérification
 
              Sinon :
                  Réinitialiser le statut de victoire à faux
                  Continuer à la prochaine itération de la boucle de vérification
 
          Sinon :
              Allumer la LED correspondante à l'index actuel de la séquence pendant 100 ms
              Éteindre la LED
 
              Augmenter l'index de la séquence de 1
    Si le statut de victoire est vrai :
        Allumer et éteindre toutes les LEDs dans l'ordre 5 fois
        Augmenter le niveau de 1
Fin du jeu
</syntaxhighlight>
 
== Programmes ==
Programme version 1:
 
* [[:Fichier:Projet SystemeEmbarque-LUFA V1.zip]].
 
Programmes version finale:
 
*[[:Fichier:Projet SystemeEmbarque-LUFA VF.zip]].
 
* Programme USB, LUFA :
** Le code se situe dans I2L/keyboard
** [[:Fichier:I2L-G1-programme-lufa.zip|I2L-G1-programme-lufa]]
 
== Schémas et images du système embarqué ==
 
=== Schémas du système embarqué: ===
 
* Schémas du système embarqué sur Kicad :[[Fichier:I2L-2022-G1-schema.pdf|thumb|400px|Schéma|néant]]
[[Fichier:I2L-2022-G1-PCB.pdf|thumb|400px|Carte|néant]]
 
=== Images/ vidéos ===
 
* Photo du système embarqué
 
[[Fichier:Carte soudée.jpg|néant|vignette]]Le système embarqué est divisé en deux parties, la première partie (la partie en haut) contenant le processeur, le connecteur et les leds.
 
La seconde partie elle contient les touches. Les deux parties sont connectés par 13 câbles, 1 étant la masse et les autres correspondent aux touches.
 
* Vidéo du simon
 
[[Fichier:Présentation simon.mp4|vignette|néant]]
 
== Problèmes rencontrés ==
Nous avons tout d'abord rencontré un problème sur la difficulté du projet, en effet par rapport à d'autres groupes, l'idée d'un clavier numérique de 12 touches étaient trop "simple".
 
Nous avons donc accepté la contre-proposition émise d'ajouter un simon et la possibilité d'utiliser les flèches avec le verrouillage numérique.
 
Il a donc fallu regarder le fonctionnement du jeu du simon, choisir deux autres led car au départ nous n'en avions qu'une.
 
Le dernier problème que nous avons rencontré a été de distinguer la mode clavier du mode simon. Dans la première version du code le simon ce lance lorsque on le connecte au pc et ensuite il passe en mode clavier.
 
Ce problème est résolu dans la version finale.
 
== Compilation ==
 
=== Utilitaires ===
https://winavr.sourceforge.net/
 
https://github.com/mariusgreuel/avrdude/releases
* gcc-avr
* avr-libc
* dfu-programmer
** DFU/USB
 
=== Compilation par ligne de commande: ===
compilation :
avr-gcc -mmcu=atmega328p -DF_CPU=8000000UL -c -Wall -I. -Os timer.c -o timer.o (8000000 au lieu de 16000000)
 
* fichier .c → fichier .o
 
édition des liens :
avr-gcc -mmcu=atmega328p -g -lm -Wl,--gc-sections -o timer.elf timer.o (.elf exécutable)
 
* fichier .c → fichier .elf
 
téléversement :
avr-objcopy -j .text -j .data -O ihex timer.elf timer.hex
 
* fichier .elf → fichier .hex
 
commande dfu-programmer :
dfu-programmer atmega16u2 erase
dfu-programmer atmega16u2 flash timer.hex
dfu-programmer atmega16u2 reset
commande compilation makefile:<syntaxhighlight>
make dfu
</syntaxhighlight>
 
== Tableau des touches ==
{| class="wikitable"
|+
! rowspan="7" |cables
! colspan="6" |
|-
| colspan="2" |'''colonne 1'''
| colspan="2" |'''colonne 2'''
| colspan="2" |'''colonne 3'''
|-
|port
|touche
|port
|touche
|port
|touche
|-
|PB7
|7
|PB5
|8 / flèche vers le haut
|PB3
|9
|-
|PB6
|4 / flèche vers la gauche
|PB4
|5
|PB2
|6 / flèche vers la droite
|--
|PD4
|1
|PD6
|2 / flèche vers le bas
|PB1
|3
|-
|PD3
|verrou num
|PD5
|0
|PB0
|. / ;
|}
[[Fichier:G1-I2L-image-clavier-boutons.jpg|néant|vignette|clavier boutons]]
 
== Tableau des leds ==
{| class="wikitable"
|+
! rowspan="5" |
! colspan="4" |
!
|-
!
!port
!led
!touches
!bit
|-
|led 1
|PD0
|rouge
|chiffres ou flèches
|0x01
|-
|led 2
|PD1
|bleu
|verrou num
|0x02
|-
|led 3
|PD2
|vert
|arrêt défil
|0x03
|}
[[Fichier:Leds.jpg|néant|vignette]]
 
== Conclusion ==
 
Ce projet de système embarqué a été réalisé avec succès, très peu de problèmes ont été rencontrés.
 
Il nous a permis d'apprendre à mettre en place un système embarqué, à comprendre les composants dont il a besoin et lesquels il peut contenir. Nous avons appris à paramétrer des touches, à allumer des leds via des actions sur des touches définies, à définir le mode de connexion du système afin de changer le mode de fonctionnement (clavier ou jeu).
 
On a également appris à récupérer le positionnement d'une touche via le schéma afin d'y définir une action.
 
 
Ce projet nous a appris beaucoup de choses et a été réalisé dans une bonne ambiance !
 
== Fichiers ==
Projet KiCAD : [[File:I2L-2022-CARUYER-MONBORREN.zip]].
 
Programme C : [[File:I2L-2022-G1-programme.zip]].
 
Programme V1: [[:Fichier:Projet SystemeEmbarque-LUFA V1.zip]] .
 
Programme version finale: [[:Fichier:Projet SystemeEmbarque-LUFA VF.zip]] .
 
Programme de la LUFA : [[:Fichier:I2L-G1-programme-lufa.zip|I2L-G1-programme-lufa]]

Version actuelle datée du 16 juin 2023 à 07:41

Proposition de système

Notre proposition :

  • Créer un pad numérique avec 12 touches, les chiffres (de 0 à 9), le point, la touche verrou numérique et trois led (rouge, bleu, vert).

Les propositions acceptées :

  • La touche "verrou numérique" permet d'avoir une double signification des touches (numérique/flèches de direction), avec une LED de contrôle de l'activation du verrou.
  • Un mini-simon est disponible en mode autonome, trois leds (rouge, bleu et vert) associées aux touches 1, 2 et 3.

Contre-proposition

Pas de souci sur le principe. Mais étant donné que le code pour votre carte est le plus simple à réaliser vous devez ajouter une fonctionnalité supplémentaire.

Je vous propose les difficultés suivantes :

  • une touche "verrou numérique" qui permet d'avoir une double signification des touches (numérique/flèches de direction), avec une LED de contrôle de l'activation du verrou
  • un jeu en mode autonome (quand le périphérique est alimenté sans être connecté à un bus USB), par exemple un mini-simon avec les 3 LED associées aux touches 1,2 et 3.

Fonctionnement du système embarqué

Le clavier

Lorsque le système embarqué est connecté sur un pc, celui-ci est en mode clavier numérique, on peut alors utiliser les touches allant de 0 à 9, la virgule et la touche verrouillage numérique qui nous permet de passer en mode utilisation des flèches au lieu des chiffres.

Le simon

Lorsque le système embarqué est branché juste en alimentation (par exemple sur une batterie externe) celui-ci est en mode simon.

  1. Un nombre n de leds s'allument tour à tour pour montrer l'ordre, n étant un nombre entre 5 et 15
  2. Une fois l'affichage des leds terminé, le jeu attend une action de l'utilisateur par les boutons 1, 2, 3 ou 5 de l'utilisateur
  3. Lors de l'appui sur la touche 1, 2 ou 3 correspondantes aux leds rouge (1), bleu (2) et verte (3)
  4. Si le joueur appuie dans le mauvais ordre : il perd une vie sur les 3 de départs, si les 3 vies sont perdues la led rouge s'allume 5 fois rapidement signalant que le joueur a perdu et le jeu recommence du niveau n=5
  5. Si le joueur appuie dans le bon ordre : la led correspondante s'allume 100 ms et s'éteint, attendant la suite, si toute la combinaison est trouvée : les leds s'allument et s'éteignent dans l'ordre 5 fois puis n s'incrémente et rejoue une combinaison allant à n+1 leds
  6. Ce comportement (comportement de victoire) se fait en boucle lorsque l'intégralité des 10 niveaux est passé avec succès
  7. Comportement de perte : perte d'une vie
  8. Comportement lorsque le joueur n'a plus de vie : la led rouge s'allume 5 fois puis le jeu recommence au niveau 5 (début)
  9. Comportement de victoire de niveau : les leds s'allument et s'éteignent dans l'ordre 5 fois puis n s'incrémente
  10. Comportement de victoire des 10 niveaux : les 3 leds s'allument et s'éteignent en boucle
  11. Lors de l'appui sur la touche 5 (milieu) : les leds s'allument avec le nombre de vie du joueur (si 2 leds s'allument c'est que le joueur a 2 vies)


Ci dessous l'algorithme correspondant

Définir un nombre de LEDs entre 5 et 15
Définir un nombre de vies initial à 3
Définir un niveau initial à 5

Tant que le joueur n'a pas terminé les 10 niveaux avec succès :
    Générer une séquence de LEDs aléatoire de longueur égale au niveau actuel
    Afficher la séquence en allumant les LEDs tour à tour

    Réinitialiser l'index de la séquence à 0
    Réinitialiser le statut de victoire à vrai

    Tant que l'index de la séquence est inférieur à la longueur de la séquence et le statut de victoire est vrai :
        Attendre l'appui d'un bouton (1, 2, 3 ou 5) par le joueur
        
        Si le joueur appuie sur le bouton 5 :
          Afficher le nombre de vies restantes en allumant le nombre correspondant de LEDs
          Continuer à la prochaine itération du jeu
        
        Sinon:
          Si le bouton appuyé est différent de la LED attendue à l'index actuel de la séquence :
              Diminuer le nombre de vies du joueur de 1
  
              Si le nombre de vies du joueur est égal à 0 :
                  Allumer la LED rouge 5 fois rapidement pour signaler la défaite
                  Réinitialiser le niveau à 5
  
                  Sortir de la boucle de vérification
  
              Sinon :
                  Réinitialiser le statut de victoire à faux
                  Continuer à la prochaine itération de la boucle de vérification
  
          Sinon :
              Allumer la LED correspondante à l'index actuel de la séquence pendant 100 ms
              Éteindre la LED
  
              Augmenter l'index de la séquence de 1
    Si le statut de victoire est vrai :
        Allumer et éteindre toutes les LEDs dans l'ordre 5 fois
        Augmenter le niveau de 1
Fin du jeu

Programmes

Programme version 1:

Programmes version finale:

Schémas et images du système embarqué

Schémas du système embarqué:

  • Schémas du système embarqué sur Kicad :
    Schéma
Carte

Images/ vidéos

  • Photo du système embarqué
Carte soudée.jpg

Le système embarqué est divisé en deux parties, la première partie (la partie en haut) contenant le processeur, le connecteur et les leds.

La seconde partie elle contient les touches. Les deux parties sont connectés par 13 câbles, 1 étant la masse et les autres correspondent aux touches.

  • Vidéo du simon

Problèmes rencontrés

Nous avons tout d'abord rencontré un problème sur la difficulté du projet, en effet par rapport à d'autres groupes, l'idée d'un clavier numérique de 12 touches étaient trop "simple".

Nous avons donc accepté la contre-proposition émise d'ajouter un simon et la possibilité d'utiliser les flèches avec le verrouillage numérique.

Il a donc fallu regarder le fonctionnement du jeu du simon, choisir deux autres led car au départ nous n'en avions qu'une.

Le dernier problème que nous avons rencontré a été de distinguer la mode clavier du mode simon. Dans la première version du code le simon ce lance lorsque on le connecte au pc et ensuite il passe en mode clavier.

Ce problème est résolu dans la version finale.

Compilation

Utilitaires

https://winavr.sourceforge.net/

https://github.com/mariusgreuel/avrdude/releases

  • gcc-avr
  • avr-libc
  • dfu-programmer
    • DFU/USB

Compilation par ligne de commande:

compilation :

avr-gcc -mmcu=atmega328p -DF_CPU=8000000UL -c -Wall -I. -Os timer.c -o timer.o (8000000 au lieu de 16000000) 
  • fichier .c → fichier .o

édition des liens :

avr-gcc -mmcu=atmega328p -g -lm -Wl,--gc-sections -o timer.elf timer.o (.elf exécutable)
  • fichier .c → fichier .elf

téléversement :

avr-objcopy -j .text -j .data -O ihex timer.elf timer.hex
  • fichier .elf → fichier .hex

commande dfu-programmer :

dfu-programmer atmega16u2 erase
dfu-programmer atmega16u2 flash timer.hex
dfu-programmer atmega16u2 reset

commande compilation makefile:

make dfu

Tableau des touches

cables
colonne 1 colonne 2 colonne 3
port touche port touche port touche
PB7 7 PB5 8 / flèche vers le haut PB3 9
PB6 4 / flèche vers la gauche PB4 5 PB2 6 / flèche vers la droite
PD4 1 PD6 2 / flèche vers le bas PB1 3
PD3 verrou num PD5 0 PB0 . / ;
clavier boutons

Tableau des leds

port led touches bit
led 1 PD0 rouge chiffres ou flèches 0x01
led 2 PD1 bleu verrou num 0x02
led 3 PD2 vert arrêt défil 0x03
Leds.jpg

Conclusion

Ce projet de système embarqué a été réalisé avec succès, très peu de problèmes ont été rencontrés.

Il nous a permis d'apprendre à mettre en place un système embarqué, à comprendre les composants dont il a besoin et lesquels il peut contenir. Nous avons appris à paramétrer des touches, à allumer des leds via des actions sur des touches définies, à définir le mode de connexion du système afin de changer le mode de fonctionnement (clavier ou jeu).

On a également appris à récupérer le positionnement d'une touche via le schéma afin d'y définir une action.


Ce projet nous a appris beaucoup de choses et a été réalisé dans une bonne ambiance !

Fichiers

Projet KiCAD : Fichier:I2L-2022-CARUYER-MONBORREN.zip.

Programme C : Fichier:I2L-2022-G1-programme.zip.

Programme V1: Fichier:Projet SystemeEmbarque-LUFA V1.zip .

Programme version finale: Fichier:Projet SystemeEmbarque-LUFA VF.zip .

Programme de la LUFA : I2L-G1-programme-lufa