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

De Wiki de Projets IMA

Réalisé par MABROUK Ilyas et XING Shitao


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 ?



Fichier:Montage.pdf Fichier:Montage

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é.

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.