Contrôle de matrice leds, 2011/2012, TD2
Réalisé par MABROUK Ilyas et XING Shitao
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 je peux stocker les 8 octets de données dans 8 bascules D et les renvoyer dans l'ordre en cohérent avec les bits de contrôles.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.
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 du bascule D à la matrice, on a choisi un multiplexeur et un démultiplexeur contrôlé par un même compteur. Le compteur est relié avec le 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. En principal, le système fonctionne,mais ,à partir du 4ième bits, il y a un retard.Le système n'est pas synchronisé.Pour synchroniser le système,on synchronise les compteurs avec l'horloge.Le problème est réglé.
Cette séance était entièrement consacrée à la conception de l'interface web 2.0. Au début, on testé l'exemple fournie pour l'affichage d'une ligne de quatre LEDs. 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;
?>
Au début, le montage ne marchait pas à cause d'un mauvais choix de la résistance. Après, le système fonctionne correctement.
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.
Modification du scritp cgi-bin qui s'appelle envoie_octet.c dans notre projet. On ajouter une fonction qui découpe la chaine de caractère reçue de la page web pour pouvoir déterminer les numéros de ligne et de colonne des LEDs allumée puis envoyé les octets correspondants.
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.
Terminée.
Branchement de la foxbord avec la nanobord. Vidéo de teste.