Contrôle de matrice leds, 2011/2012, TD2

De Wiki d'activités IMA

Evaluation informatique et électronique

Gestion de projet / rédaction Wiki

Rédaction de la page Wiki correcte. Des éléments de gestion de projet donnés dans le Wiki. La gestion de projet en elle même est très satisfaisante puisque que le projet a abouti. Notons enfin l'excellente vidéo qui résume parfaitement le projet.

Note 100%.

Test fonctionnels

  • Sous-système : Le système de gestion de matrice de LED est un succès (voir vidéo, un petit souci d'affichage via la NanoBoard), interconnexion FoxBoard / NanoBoard effectuée. Note 120%.
  • Système : Un système a été réalisé en l'espèce d'un jeu de type "snake" (voir vidéo). Note 100%.

Qualité de la réalisation

  • Informatique. Note 97%.
    • procédure de test : Un README en anglais (ou presque). Test sur le banc d'essai par les élèves OK. Test par l'enseignant OK, quelques difficultés pour obtenir un contexte permettant le bon fonctionnement. Note en l'état 100%.
    • pages HTML et Javascript : Non applicable.
    • scripts PHP ou programmes C : Un vrai code C, structuré en fonctions, des commentaires. On note cependant du code mort et un formattage un peu limite. Note 90%.
    • installation sur FoxBoard : Les exécutables y sont, tentative de démarrage automatique. Note 100%.
  • Electronique : Note
    • qualité de la réalisation : la conception du schéma électrique est claire. les explications fournies dans le wiki sont globalement satisfaisantes: Note 98%
    • tests autonomes : implémentation du circuit sur la nanoboard fonctionnelle. Note 100%

Bilan

Tous les points principaux ont un poids équivalent (sauf "système" qui est un bonus).

Note finale :


Le 25 Mai 2012: Séance 1


En premier lieu, on a réparti le travail, Shitao s'est occupé de la partie électronique et Ilyas de celle informatique.


Partie électronique:

Analyse le sujet et modélisation.

Fonctionnement: Le système doit recevoir 8 octets et les afficher sur la matrice de LEDs. La bascule D nous permet de stocker un octet. Le problème est comment stocker les 8 octets de données dans 8 bascules D et les renvoyer dans l'ordre en cohérence avec les bits de contrôles sachant que chaque bit de contrôle gère une colonne de LEDs ?



Partie informatique:

On a commencé par comprendre le programme de gestion du port série et le modifier pour pouvoir tester l'exemple d’envoi d'un octet. Dans notre projet le programme de gestion du port série s'appelle "gestion_spi.c" et son exécutable "./gestion_spi". On a ensuite envoyé une suite de huit octets choisie aléatoirement pour comprendre comment marche l'affichage sur la matrice de LEDs.


Le 1 Juin 2012: Séance 2


Partie électronique:

On utilise le Démultiplexeur qui est relié au bit de contrôle de la bascule D. En entrée, on a un compteur lié à un bouton poussoir. Chaque fois le bouton poussoir est poussé, le compteur s'incrémente, puis un seul bit est alors fixé à 1. C'est la bascule D correspondante qui stocke les données et le reste ne change pas. Pour renvoyer un seul octet de la bascule D à la matrice de LEDs, on a choisi un multiplexeur et un démultiplexeur contrôlé par un même compteur. Le compteur est relié avec l'horloge du FPGA, le multiplexeur sert à contrôler les données en sortie et le démultiplexeur détermine quelle est la colonne choisie. Après, on teste le FPGA avec l'oscilloscope. Le système fonctionne, toutefois, à partir du 4ième bit, il y a un retard, le système n'est donc pas synchronisé. Pour cela, on a synchronisé les compteurs avec l'horloge. Le problème est alors réglé.

Montage.png

Partie informatique:

Cette séance était entièrement consacrée à la conception de l'interface web du projet. Au début, on a testé l'exemple fournie pour l'affichage d'une ligne de quatre LEDs qui change de couleur en cliquant dessus. Après, on a modifié la page HTML en page dynamique PHP pour pouvoir afficher les 64 LEDs grâce aux deux boucles suivantes:


<?php

$table="";

$val = 0;

for($i=0; $i < 8; $i++){

$table .= "<tr>";

for($j=0; $j < 8; $j++){

$val = $i*10 + $j ;

$table .= "<td>";

$table .= "<img id=$val src='/cercle.php?couleur=vert' onclick='javascript:changeCouleur($val)'";

$table .= "</td>";

}

$table .= "</tr>";

}

echo $table;

?>



Le 8 juin 2012: Séance 3


Partie électronique:

Au début, le montage ne marchait pas à cause d'un mauvais choix de la résistance. Après, le système fonctionne correctement.

Partie informatique:

Pendant cette séance on a ajouté des fonctions java-script afin de récupérer les données nécessaires pour le script cgi-bin. Pour cela, on a ajouté deux fonctions: verifier(), unit(), et on a remplacé la fonction changeCouleur(identifiant) par envoyer(identifiant):

unit(): initialise toutes les LEDs en couleur verte.

envoyer(identifiant): change la couleur de la LEDs numéro: identifiant en cliquant dessus et mets la variable allumer=1 si elle est en rouge ou allumer=0 le cas contraire.

verifier(): envoie les numéros de ligne (i) et de colonne (j) des LEDs allumées au script cgi-bin grâce à une requête Ajax sous la forme d'une chaîne de caractère de la forme "_ij_ij_...." à intervalle régulier de 3s.


Le 15 juin 2012: Séance supplémentaire


Partie informatique:

Modification du scritp cgi-bin qui s'appelle envoie_octet.c dans notre projet. On a ajouté une fonction "get_word(char x[MAX],unsigned char c[]) qui découpe la chaine de caractère reçue de la page web, "x", pour pouvoir déterminer les numéros de ligne et de colonne des LEDs allumées puis envoyer les octets correspondants à l'aide de la chaine "c[ ]". Ensuite, on a copié les programmes et recompilé dans la Foxbord: Pindex.php, cercle.php, gestion_spi.c, envoie_octet.c. On a testé après la page web avec le banc d’essai disponible dans la salle.

Partie électronique:

Terminée.

Fin:

Branchement de la Foxbord avec la Nanobord.

Réalisation de la vidéo de teste.

Conclusion: Le sous-système marche bien.