un afficheur à persistance rétinienne

Upload: usema

Post on 17-Jul-2015

866 views

Category:

Documents


5 download

TRANSCRIPT

Mini projet Microcontrleur

( http://seb.france.free.fr/eseo/I2/micro-controleur )

Professeur responsable :Guillaume SAVATON

Etudiants I2 :Sbastien Yvonnick FRANOIS BRUNET1

1. 2. 3. 4.1) 2)

Introduction Remerciements Cahier des charges SpcificationsDescription Analyse fonctionnelle

3 3 3 33 4

5.1)

ConceptionSolutions matrielles 1. Electro-mcaniques 2. Electroniques 3. 4. Logiciel Architecture Choix logiciels

44 4 5 8 8 10

2)

6.1) 2) 3) 4) 5)

RalisationSchma complet du montage Stratgie et notes de routage Schma dimplantation Typon Nomenclature et prix

1111 12 13 13 14

7.1) 2) 3) 4)

Dveloppement logicielCalculs de mise au point Programmation Structure du programme Optimisation logicielle

1616 17 18 19

8.1) 2)

Conduite de projetOrganisation Problmes rencontrs

2020 21

9. 10.

Conclusion Bibliographie

21 22

2

1.

Introduction

Nous avons choisi de raliser un afficheur persistance rtinienne, sujet technique et pdagogique, trouv daprs une ide publie dans lElectronique Pratique de dcembre_2001/janvier_2002. Lobjectif de la ralisation est de raliser un afficheur partir dune seule colonne de leds en mouvement et dont le balayage est suffisamment rapide pour que lil humain ait limpression de regarder une matrice de leds. Lobjectif du miniprojet est de concevoir puis dvelopper une application embarque sur cible Microchip.

2.

Remerciements

Nous tenons particulirement remercier les personnes suivantes, qui ont contribues au bon droulement de ce projet : Mrs SAVATON et BOUVIER pour avoir accept ce projet et pour les conseils techniques prodigus. Les archives dElectronique Pratique de la bibliothque de lIUT dAngers. M. GUITTON pour laide apporte pendant le routage, et les conseils mcaniques. M. GENET pour les conseils sur lquilibrage du bras et la stabilit du socle.

3.

Cahier des charges

Les fonctions assurer seront les suivantes : - Allumer des leds individuellement sur une colonne. - Dplacer la colonne de leds. - Fournir un mouvement rgulier. - tre capable de dtecter le passage de la colonne par une position initiale (pour synchroniser lallumage des leds.

4.

Spcifications1) DescriptionLe but de notre ralisation est dafficher un texte, par balayage dune colonne de leds, celles-ci clignotent selon les motifs transmis par le microcontrleur. A chaque passage, les leds afficheront le mme motif au mme endroit. Si la frquence de balayage est suffisamment leve, la rtine de lobservateur, qui se comporte en intgrateur, fera une moyenne et lobservateur aura ainsi limpression que limage est fixe.

3

2) Analyse fonctionnelle

Synchronisation spatiale Contrle de laffichage Temporisation

Lecture de la couleur Lecture des motifs en mmoire

Gestion des LEDS

Alimentation

Dplacement de la colonne de LEDS

5.

Conception1) Solutions matrielles1. Electro-mcaniques

Bloc dplacement : Il existe deux mouvements pouvant permettre un affichage par persistance, Par balancier Exemple vertical : Par mouvement continu Exemple vertical :

Nous avons choisit dutiliser un mouvement continu vertical, pour sa simplicit de mise en uvre (on na pas limiter linertie du balancier). On utilisera un moteur lectrique continu, avec une structure ralise laide de pices MECCANO pour raliser le mouvement. 4

Bloc alimentation Avec un mouvement continu il est ncessaire dutiliser deux alimentations diffrentes, la mise en uvre de balais tant trop complique. On placera donc une pile 9V qui fournira lnergie la partie tournante (PIC + LEDS), grce un rgulateur 5V. Le moteur sera aliment par une alimentation rglable externe qui assurera une rotation vitesse constante. Bloc dplacement de la colonne de leds Le moteur, un modle meccano 3-6V sera associ une alimentation rglable nous permettant de choisir la vitesse de rotation. Le tout sera mont sur une structure ralise en meccano.

