Gestion de LED RVB, 2013/2014, TD1 : Différence entre versions

De Wiki de Projets IMA
(Troisième séance)
(Troisième séance)
Ligne 116 : Ligne 116 :
 
'''Partie informatique:'''
 
'''Partie informatique:'''
  
- On crée un script ./compile.sh pour générer un ledrvb.cgi directment dans le répertoire qui convient  
+
On crée un script ./compile.sh pour générer un ledrvb.cgi directment dans le répertoire qui convient  
  
  
Ligne 127 : Ligne 127 :
 
cp ledrvb.cgi /usr/lib/cgi-bin/ledrvb.cgi
 
cp ledrvb.cgi /usr/lib/cgi-bin/ledrvb.cgi
  
 +
Une fois le script cgi compiler on peux tester en accédant à la page web à l'adresse localhost.
  
 +
Après la méthode validée pour un slider, on multiplie le procédé pour avoir 3 sliders.
 +
 +
On obtient une page web de la forme suivante :
  
- Après la méthode validée pour un slider, on multiplie le procédé pour avoir 3 sliders.
 
  
 
On test l'ensemble du projet sur la machine de programmation. Une fois cette validation faite nous sommes pré à transférer notre projet sur la foxboard.
 
On test l'ensemble du projet sur la machine de programmation. Une fois cette validation faite nous sommes pré à transférer notre projet sur la foxboard.

Version du 11 juin 2014 à 17:55

Première séance

Partie électronique:

• prise en main de la nanoboard et du logiciel Altium à l'aide d'un tutoriel. Je pense que c'est la meilleure façon de commencer le projet sur la nanoboard, puisque ça permet de mettre en place une application fonctionnelle de A à Z (réalisation d'un petit compteur). Cela permet entre autre de comprendre l'agencement des librairies, le type données traités, les interfaces d'entrées-sorties...

• réalisation d'un schéma de test "PWM".

Schéma réalisé à la première séance

J'ai réalisé un schéma simple dans avec un bloc PWM qui, à l'aide d'un registre 8 bits (valeur à coder) et d'une horloge (porteuse) permet d'envoyer sur une des sorties de la nanoboard un signal modulé.

• réalisation d'un circuit de filtrage passe bas RC J'ai réalisé un circuit passe bas avec une fréquence de coupure très basse (environ 100Hz) d'ordre 1.

• test du système précédemment décrit sur la led RVB J'ai branché le signal filtré sur chacune des broches de la diode RVB (sauf la masse évidement). La diode fonctionne bien, je visualise bien le rouge, le vert et le bleu. Pour tester le bon fonctionnement du système PWM, j'ai fait varier la valeur du registre 8 bits (configurable digital IO) et j'ai put voir que l'intensité de la couleur variait. Avec 0XFF sur le registre, on obtient l'intensité de couleur maximale. Avec 0x0B, la diode est quasiment éteinte. En changeant la valeur de la résistance du filtre l'intensité varie, on a donc une plus grande précision, car si R est faible, il y aura quand même un courant non négligeable dans la diode pour des valeurs faibles du registre 8 bits. Il faut aussi tenir compte de la vitesse de la porteuse (signal d'horloge) pour réaliser un signal bien propre (pas de découpage après le filtrage), plus on aura une porteuse élevé, moins il y aura ce découpage à la sortie d'un même filtre. Je pense aussi qu'il faut dimensionner le filtre en fonction de cette fréquence de découpage.

• visualisation sur l'analyseur logique et sur oscilloscope J'ai visualisé à l'aide l'analyseur logique les signaux de ma PWM, cependant, j'ai préféré utiliser le mode oscilloscope, qui ne va pas "nettoyer" mes signaux certes, mais va me permettre de faire des tests plus rapidement sur la partie analogique et sur la partie signaux logiques. Je pense malgré tout que l'analyseur logique est un bon outils lorsque l'on travaille uniquement sur des systèmes binaires.

Partie informatique:

1) Prise en main du sujet, lecture du cahier des charges, découverte et analyse des programmes d'exemples de la page des projets http://rex.plil.fr/Enseignement/Systeme/Projet.IMA3/index.html.

