Contrôle LED 256 couleurs, groupe A
Sommaire
Première Séance (18/05)
Partie électronique:
Objectifs :
- Se familiariser avec le sujet.
- Analyser clairement ce que l'on nous demande de faire.
- Commencer à réaliser le programme sur Altium designer.
Fin de séance :
Deux des trois objectifs sont remplis. Le plus dur a été de comprendre comment réaliser le signal PWM pour une LED, la difficulté était dans la conversion d'un signal numérique en un signal temporel, nous avons remarqué que si l'on obtenait le moyen de réaliser la commande d'une LED, nous avions celle des deux autres. Nous avons une solution potentielle sur papier pour une seule LED, (alors que notre programme doit en contenir 3) que nous testerons à la prochaine séance.
Le processus de notre sujet est
Partie informatique:
Objectifs :
- Se familiariser avec le sujet.
- Analyser clairement ce que l'on nous demande de faire.
- Familiarisation avec le langage Javascript (recherche de grammaire et d'exemples, téléchargement de bibliothèques...)
Fin de séance :
Nous nous sommes informés sur la structure du langage javascript, tout en faisant une piqûre de rappel de php &html. Les recherches sur internet ont permis de trouver plusieurs types de sliders, nous avons dû modifier les fonctions, du moins les ré-arranger pour qu'ils puisent être compatible avec les bibliothèque utilisées (prototype & Jquery). Au final, nous avons les trois sliders, gérant chacun la quantité de rouge, de vert et de bleu.
Deuxième Séance (20/05)
Partie électronique:
Objectifs :
- Réaliser le programme sur Altium designer pour le fonctionnement d'une seule LED.
- Le tester avec la nanoboard et une LED.
- Faire le programme avec les 3 LED.
Fin de séance :
Nous n'avons réalisé qu'un seul des 3 objectifs. Nous n'avons pas eu le temps de tester sur une LED. On remarque qu'il est aisé de réaliser le dernier objectif une fois le deuxième objectif réalisé. Il nous ne restera donc, si notre programme marche pour une LED, qu'a utiliser un démultiplexeur pour n'avoir qu'une entrée dans le programme (cahier des charges). Nous essaierons de réaliser ceci lors de la dernière séance.
Partie informatique:
Objectifs :
- Créer une fenêtre dont la couleur sera définie par la quantité de couleurs indiquée par les sliders
- Créer le programme permettant de faire le lien entre le site internet et la maquette.
Fin de séance :
Nous avons eu pas mal de difficultés pour extraire des fonctions gérant les sliders la variable qui contient la "quantité" de rouge, de vert ou de bleu. Nous avons donc du créer trois fonctions différentes pour pouvoir les obtenir. Ensuite il a fallut les convertir en hexadécimale pour pouvoir donner à la fenêtre la couleur voulue (en additionnant juste les trois nombres hexadécimaux). Nous n'avons pas pu continuer et créer le programme de lien entre le site et la maquette. Le démon à tout de même était compilé.
Troisème Séance (27/05)
Partie électronique:
Objectifs :
- Tester notre programme pour une branche de la LED.
- Faire le schéma de montage pour prendre en compte les 2 autres couleurs de la LED.
- Réaliser le multiplexage demandé dans le cahier des charges.
Fin de séance : Nous avons testé notre programme qui marchait parfaitement pour une LED en début de séance, puis nous l'avons élargit pour pouvoir contrôler les 2 autres LED sans multiplexage. Ce programme marchait également parfaitement. Ensuite nous avons réalisé le multipexage des entrées. Nous avons eu des soucis, et le programme ne fonctionne pas parfaitement, il fait varier l'intensité des LED mais sans jamais éteindre complètement la LED 256 couleurs... Nous avons cherché notre erreur due forcément au multiplexage mais sans succès. Nous savons juste que ce n'est pas un problème de hardware. mais nous n'avons pas eu le temps de résoudre ce soucis.
Partie informatique:
Objectifs :
- Terminer le programme faisant le lien entre la page internet et l'interface munie de LED.
- Transférer le tout sur la FoxBoard, tester avec le périphérique fourni et si cela marche tester avec la NanoBoard.
Fin de séance :
Au final, le programme permettant de créer les trois fichiers texte contenants les valeurs des couleurs (RVB) fonctionne, il a été testé directement à partir du PC via la liaison série. Nous avons chargé le programme sur la FoxBoard mais à cause du manque de temps nous n'avons pu compiler le programme (difficulté à installer les bibliothèques adéquates sur la FoxBoard).
Numéro ordi : tutur01
IP 172.26.79.101
Partie FPGA
Pour ce projet nous avons du repartir notre trinôme en fonction des 2 matières (informatique et électronique). Nous avons décidé, à l'unanimité que Maxime s'occuperait de la partie info car il est le meilleur d'entre nous. Guanqun et moi même avons donc travaillé ensemble sur la partie électronique. Nous allons dans un premier temps récapituler notre avancement dans le projet en ce qui concerne la partie électronique puis ensuite nous verrons la partie informatique.
Partie électronique :
- La première séance, il faut être honnête, a été relativement peu productive. Ni Guanqun ni moi n'arrivions à cerner ce que l'on nous demandait de faire. En effet, l'ensemble du cahier des charges était relativement clair, nous pensions l'avoir compris assez vite. Mais la où nous bloquions, c'était pour savoir comment réaliser les fonctions demandées. En réalité, après discutions avec le professeur Boé, nous nous sommes rendu compte que nous n'avions pas réellement saisi ce que l'on nous demandait. Ainsi, il nous a orienté pour qu'on puisse avancer, et rattraper notre retard.Le problème était de construire un signal PWM; or dans la librairie de Altium designer, il y avait une fonction permettant de la créer. Cependant, ne sachant pas comment cela fonctionnait, nous avons décidé de la recréer. M.Boé nous a vraiment bien aidé pour la compréhension du signal PWM et donc pour pouvoir réussir à le recréer (il suffisait d'utiliser un compteur). Ainsi à environ 10 min de la fin de la séance, nous avions compris le sujet et n'avions plus qu'à le tester la séance prochaine. Nous avions donc pris du retard, car nous voulions commencer à faire le schéma dans altium designer. Ainsi, nous ne partions pas très confiant.
- Lors de la deuxième séance, nous avons donc commencé à réaliser le schéma dans Altium designer. La tâche ne fut pas forcément facile, car bien que nous ayons compris la théorie du signal PWM, c'est à dire comment il fonctionne, il fallait trouver comment le réaliser avec les composants du logiciel. Composants qui ont chacun leur documentation pour comprendre leur fonctionnement. Nous nous sommes donc dans un premier temps inspirer de l'exemple réalisé dans le pdf qui explique le fonctionnement de la nanoboard avec Altium designer, pour avoir les grandes lignes de notre schéma. Ensuite nous avons du réaliser le signal PWM à l'aide d'un compteur et d'un comparateur. Nous avons donc passer pas mal de temps pour réaliser ceci. Nous avons par la suite eu un problème de nature du signal (numérique ou analogique) nous voulions mettre un CAN pour avoir un signal analogique, mais le professeur Boé nous a dit que c'était inutile (encore une perte de temps). Le signal que nous créions n'était pas un signal continu! donc impossible de l'envoyer vers une LED. Nous devions donc réaliser un filtrage passe bas pour obtenir un signal continu (la valeur moyenne). Nous avons donc réussi à réaliser notre schéma, avons calculé la résistance qu'il fallait pour avoir un courant de 9mA pour protéger la nanoboard, mais n'avons pas eu le temps de le tester sur une LED. Nous réaliserions le montage lors de la prochaine séance.
- Enfin la dernière séance; nous devions absolument réussir à faire varier l'intensité de la LED. Si nous réussissions pour une, nous avions le schéma pour les 2 autres. Le dernier et unique problème serait le multiplexage demandé. Ainsi, très vite nous avons réalisé en début de séance la maquette (filtre RC plus la LED), et avons testé le programme. Et pour notre plus grande surprise, ça ne marchait pas. Nous avons donc regardé notre schéma sur altium pour finalement remarqué une "erreur d’inattention". En effet le comparateur était un "égal" alors que nous voulions un "inférieur ou égal". Cette erreur corrigée, notre LED fonctionnait correctement (variation de l'intensité lumineuse). Donc nous avons donc réalisé le schéma pour trois LED, sans multiplexage dans un premier temps pour vérifier que cela fonctionnait. Et de nouveau notre LED 256 couleurs n'a pas répondu à nos attentes! Seulement 2 des 3 couleurs fonctionnaient; nous avons donc déduit que c'était notre maquette qui était défectueuse. Après "réparations", notre LED 256 couleurs fonctionnait parfaitement. Enfin nous devions nous attaquer au problème du multiplexage, nous avons demandé des renseignements aux professeurs qui nous encadraient pour pouvoir bien comprendre ce que l'on nous demandait et ce que l'on réalisait. Ainsi, on devait réaliser une sorte de pseudo mémoire qui sélectionne une des 3 "cases" possible (Rouge,vert, bleu) en continu. Nous avons donc réalisé ceci, mais le problème était que le compteur (qui permettait de sélectionner les différentes consignes) ne comptait que jusqu'à 4 (0..3) M.Boé nous a dit qu'on pouvait créer un compteur qui comptait de 0 à 2. Nous avons donc dans un premier temps réalisé ceci. Or on a remarqué que ça ne fonctionnait pas exactement comme on voulait. (la LED ne s'éteignait pas, il y avait toujours une faible lueur). On a ensuite remarqué que le compteur "custom" ne marchait pas. Donc on a utilisé un compteur "normal" comptant de 0 à 3 et on a créer une condition pour que le compteur s'initialise a 0 quand il arrive à 2. Cependant, malgré cela, notre LED en avait décidé autrement... elle n'a pas changé de comportement. Nous avons donc demandé de l'aide aux enseignants qui nous encadraient, mais ils n'ont pas trouvé pourquoi elle se comportait comme ça. Nous sommes donc resté avec le schéma suivant comme schéma final. Il réalisent presque le cahier des charges, en effet, seul la luminosité est un peu défectueuse; la LED ne s'éteint pas , mais reste faiblement allumée. Nous ne savons pas pourquoi car elle marchait très bien sans multiplexage...
Ainsi, nous pouvons dire que le cahier des charges n'est que partiellement rempli. Même si on est très porche du résultat attendu, nous n'avons pas réellement rempli l'objectif. Mais sommes donc un peu déçu car nous avions presque réussi. Nous pensons que si nous avions été plus efficace lors de la première séance, nous aurions eu un peu plus de temps pour résoudre le problème et donc remplir parfaitement le cahier des charges.
Schéma électronique
On créé et génère trois signaux de PWM (huit bits) qui représentent bien les couleurs Rouge, Verte et bleue sur le logiciel Altium Designer.Après on change les rapports cycliques de ces signaux grâce à une donnée de commande, puis on filtre le signal de sortie de la nanoboard par un filtre passe-bas(resistance=325Ω et condensateur=225nf) afin d’obtenir la couleur demandée en consigne. A la fin, on peut bien voir la couleur sur la LED 256 couleurs.
Partie Informatique
Nous allons faire ici un résumé du déroulement des séances, en ce qui concerne la partie informatique.
- Lors de la première séance, je me suis tout d'abord renseigné sur le langage javascript en lisant et en faisant des exemples grâce au site du zéro, ce qui m'a permit d'obtenir les bases de ce langage. Ceci étant fait, j'ai téléchargé les deux bibliothèques conseillées par les profs., c'est à dire la librairie Prototype et la librairie Jquery. J'y ai cherché des fonctions permettant de faire des sliders, mais ce fut un échec ! J'ai donc immédiatement cherché des exemples sur internet. Comme il y en avait beaucoup, j'ai pris celui qui me semblait le moins complexe histoire d'avoir le moins de code possible. J'ai donc modifié la fonction pour que le sliders puisse varier entre 0 et 255 (pour correspondre à toutes les variations de couleur). Malgré tout, cela m'a pris une séance entière (familiarisation avec le langage, recherche de sliders.
- Lors de la seconde séance, j'ai ajouté les deux autres sliders correspondant aux couleurs verte et bleue. J'ai rangé les trois sliders dans un tableau pour optimiser la page. j'ai ensuite créé un carré dans lequel s'affichera la couleur résultante des trois sliders, ceci n'a pas créé de problème. Le plus difficile a été d'extraire les variable contenant le nombre décimal compris entre 0 et 255 des trois sliders. Avec l'aide du prof, j'ai créé trois fonctions set_red set_green et set_blue qui permettent d'extraire la valeur voulue et de la convertir en hexadécimale. Enfin j'ai crée une fonction qui modifie le style du carré (pour nous ce sera uniquement la couleur de fond). La couleur étant la somme des trois valeurs hexadécimales. Tout fonctionne bien, mais je remarque que lorsque les curseurs sont à zéro, le carré reste noir. En effet, à zéro, la couleur n'est pas du type #000000 mais du type #000 il en va de même pour tout les nombres compris entre 0 et 16. Il a donc fallu rajouter une ligne de code pour vérifier la longueur des données et rajouter un zéro au cas ou la longueur de la valeur hexadécimale n'est pas suffisante. A la fin de la séance, les trois sliders et la fenêtre sont opérationnels.
- Lors de la dernière séance, il a fallu modifier l'exemple de programme de dialogue entre la page internet et le démon (compilé au préalable bien entendu). J'ai donc virer les 3/4 du code existant et insérer les lignes permettant de créer trois fichiers texte (dans lequel seront rangées les valeurs correspondant à la quantité de rouge, de vert et de bleu. En compilant et en respectant les consignes, le programme marche bien et la liaison entre le site internet et la maquette à disposition s'effectue correctement (malgré quelques bugs corrigé à l'aide du prof). C'est maintenant que ça se gate. j'ai réussi à configurer la FoxBoard, à y mettre le programme mais les bibliothèques n'étaient pas dans la FoxBoard et je n'ai pas eu le temps de les y télécharger par manque de temps.
Au final, le sujet info est fait au 3/4, le dialogue via le port série entre la page et la maquette est opérationnel. Avec un peu plus de temps j'aurais pu compiler le programme sur la FoxBoard et le faire fonctionner via le wifi.