2. ElectroniquesBloc Gestion des leds Nous utiliserons des leds bicolores trois pattes, le montage pourra produire 3 couleurs, rouge vert et orange par synthse additive. Nous avons retenu les leds bicolores dAtlantiques Composants, les TLBV5320. Nous navons pas pu trouver leur datasheet, le constructeur (Liteon) ne la fournit pas non plus, nous nous sommes donc bass sur les caractristiques dautres diodes. Daprs la datasheet des leds bicolores TLUV5300, nous aurons fournir 30mA par diode, soit dans le pire cas jusqu 60mA par led. Il y aura 7 leds connectes sur un port, soit au maximum 420mA. La datasheet du PIC indique quil supporte 25mA par broche, et 100mA par port, il nous faudra donc utiliser un circuit damplification de courant. La cathode tant commune, il nous faudra utiliser un amplificateur de courant inverseur si lon souhaite commander lallumage dune led par un tat 1 en sortie du microcontrleur.

Nous utiliserons un circuit mc-1413, qui contient 7 transistors NPN Les diodes de roue libre ne seront pas relies Le circuit ne ncessitera pas dalimentation

5

Schma de principe du contrle dune leds :

180

Commande rouge

Broche du PIC

Commande verte

.Pour 30mA, il nous faudra une rsistance de valeur minimum : R = 5 / 30.10^-3 = 166 Nous utiliserons une rsistance de 180 .

Schma de principe du contrle de la couleur : 5V 1 k Broche RB2 Commande rouge 5V 1 k Broche RB1 Commande verte Nous avons choisi un transistor PNP disponible lESEO, le 2N2907A, daprs sa datasheet, son Hfe est compris entre 100 et 300. Il nous faudra fournir au maximum, si toutes les leds sont allumes de la mme couleur, 7*30 mA = 210 mA. Le pire cas tant un Hfe faible, il faudra que le courant Ibmin = 210/100 = 2,1 mA. Nous prendrons une marge en fixant Ib = 5 mA soit R = 1 k.

6

Intgration du systme La partie programmable du systme sera confie un microcontrleur de type PIC (Microchip). Nous rserverons les broches suivantes : Pour la programmation in situ, les broches suivantes sont ddies : o PGC sur la broche RB6 o PGD sur la broche RB7 Pour un port srie (prvision dune extension future), les broches suivantes sont ddies : o TX sur la broche RC6 o RX sur la broche RC7 Pour linterruption dclench par lILS o IT sur la broche RB0, car celle-ci peut tre programme sur front montant ou descendant, et lon peut aussi lidentifier directement, sans avoir faire un masquage comme pour RB4 RB7 Pour lallumage des leds o 7 leds de prfrence sur le mme port, on choisira donc un modle ayant deux ports supplmentaires : D et E, on utilisera ici le port D (8 bits).

Nous utiliserons un 16F877 cadenc 20MHz, ce qui sera amplement suffisant devant la frquence de notre systme mcanique (~10Hz).

Programmation in situ

ILS Commande LEDS 5 7 Port srie Commande LEDS 1 et 2 Commande LEDS 3 et 4

7

2) Logiciel3. Architecture

Bloc synchronisation spatiale La broche RB0 sera programme pour dtecter un front Linterruption peut avoir lieu sur front montant ou front descendant selon la valeur du bit INTEDG du registre OPTION_REG (cf page 19). (cf page 31 et 129)

Passage devant laimant Signal lILS de t

Il faut dans la phase dinitialisation activer les interruptions sur la broche, par le biais du bit INTE du registre INTCON. Une interruption sera signale par le bit INTF du registre INTCON (cf page 130).