2) Ecriture d'une procédure en C pour allumer la LED RVB à l'aide d'une liaison série. Nous nous sommes inspire de l'exemple de programme C utilisant le port série.

3) Recherche documentaire sur la bibliotheque JQuery Bibliothèque libre en javascript permettant une interactivité avec l’utilisateur sans relancer la page html. La bibliothèque comprends de nombreuses fonctions. Dans ce projet cette bibliotheque va nous servir pour animer un curseur qui sera deplacer par l’action de la souris de l’utilisateur. La transmission des parametres au programme en C se fera au relachement du bouton de la souris.

4) Recherche et analyse d'une page web contenant un objets de type "slider" écrit en javascript et utilisant la bibliothèque JQuery. Il s'agit d'un curseur sur une barre qui va nous permettre d'ajuster la valeur de chaque couleur.

Deuxième séance

Partie électronique:

• recherche sur la liaison J'ai fais des recherches sur la liaison série sous Altium, il existe un bloc configurable pour réaliser des communications entre système. Il semble qu'il faille éditer les drivers de ce bloc pour modifier les vitesse, bit de stop... En fait, il semble que ce soit un autre groupe de recherche qui travaillent sur le sujet. On m'a appris que mon application devait gérer 8 bits d'entrées et un bit de stop. C'est à dire que mon système va recevoir:

• 8 bits de données pour le rouge (noté R)

• 1 bit de stop

• 8 bits de données pour le vert (noté V)

• 1 bit de stop

• 8 bits de données pour le bleu (noté B)

• 1 bit de stop

Cette information est des plus précieuses, car après avoir testé la sortie de mon système (PWM + filtrage + LED RVB), je connais la forme de mes informations d'entrées. Mon travail est alors de réaliser un système qui va automatiser la lecture des informations les unes après les autres.

A la réflexion, je me rend compte d'une chose, que se passe il si l'information de couleur rouge reçu est interprété comme une autre couleur?

Voici comment j'ai imaginé le système:

En entrée, je dispose d'un registre 8 bit qui représente l'information de couleur R, V ou B et d'un interrupteur simulant le bit de stop. Je fixe la valeur pour R, et j'actionne le bit de stop: •une première PWM se déclenche

PUIS

•je fixe V et j'actionne le bit de stop, une deuxième PWM s'actionnent (tout en laissant le PWM-R en action).

Ainsi à chaque appuie sur l'interrupteur stop, la valeur du registre 8 bits doit être mémorisé pour ne pas perdre cette information lorsque les 8 bits suivant arrivent.

• réalisation du schéma électrique total sur Altium designer. Je réalise à tâtons un système qui permet d'envoyer successivement les valeurs voulues.


Schéma réalisé à la deuxième séance


A la fin de la séance, le système ne fonctionne pas vraiment. La PWM réalisé avec plusieurs blocs opère. Mais il manque des blocs logiques, le schéma est incomplet et il me manque des informations quant au bon fonctionnement de certains blocs.

• fabrication du circuit électrique total (3 filtres RC et brochage) Je prend le temps de fabriquer 3 circuits RC (1 par couleur) je les dimensionnent avec pour avoir la fréquence de coupure au alentours de 500Hz.

Partie informatique:

Nous avons lors de cette seance fait fonctionner et analyser le fonctionnement de l'exemple du script CGI-BIN. Un script CGI est un programme executé par le serveur web qui va permettre de transmettre au script les paramètres envoyé par le navigateur grace au fonction POST ou GET. Lorsque nous déplacerons le curseur sur la page la valeur du curseur sera automatiquement envoyee au script. Un programme CGI peut être écrit dans à peu près n'importe quel langage de programmation pourvu que celui-ci soit :

• capable de lire le flux de données d'entrée ;

• capable de traiter des chaînes de caractères ;

