Gestion afficheurs, 2013/2014, TD1 : Différence entre versions
Ligne 1 : | Ligne 1 : | ||
− | |||
== Projet SC : == | == Projet SC : == | ||
Ligne 20 : | Ligne 19 : | ||
-iexten -echo -echoe -echok -echoctl -echoke ignbrk | -iexten -echo -echoe -echok -echoctl -echoke ignbrk | ||
− | source : | + | source : http://rex.plil.fr/Enseignement/Systeme/Projet.IMA3/systeme018.html |
+ | |||
Il fallait rajouter une sécurité à cette initialisation pour éviter de perdre des données : | Il fallait rajouter une sécurité à cette initialisation pour éviter de perdre des données : | ||
$ sleep 9999d 3</dev/ttyACM0 & | $ sleep 9999d 3</dev/ttyACM0 & | ||
− | source : | + | source : http://rex.plil.fr/Enseignement/Systeme/Projet.IMA3/systeme018.html |
Ces données seront réutilisées lors du passage à la FoxBoard. | Ces données seront réutilisées lors du passage à la FoxBoard. |
Version du 24 mai 2014 à 19:55
Projet SC :
Gestion d'afficheur 16 segments
Partie programmation
Cette partie sera décomposée en X parties correspondant aux X difficultés rencontrées lors de ce projet.
1. Gérer la liaison série
Pour transmettre notre programme au banc d'essai, il faut tout d'abord initialiser ce banc d'essai et dire à notre contrôleur (ici l'ordinateur) où il se trouve.
Ceci ne constituais pas une grande difficulté étant donné que de nombreux travaux avaient déjà étaient fait sur la liaison série et que le code permettant de l'initialiser était sur le wiki :
$ stty -F /dev/ttyACM0 9600 cs8 \
-hupcl -icrnl -ixon -opost -onlcr -isig -icanon \ -iexten -echo -echoe -echok -echoctl -echoke ignbrk
source : http://rex.plil.fr/Enseignement/Systeme/Projet.IMA3/systeme018.html
Il fallait rajouter une sécurité à cette initialisation pour éviter de perdre des données :
$ sleep 9999d 3</dev/ttyACM0 &
source : http://rex.plil.fr/Enseignement/Systeme/Projet.IMA3/systeme018.html
Ces données seront réutilisées lors du passage à la FoxBoard. Notre Port série est maintenant configuré, on peut envoyer notre code !
2. Gestion des afficheurs 16 segments.
A. Un afficheur == un caractère !
Nous avons vite compris que l'afficheur 16 segments était codé sur 16 bits.
Nous avons dans un premier temps affiché un code 16 bits (le 0x0001 par exemple) sur les 8 segments pour comprendre comment on pouvait gérer les 8 afficheurs.
Après plusieurs essais, nous avons opté pour la création d'un tableau qui contiendrai le message à afficher.
Dans le premier code nous avions un compteur d'afficheur qui recevait les cases du tableau. A chaque incrémentation compteur correspondait une incrémentation tableau, ce qui nous permettait d'afficher des caractères différents sur les afficheurs.
B. L'alphabet latin, un bonheur !
Maintenant que nous savons afficher, il faut maîtriser le contenu de l'affichage.
Nous avons donc mis chaque bit à 1 séparément (ex : 0x0001 puis 0x0002 puis 0x0004 ..) et reportés sur papier quel segment s'allumait pour ce bit.
Nous avons ensuite nommé chaque segment pour pouvoir créer nos caractères !
Voici comment nos afficheurs étaient installés :
Maintenant que nous avons quelques lettres, essayons avec notre tableau d'afficher le message suivant :
« HELLO sablier »
Voici le code C correspondant et la preuve en image :
C. Faut que ça bouge !
Dans un afficheur publicitaire, les messages défilent de droite à gauche.
Pour reproduire cet effet, nous procédons en 3 étapes!
Étape 1 : Ne rien afficher sur les 8 afficheurs → Nous avons pris la décision de mettre les 8 premiers caractères de notre tableau à 0x0000
Étape 2 : Afficher la suite du message pas à pas → Pour ce faire, on utilise deux boucles, dont une qui commence quand les 8 premiers caractères du tableau ont été affichés → On parcours le tableau au complet en incrémentant à chaque période le code que l'afficheur reçoit de 1 dans le tableau
Étape 3 : Une boucle infinie → On utilise un « while 1 » sur tout le main pour pouvoir revenir au début de notre tableau contenant le message et ainsi afficher le message en continu !
D. Respect du cahier des charges
Les deux grands axes du cahier des charges concernant la programmation sont les suivants :
1) Par le biais d'une page php (que nous verrons plus tard), nous modifierons un fichier.txt contenant le message à afficher. Ce message peut être modifié pendant l'execution et dois défiler en continu.
2) Par le biais d'une page php, la vitesse de défilement peut être modifiée.
1) Le fichier texte !
Pour le défilement continu, nous avons déjà vu précédemment comment s'y prendre. Il faut maintenant lire le message dans un fichier. Pour cela, nous avons créer des tableaux de correspondances pour chaque caractère que l'afficheur est capable de communiquer ( car gérer tout les caractères au monde n'était pas le but de ce projet) Donc nous disposons d'un tableau contenant les caractères, un autre contenant les codes 16 bits correspondants. La technique est donc évidente, on lit chaque caractère du fichier et on place dans le tableau contenant le message chaque code 16 bits correspondant. Le « while » 1 englobant la lecture du fichier, si notre fichier est modifié, le tableau contenant le message le sera aussi !
PARTIE ELECTRONIQUE :
Première séance :
Découverte du projet et du cahier des charges.
Prise en main du logiciel altium et suivi partiel du tutoriel.
Deuxième séance :
Fin du tutoriel proposé. Compréhension du schéma.
Définition du cahier des charges de notre projet et proposition de schéma électronique.
Découverte d'un possible problème sur nos afficheurs à anode commune (contrôle par la masse)
Troisième séance :
Mise en place du schéma électronique établi à la séance précédente sur altium.
Correction des quelques problèmes rencontrés puis simulation (réussie) du schéma.
Problème des afficheurs confirmé (courant et tension admissibles), étude avec les deux professeurs des solutions possibles.
Câblage d'une solution retenue (driver de leds + 2 demi afficheurs) -> la solution résolve partiellement le problème (on peut fournir une tension et un courant correct).
Commande de 4 transistors pouvant résoudre le dernier problème électronique (contrôle des afficheurs).
Quatrième séance :
Câblage de l’autre moitié du premier afficheur. Le reste ne sera pas câblé car trop long et inutile pour résoudre le problème des transistors.
Les transistors n’ont pas permis de contrôler séparément chacun des afficheurs, car leur tension de seuil de déclenchement est trop élevée par rapport à la tension que l’on récupère déjà à côté pour les drivers de leds et afficheurs.
On a cependant une petite simulation de 3 caractères (IMA) pour montrer que notre montage fonctionne (on peut afficher les caractères désirés, mais le défilement ne s'effectue pas. Il faudrait trouver quatre transistors capables de se déclencher avec les 3,3V max que la nanoboard peut fournir, sachant que les leds s'allument avec une tension minimale de 3,8V).