Bloc temporisation Nous aurons besoin dune temporisation logicielle fiable pour pouvoir aisment maintenir une LED allume ou teinte pendant un temps donn. Elle doit pouvoir fournir des dlais de lordre de la milliseconde, les valeurs seront ensuite dtermines exprimentalement. Bloc contrle daffichage Il fera le lien entre la synchronisation spatiale, et les temporisations Aprs une interruption, le programme lira en mmoire la colonne afficher, laffichera pendant un temps dtermin, puis passera la colonne suivante. Entre deux lettres il faudra laisser un temps suffisant pour laisser un espace vide.

8

Le contrle daffichage comportera deux sous blocs : Lecture des motifs Les caractres seront reprsents par des ensembles de colonnes, un caractre sera reprsent sur une matrice 5x7, nous utiliserons la table de conversion caractres -> points fournie avec lafficheur LCD :

Figure 1 : Extrait de la datasheet du S6A0069

Lecture des couleurs La structure que nous avons retenue ne permettra de slectionner quune couleur par colonne, de manire simplifier larrangement des donnes en mmoire.

9

4. Choix logicielsChoix du langage Au dbut nous pensions utiliser le langage assembleur, de manire optimiser au maximum le code produit. Mais nous avons choisit le C, pour la possibilit dutiliser des structures, nous avons aussi par la suite pu bnficier des fonctions du compilateur (cf optimisation). Dcoupage des fonctions On essayera de restreindre au maximum lutilisation de sous fonctions, lappel de fonction consommant des ressources. Programme principal Boucle testant un flag global, lorsque flag passe 1, on entre dans la boucle daffichage, il faudra mettre zro le bit dinterruption la fin de laffichage. Interruption ILS Mise de la variable flag 1

Structures de donnesStruct { Unsigned char pixels : 7 ; Unsigned char colors : 2 ; } column ; Struct { Column columns[5] ; } character ;

Un caractre est donc un ensemble de colonnes

Par la suite nous avons abandonn le concept de stockage par caractre, car cela nous forait utiliser une largeur de caractre fixe, ce qui peut tre gnant pour afficher des motifs autres qualphanumriques.

10

6.

Ralisation1) Schma complet du montage

11

2) Stratgie et notes de routageLe circuit imprim du systme se dcoupe en deux parties, lune hberge lalimentation, le PIC et sert de bras rotatif, et lautre est perpendiculaire la premire et sert de support aux leds. Nous avons fais le choix dy placer aussi les rsistances. Les cartes sont relies par lintermdiaire de barrettes, dont lune est coude. Elle permet le contact lectrique mais aussi soutient mcaniquement la carte des leds perpendiculaire. Les deux cartes ne sont pas optimises en taille car nous avons tenu compte des contraintes mcaniques, nous avons besoin dune certaine longueur, environ 20 cm pour le bras. La longueur du bras doit tre dtermine dans un compromis entre vitesse de balayage et quantit de texte affichable. Il a fallu aussi prvoir les contraintes despace pour la pile par exemple ou encore la roue sur laquelle est visse la plaque. Ces contraintes sont reprsentes par des rectangles. On ne doit pas y placer de composants, ni mme de piste de cuivre (pour la roue seulement). Ensuite la stratgie de placement a t de regrouper les composants par groupe fonctionnel : Lalimentation, rgulateur, condensateurs de dcouplage. Les condensateurs associs au quartz. La barrette srie. Les transistors qui permettent de choisir la couleur. LInterrupteur Lame Souple Le port de programmation in-situ avec son cavalier et les protections

Les dimensions de la carte rsultante sont nettement suprieures la place prise par les composants. La carte restant trs basique, nous avons pu la router en simple face, en ajoutant deux straps pour viter des dtours trop long.

12

3) Schma dimplantation

4) Typon

13

5) Nomenclature et prixRfrence circuit imprim DescriptionFournisseur

Prix unitaire

Qt

Prix

