Contrôle de matrice leds, 2014/2015, TD2

De Wiki de Projets IMA

1. Présentation du projet

Le projet matrice de leds de taille 8x8 consiste à gérer l'allumage des leds. De plus, l'interface web permettra de dessiner sur cette matrice 8x8.

Pour cela nous utilisons:

- une nanoboard;

- une foxboard;

- un banc d'essai;

- une matrice de leds.



2. Première séance


2.1 Partie informatique

Lors de cette première séance, nous avons commencé par nous intéresser à l'interface web, avec javascript et canvas. L'utilisateur utilise cette page pour voir l'état de la matrice de LEDs (lesquelles sont allumées ou non), et pour interagir avec. Il peut, en cliquant sur la représentation de cette matrice, allumer celle(s) qu'il veut, voir en changer la couleur. Par défaut, la matrice utilisée est de taille 8x8, mais l'utilisateur doit pouvoir être en mesure de choisir une autre taille. Cependant, on suppose que la matrice voulue est carrée. Pour changer la taille, nous avons mit en place un bouton qui fait appel à la fonction changeTaille lorsque l'on clique dessus. Cette fonction demande à l'utilisateur le nombre total de LED de la matrice, puis relance la fonction d'ajoutDisque, qui dessine les disques. Pour arriver à dessiner le nombre voulu de LEDs, la fonction ajoutDiqsues a été modifiée de la sorte qu'elle créée un tableau de la taille de la matrice et dans chaque case, elle créée un canvas, qui sera ensuite dessinée. Il reste à réussir à changer la couleur des LEDs.


2.2 Partie Electronique

Lors de cette première séance, nous avons commencé par comprendre le fonctionnement de le matrice de LEDS. Comme la matrice de LEDs se compose que de 16 entrées, on peut afficher qu'une seule colonne ou ligne à la fois. Nous avons choisi l'affichage colonne par colonne. Pour cela, on divise les entrées en deux catégories, 8 entrées serviront à choisir la colonne à allumer et les 8 autres restantes serviront à envoyer le message voulu sur la colonne. Pour permettre une observation de la matrice dans son intégralité, on allume les colonnes une par une à une fréquence élevée. Cela permet entre autre une économie d'énergie.


Nous avons donc commencé à réfléchir sur le circuit électrique à réaliser sur ALtium, et ses éléments.

Nous avons choisis les éléments suivants:

- un simulateur de bus;

- un multiplexeur 1 vers 8;

- un compteur qui permet de gérer la colonne à allumer;

- un simulateur d'horloge;

- un registre à décallage.



3.Deuxiéme séance

3.1 Partie Informatique Lors de cette seconde séance nous avons complété l'interface web, de manière à intégrer websocket.

Le websocket sur la foxboard, permet de faire l'intermédiaire entre l'interface web et le port série. Il faut donc qu'au changement d'état d'une LED, l'interface web envois l'état actuel de toute la matrice de LED, via la fonction sendMessage, qui transmet au websocket un mot de 64 bit, détaillant chacune des LED de la matrice.

Le websocket récupère ce mot, et grace à la fonction make_octets, qui renvois le tableau où est découpé en 8 octets le mot envoyé.

  • détail de la fonction*

Il reste à transmettre au port série chacun des octets.

3.2 Partie Electronique

Lors de cette deuxième séance nous avons principalement créé le circuit sur Altium et effectué des tests.

Dans un premier temps, nous nous sommes rendus compte qu'il fallait que l'on stocke le mot de 8 bits envoyé par le simulateur de bus, pour cela on a utilisé un démultiplexeur 1 vers 8 avec un compteur. Le démultiplexeur envoie alors le mot généré dans une bascule D qui permet le stockage du mot, on utilise une bascule par colonne. Le compteur permet de changer de bascule D à chaque tour. On a donc utilisé un compteur 3 bits pour compter jusque 7. On a donc en sortie du multiplexeur un bus de 8 bits, ensuite pour que chaque bit soit envoyé sur une ligne de la colonne, on utilise un multiplexeur 1 vers 8.


JPEG


Maintenant que le message voulu sur la colonne a été enregistré puis envoyé, il a fallut trouver un moyen d'envoyer le mot sur la bonne colonne, puis d'éteindre la colonne pour passer au message suivant de la colonne suivante. Pour cela on utilise un registre à décalage. Il permet d'allumer tour à tour les colonnes.


JPEG schéma final


En effet, on envoie au registre à décalage un message d'initialisation 01H qui permet d'allumer la première colonne. Ensuite grâce au registre on décale le bit 1 d'un rang. Comme le rang 1 n'a pas de bit avant lui, il faut lui envoyer une valeur, on utilise donc l'entrée SLI qui envoie donc le zéro voulu (ce qui explique la masse à l'entrée de SLI). Au départ, on utilisait l'entrée LOAD pour remettre à zéro le registre, mais nous avons eu des problèmes et avons décidé de mettre un bouton poussoir pour faire le chargement.

JPEG escalier des colonnes JPEG message envoyé

A l'état initial: 0000 0001 -> la colonne 1 est allumée.

A l'état suivant: 0000 0010 -> la colonne 1 est alors éteint et la colonne 2 s'allume.

Et ainsi de suite, ce qui nous permet d'obtenir le fonctionnement de l'affichage voulu.

JPEG :


NB:Nous aurions pu utiliser un multiplexeurs comme pour l'enregistrement des mots. Mais le registre à décalage nous permet d'éviter le compteur.