• capable d'écrire sur le flux standard de sortie ;

• exécutable ou interprétable par le serveur web.

Nous écrirons notre programme en C pour y intégrer la partie du code permettant le fonctionnement de la diode et de la liaison série écrite en séance 1. Nous choisissons le script CGI plutot que le php comme langage intermédiaire entre le navigateur et notre application, puisque notre application est déja écrite en C.

Troisième séance

Partie électronique:

• Ajout de blocs de mémorisation Je réalise le schéma final dont voici un aperçu:

Schéma final

Description:

Lorsque le système reçoit les 8 bit-R, la valeur est sur le registre 8bits (entrée). Celle ci est recopié via un multiplexeur sur un registre qui mémorise cette valeur et l'écrit en permanence en sortie. Un bit de stop apparait à la fin de la transmission de ces 8 premiers bits. Ce bit de stop est relié à un un système de compteur. Ce compteur modulo 3 (reset avec une porte ET) permet d'activer les sorties de 2 multiplexeurs. L'un va permettre de répartir la valeur 8 bits sur le registre R, V ou B, l'autre va orienter une clock haute fréquence sur ce même registre. Cette clock va permettre d'enregistrer la valeur 8 bits sur le registre.

A chaque nouvelle réception, on va avoir un registre R V B mis à jours.

Les sorties des registres sont donc la dernière valeur enregistré pour la couleur en question.

Les blocs de comparaison vont réaliser une PWM. Ces blocs prennent en entrées les valeurs d'un compteur 8 bit et la valeur à coder. En sortie on a un 1 logique lorsque A est supérieur à B.

• Test avec le système de LED de la nanoboard pour avoir un visu habile Personnellement je conseille d'utiliser le système de LED disponible sur la nanoboard. On peut relier assez facilement les éléments des circuits qu'on réalise. Ca permet d'avoir un visu de ce qu'il se passe. Le travail à l'aveugle fait perdre du temps.

Conclusion à propos de la nanobard. C'est un travail qui est long, de découvrir le mode de fonctionnement de Altium + nanoboard, mais la prise en main n'est pas si difficile au final. Je conseille vraiment de commencer par travailler sur le tutoriel même si ça fait perdre en apparence au moins 2h, c'est du temps de gagné pour la suite. Au final, le schéma que j'ai réalisé fonctionne.

• Amélioration du filtre • E‰tude de la diode RVB en courant et tension

Partie informatique:

On crée un script ./compile.sh pour générer un ledrvb.cgi directment dans le répertoire qui convient


#apt-get install cgilib

gcc -o ledrvb.cgi ledrvb.c serial.c -lcgi

cp ledrvb.cgi /usr/lib/cgi-bin/ledrvb.cgi

Une fois le script cgi compiler on peux tester en accédant à la page web à l'adresse localhost.

Après la méthode validée pour un slider, on multiplie le procédé pour avoir 3 sliders.

On obtient une page web de la forme suivante :


On test l'ensemble du projet sur la machine de programmation. Une fois cette validation faite nous sommes pré à transférer notre projet sur la foxboard. Il faut dans un premier temps initialiser la foxboard avec l'utilitaire minicom on modifie les adresses et masques pour permettre un accès par ssh. Nous choisissons la foxboard 10. On y accède donc par la commande : ssh root@172.26.79.10. Cette commande nous permet d’accéder au système de stockage de la foxboard. Nous copions donc les fichiers de notre projet aux meme endroit que sur notre PC de programmation. Le script cgi-bin dans /usr/lib/ La page web, Bibliotheque JQuery, css, etc dans www

Une fois l'ensemble des fichier copier on compile le script cgi-bin on peux accéder à notre page web à l'adresse 172.26.79.10/index .

Nous constatons bien qu'une modification des curseurs de la page web modifie la couleur de la diode.

Pour plus de praticité on initialise la liaison série par un script que l'on place dans /etc/rc.local ainsi le script s'exécute à chaque démarrage de la foxboard.