Partie rotativeR1,R11 R2,R3,R4, R5,R6,R7, R8 R10,R9 C1 C2,C3 C5 C7,C6 D1,D2,D3, D4,D5,D6, D7 D8 Q1,Q2 Reg U1 U2 U1s U2s Y1 SW1 SW2 ILS AIM1 RJ11 JP2 JP2c J1 J2 J3 B1 Pile 10k W 180 W 1k W 1F radial 22pF 47F radial 100nF LED bicolore 1N4148 Transistor 2N2907A Rgulateur +5V PIC16F877 Driver transistors mc-1413P Support lyre 40 broches Support lyre 16 broches Quartz 20MHz Interrupteur monophas coud Bouton poussoir CMS de reset KSA Interrupteur lame souple Aimant Connecteur RJ-11 6-6 Barrette 3 broches mle Cavalier strappeur Barrette 9 broches femelle Barrette coude 9_broches mle Barrette 4 broches mle coupleur 9v Pile 9v Collier serre-cble 100x35mm 0,08 0,08 0,08 0,15 0,15 0,15 0,19 0,79 0,06 1,02 0,84 12,12 0,93 0,55 0,20 1,30 3,35 0,69 0,91 1,06 1,84 0,08 0,12 0,79 0,40 0,11 0,32 1,12 0,42 2 7 2 1 2 1 2 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0,16 0,56 0,16 0,15 0,30 0,15 0,38 5,53 0,06 2,04 0,84 12,12 0,93 0,55 0,20 1,30 3,35 0,69 0,91 1,06 1,84 0,08 0,12 0,79 0,40 0,11 0,32 1,12 0,42

Atlantique Composants

Farnell 101229

Radiospares 457-4511 Radiospares 179-5967

14

Socle moteurDmoteur SWmoteur J4,J5 1N4007 Interrupteur monophas vertical Embase banane 0,06 2,31 0,67 1 1 2 0,06 2,31 1,34

Pices mcanique productions.com

meccano-mr0021 0481 012B1 02410 037BN 037A 701 0,68 0,39 0,25 3,16 0,10 0,07 11,47 12 2 2 1 1 13 12 1 1 1,36 0,78 0,25 3,16 1,3 0,84 11,47 12

Bande 11 trous zingue Bande coude 38 X 12 mm Zn (1 X 3 TR) Equerre 26 X 12 Zn Roue barillet 35 mm 8 trous Vis 6 pans 5,8 mm zingue Ecrou carr Zn Moteur lectrique jaune 3-6 Volts Circuit imprim simple face 240x67mm (estimation), perc, tam, soud Livraison Radiospares Livraison Farnell Livraison MR production Total

0 7,25 77,70

15

7.

Dveloppement logiciel

Aprs avoir test la continuit des pistes, nous avons allum les leds laide de straps connects sur le support du microcontrleur, afin de sassurer que tout fonctionnait correctement. Ensuite, nous avons crit un programme trs simple dont le but tait de faire clignoter les leds, ce qui correspond au code intitul clignotant. Nous nous sommes ensuite plongs dans la documentation du compilateur C, afin de voir comment utiliser les interruptions, et nous avons crit le code du programme interruption, qui change la couleur des leds chaque tour.

1) Calculs de mise au pointAvant de commencer programmer le code grant laffichage dun texte, nous avions besoin de savoir quelle vitesse tournait le moteur, afin de savoir combien de temps nous devrions allumer teindre les leds pour figurer un pixel dans lespace. Dans ce but nous avons rdig le programme tours par seconde, celui-ci attend tout dabord 50 tours pour permettre au mobile datteindre une vitesse constante, ensuite le microcontrleur compte le temps pass pour effectuer 100 tours. Le comptage est implment sous la forme dune variable 32 bits incrmente approximativement toutes les 100s. Nous avons fix exprimentalement une excitation du moteur 2V 1A pour effectuer cette mesure. Une fois la mesure termine, le pic enregistre la valeur dans son eeprom, puis fait clignoter les leds de manire indiquer loprateur que la mesure est termine. Il suffit ensuite de lire le contenu de leeprom avec un programmateur pour obtenir le rsultat de la mesure.

Ecran 1 Lecture du rsultat dans le programmateur

16

Durant les expriences nous avons obtenus les rsultats suivants : Valeur dans leeprom : 9 624 9 (* 100 s) Soit 9,624s pour 100 tr, soit une frquence de rotation denviron 10,390 tr/s Le rayon de la plaque, mesur entre le centre de laxe du moteur et lextrmit des leds vaut R=13,8 cm. Un tour des leds correspond donc un trajet de 2R, soit 86,708 cm/tr. La vitesse linaire des leds est donc de 86,708*10,390 = 900,896 cm/s A cette vitesse, si nous voulons allumer une leds suffisamment longtemps pour quelle soit visible sur 0,5cm, nous devrons lui envoyer une impulsion de 0,5/900,896 = 555s. Cette valeur sera donc pour la vitesse choisie notre rfrence temporelle. Nous avons par la suite tripl cette valeur pour obtenir un affichage plus lumineux et des pixels plus gros. La vitesse du moteur convient notre application et nous avons donc retenu de lalimenter sous 2V, 1A.

2) ProgrammationNous avons cr un programme text, qui affiche successivement des colonnes stockes en mmoires, pour ce faire, nous avons dclar la structure correspondant aux colonnes, ainsi que des constantes prprocesseurs pour dfinir facilement les pixels et la couleur de chaque lettre. Il suffit dinclure le letters.h puis dutiliser directement GREEN_H, ORANGE_E pour former un texte. Par la suite nous avons essay de crer un motif anim, le but tant de redessiner constamment un motif diffrent, de manire donner une impression de mouvement. Le motif a t cr dans le Gimp, sur une image de taille 5x7 pixels, puis nous avons cr lanimation.

Ecran 2 Cration de l'animation dans le Gimp

17

Ensuite nous avons converti chaque image en colonne.#define #define #define #define ORANGEMAN1 ORANGEMAN2 ORANGEMAN3 ORANGEMAN4 {0x00,0x50},{0x00,0x2b},{0x00,0x1f},{0x00,0x2b},{0x00,0x44} {0x00,0x50},{0x00,0x2b},{0x00,0x1f},{0x00,0x2b},{0x00,0x44} {0x00,0x48},{0x00,0x2b},{0x00,0x1f},{0x00,0x6b},{0x00,0x08} {0x00,0x48},{0x00,0x2b},{0x00,0x1f},{0x00,0x6b},{0x00,0x08} {0x00,0x0c},{0x00,0x6b},{0x00,0x1f},{0x00,0x6b},{0x00,0x18} {0x00,0x44},{0x00,0x2b},{0x00,0x1f},{0x00,0x2b},{0x00,0x50}

Les pixels ncessitant 7 bits par colonne, et 2 bits pour coder la couleur, il faut en tout 2 octets pour dcrire une colonne. Lorsque nous avons voulu crire hello, suivi dun bonhomme, le compilateur a signal que notre PIC navait pas assez de mmoire flash pour le programme cr. Nous avons donc simplifi la structure, en retirant les informations de couleur du bonhomme.#define #define #define #define MAN1 MAN2 MAN3 MAN4 0x50,0x2b,0x1f,0x2b,0x44 0x48,0x2b,0x1f,0x6b,0x08 0x0c,0x6b,0x1f,0x6b,0x18 0x44,0x2b,0x1f,0x2b,0x50

Il y a donc deux boucles diffrentes, lune pour traiter le texte et lautre les motifs anims. Solution : Il serait possible dutiliser leeprom pour stocker les caractres, ou bien de modifier le code C de manire optimiser plus fortement lassembleur produit, pour librer de la place dans la mmoire flash (cf. optimisation).

3) Structure du programmeVoici de manire rsume, lalgorithme du programme running man :

Fonction principale {Boucler indfiniment { Attendre Tant que indicateur = 0 ; Fixer la couleur du bonhomme ; Afficher le bonhomme dans une posture ; Afficher les lettres en changeant les couleurs au besoin ; Remettre lindicateur 0 ; } } Fonction dinterruption externe (ILS) { Mettre lindicateur 1 ; }

18

4) Optimisation logicielleLutilisation du langage C, nous a permis de mettre au point le programme de mesure de vitesse de manire trs rapide, puisquil fait appel aux fonctions delay_us, de manipulation dentier 32 bits, de formatage vers une chane de caractre (sprintf) et dcriture en eeprom. Le dveloppement en C se fait par contre lencontre de la performance puisque le code gnr est plus volumineux. Par exemple dans le programme clignotant, lallumage de chacune des leds donne lieux au code suivant : 29: output_high(PIN_D0); 004A 1683 BSF 004B 1008 BCF 004C 1283 BCF 004D 1408 BSF

0x3, 0x5 0x8, 0 0x3, 0x5 0x8, 0

Soit : RP0 = 1 TRISD0 = 0 RP0 = 0 RD0 = 1

passage en banque mmoire 1 (RP1=0) pour atteindre TRISD mise de la broche RD0 en sortie passage en banque mmoire 0 pour atteindre PORTD mise de la broche RD0 1

Il serait bien meilleur dinsrer en dbut de programme une initialisation, changeant de banque, passant lensemble du port D en sortie, puis revenant en banque 0, une fois pour toute, plutt que de le faire chaque tour de boucle, seule la dernire instruction serait alors utile. Cela impliquerait de dfinir des constantes de prprocesseurs pointant vers les registres de direction tels que TRISD, et que lutilisateur change lui-mme les bits de banque. Le compilateur C que nous utilisons favorise donc une utilisation transparente du PIC, au dtriment dune logique de codage stricte, et des performances.

19

8.

Conduite de projet1) Organisation

Figure 2 : Planning prvu

Figure 3 : Planning effectif

Nous avions prvu que les commandes pourraient nous poser problme pour finir temps, et nous avons donc anticip en faisant valider notre sujet puis en commandant une partie du matriel une semaine avant le dbut du projet.

20

2) Problmes rencontrsNous avons du faire face un problme important concernant les leds bicolores, les empreintes que nous avions trouves indiquaient que la cathode commune pouvait tre soit la patte du milieu soit lune des extrmits. Aprs observation des leds, nous avons conclus que la cathode tait bien lune des extrmits mais sans le vrifier exprimentalement.

Au moment o nous avons voulu utiliser une plaque de test pour nous assurer que les rsistances utilises permettraient davoir suffisamment de luminosit, nous avons compris que lempreinte ntait pas bonne et que la cathode tait au milieu. Il tait trop tard pour refaire le circuit imprim et nous avons donc essay de tordre les pattes au mieux pour conserver le circuit imprim en ltat et ne pas avoir sectionner les pistes et mettre des fils.

9.

Conclusion

Nous avons choisi un sujet intressant qui nous a permis de nous impliquer au maximum sur sa conception et sa ralisation. Nous avons cherch de la documentation et avons fait valider le projet, une semaine en avance de manire pouvoir commander les premires pices afin dtre srs de mener le projet terme. Le projet fonctionne correctement, nous pouvons afficher un texte de taille limite 6 caractres, ou bien des petites animations. Linterface srie nest pas fonctionnelle, il faudrait lui ajouter un module radio qui permettrait le changement du texte pendant la rotation du bras.

21

10. BibliographieDatasheet Microchip PIC16F87X Manuel de rfrence C de CSS Electronique pratique n 262 et 274. http://www.raphnet.net/electronique/pov_leds/pov_leds.php (vlo) http://www.bobblick.com/techref/projects/propclock/propclock.html (horloge) http://www3.sympatico.ca/surfin.dude/creative/clocks/propclk/blick.html (belle horloge) http://pierre.lando.free.fr/tentative/page1.html (balancier fait maison) http://soj.mesdiscussions.net/overclex/Electronique/persistance-retinienne-meca-electrooscillation-D-sujet-3936-1.htm (idem)

22