Projet : Persistance of Vision (POV) – affichage d - J.-M Friedt
Transcription
Projet : Persistance of Vision (POV) – affichage d - J.-M Friedt
Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 J.-M Friedt Objectifs Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 Organisation Stockage de la police Résultats J.-M Friedt Conclusion FEMTO-ST/département temps-fréquence [email protected] transparents à jmfriedt.free.fr 15 mai 2015 1 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 Objectifs du projet J.-M Friedt Objectifs Organisation Stockage de la police Résultats Conclusion • Objectif : utiliser la persistance rétinienne pour afficher un message au moyen d’un réseau de LEDs alignées en mouvement • Concept familier pour l’affichage 7-segments/LCD ou les écrans cathodiques, mais historiquement utilisé avant l’avènement du cinéma (folioscope et zootrope en 1834 ...) • Domaine d’application : acquisition et traitement de données sur support mobile, nécessité d’alimenter sur pile un dispositif qui sera en rotation (roue, rotor de moteur ou de turbine). 2 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 État de l’art • Principe : une barrette de LEDs en mouvement affiche un motif qui J.-M Friedt Objectifs évolue pour afficher un message • Contraintes : synchroniser sur la vitesse de rotation du support Organisation Stockage de la police • Projet classique faisant intervenir du GPIO, input capture, interruptions dans un cadre ludique Résultats Conclusion Exemples de démonstrations dans la littérature : • SpokePOV Persistence of Vision for your Bike ! 1 • R.P. Paul, G.B. Rathod, V.R. Trivedi, P.V. Thakkar, Persistence of Vision Control Using Arduino, I.J. Intelligent Systems and Applications, 2014, 01, pp.102-111 (10.5815/ijisa.2014.01.11) 2 • Spinning 16-led POV display using Teensy 2.0 3 • S. Monk, 15 Dangerously Mad Projects for the Evil Genius, Mc Graw Hill (2011), chap. 8 4 1. 2. 3. 4. http://www.ladyada.net/make/spokepov/ http://www.mecs-press.org/ijisa/ijisa-v6-n1/IJISA-V6-N1-11.pdf https://github.com/amcinnes/pov_display https://www.youtube.com/watch?v=Ulq33B_GnLo 3 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 J.-M Friedt Objectifs Organisation Stockage de la police Résultats Conclusion Organisation 10 séances de 3 heures : 0 comprendre le sujet + bibliographie 1 choix technologique : prise en main du microcontrôleur et des fonctions de base, planification du travail 2 conception du circuit (schéma) et commande des composants 3 suite de 2 (routage), test de la sonde à effet Hall, tension d’alimentation et distance de déclenchement 4 réalisation d’un premier prototype permettant de se familiariser avec le concept de POV : un motif périodique (chenillard) est affiché tandis que la plateforme est en rotation – relation entre GPIO et position 5 programme permettant d’afficher un message – table de caractères (difficulté : dépassement de RAM) 6 déclenchement du motif sur un point fixe de référence (INT0) 7 affichage sur timer au lieu d’afficher sur délai fixe (boucle vide) 8 ajustement de la vitesse du timer afin d’étaler le message sur toute la surface 9 finalisation rapport et présentation orale 4 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 rotation POWER RST 3V3 5V GND GND VIN CON2 1 2 3 4 5 6 D0(RXD) D1(TXD) D2(SDA) D3(SCL) D4 D5 D6 D7(LED1) A0 A1 A2 A3 A4 A5 ANALOG • montage mécanique de mise en PLATFORM1 CON3 LED2 LED3 LED1 LED4 LED6 D8(UEXT_PWR_E) D9(LED2) LED7 D10 LED8 D11 LED9 D12 LED10 D13(UEXT_#CS) LED5 1 2 3 4 5 6 7 8 D0 D1 D2 D3 D4 D5 D6 D7 DIGITAL Conclusion 1 2 1 2 3 4 5 6 CON4 1 2 3 4 5 6 7 8 9 10 ARDUINO LEONARDO PLATFORM Résultats nomenclature Arduino et mélange les ports ⇒ LUT reliant chaque LED à son port/position CON1 D8 D9 D10 D11 D12 D13 GND AREF SDA SCL DIGITAL Stockage de la police RESET JP1 IC1 Organisation • Olimexino-32U4 respecte la GND OUT VCC Objectifs • logiciel s’apparentant au chenillard 2 3 1 J.-M Friedt Circuit imprimé et première démonstration Circuit imprimé : CADSoft Eagle (www.cadsoft.de) 5 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 rotation POWER RST 3V3 5V GND GND VIN CON2 1 2 3 4 5 6 D0(RXD) D1(TXD) D2(SDA) D3(SCL) D4 D5 D6 D7(LED1) A0 A1 A2 A3 A4 A5 ANALOG • montage mécanique de mise en PLATFORM1 CON3 LED2 LED3 LED1 LED4 LED6 D8(UEXT_PWR_E) D9(LED2) LED7 D10 LED8 D11 LED9 D12 LED10 D13(UEXT_#CS) LED5 1 2 3 4 5 6 7 8 D0 D1 D2 D3 D4 D5 D6 D7 DIGITAL Conclusion 1 2 1 2 3 4 5 6 CON4 1 2 3 4 5 6 7 8 9 10 ARDUINO LEONARDO PLATFORM Résultats nomenclature Arduino et mélange les ports ⇒ LUT reliant chaque LED à son port/position CON1 D8 D9 D10 D11 D12 D13 GND AREF SDA SCL DIGITAL Stockage de la police RESET JP1 IC1 Organisation • Olimexino-32U4 respecte la GND OUT VCC Objectifs • logiciel s’apparentant au chenillard 2 3 1 J.-M Friedt Circuit imprimé et première démonstration Circuit imprimé : CADSoft Eagle (www.cadsoft.de) 6 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 J.-M Friedt Objectifs Organisation Stockage de la police Résultats Conclusion Table d’allocation des caractères • 10 LEDs (0x000-0x3FF) encodées (127−32) caracteres * 5 shorts = 950 octets 9 sur un short • 10×5 pixels/caractère • caractères affichables de la table 0 9 ASCII : 32-127 • 95 caractères×2 octets/colonne× 5 colonnes/caractère=950 octets 0 9 • travail incrémental : ajouter les caractères si nécessaire short c[475]= {0x000,0x000,0x000,0x000,0x000, 0x000,0x3fb,0x3fb,0x000,0x000, 0x000,0x000,0x000,0x000,0x000, 0x048,0x3ff,0x048,0x3ff,0x048, ... 0x3ff,0x203,0x206,0x20e,0x3f9, 0x000,0x100,0x3ff,0x000,0x000, 0x107,0x209,0x211,0x221,0x1c1, 0x202,0x221,0x221,0x252,0x18c, 0x3e0,0x020,0x020,0x3ff,0x020, 0x3e1,0x221,0x221,0x212,0x20c, 0x0fe,0x121,0x221,0x211,0x00e, ... // // // // // on a 2.5 KB RAM space ! " # // // // // // // // 0 1 2 3 4 5 6 0 9 0 9 0 0011000 11 00110011 00 11 001100 00 1100110011 00 110000110011 001100110011 001100110011001111 0011 11 11 0011001111 0011001100110011 00 00110011001111001100011110 00110011001111 11 00110110 00110011 00 11 00 11 001100110011 001100110011 00 001100110011 001100110011 001100110011 001100110011 00 11 11 00 0011 110011001100110011 0011001111 00 000 00110011 00110011 00110011001111 0011000 11 001100110011001100 110011 00 11 1100011001111001100 0x3ff 0x020 0x020 0x020 0x3ff 0x3ff 0x221 0x221 0x221 0x221 0x3ff 0x001 0x001 0x001 0x001 0x1fe 0x303 0x201 0x303 0x1fe 0x000 0x000 0x000 0x000 0x000 0x1ff 0x320 0x120 0x320 0x1ff 0x3ff 0x221 0x221 0x352 0x08c 0x1fe 0x303 0x201 0x201 0x201 0x3ff 0x220 0x220 0x220 0x200 0x1fe 0x303 0x221 0x323 0x13e 0x3ff 0x0c0 0x078 0x00c 0x3ff 0x3ff 0x220 0x220 0x240 0x180 0x3ff 0x203 0x206 0x20e 0x3f9 0x0c1 0x321 0x221 0x213 0x20c 0x203 0x20d 0x211 0x231 0x381 0x3fc 0x202 0x231 0x231 0x1c2 0x000 0x100 0x3ff 0x000 0x000 0x107 0x209 0x211 0x221 0x1c1 11 110000110011 00 11 00 0011001100110011110011000110011 001100110011110011000110011 11 00110011 00 11 00 00110011 00110011 00110011 00110011 11 00 11 001100110011 001100110011 00 11 00 001100110011 00110011 00110011 00110011 11 00 00110011001100110011 001100110011 001100110011 0011001100110011110000110011 0x3fc 0x003 0x01e 0x003 0x3fc 0x3ff 0x210 0x220 0x250 0x18f 0x3ff 0x201 0x201 0x102 0x0fc 0x201 0x201 0x3ff 0x201 0x201 0x004 0x203 0x201 0x203 0x3fc 0x3ff 0x260 0x090 0x108 0x207 0x3ff 0x100 0x0c0 0x100 0x3ff 0x300 0x200 0x3ff 0x200 0x200 0x3fe 0x001 0x001 0x001 0x3fe 0x3fc 0x002 0x001 0x002 0x3fc 0x38f 0x050 0x020 0x050 0x38f 0x380 0x040 0x03f 0x040 0x380 0x202 0x221 0x221 0x252 0x18c 0x3e0 0x020 0x020 0x3ff 0x020 0x3e1 0x221 0x221 0x212 0x20c 0x0fe 0x121 0x221 0x211 0x00e 0x200 0x200 0x23f 0x240 0x380 0x000 0x003 0x003 0x000 0x000 0x007 0x00c 0x030 0x0c0 0x380 0x048 0x3ff 0x048 0x3ff 0x048 110011 00110011001111 00 00110 001100110011110000 111100 11 11001111001100011 001100 00 110011001100110011 00111100001111000 00 111100 00110011001100 11 1100001100110011001100 11 11 11 00 001100110011 001100110011 001100110011001100110011001100110011 0011 0011 0011001100 11 0011 00 11 00 11 00 1100111100110 001100110011 001100110011 001100110011 00 11 00 0011001100110011110011000111100110 001100110011001111 00 001100110011 00 11 11 00 001100110011001100110011 001100110011 0011 001100110011 11 00110011 00110011 00110011 00 11 00 00110011 00110011 00110011 001100 11 11 00 11 00 11 00 11 0011 00 00 11 0011 0011 00110011 001100 11 00110011 00110011 00110011 00110011 11 0011001111 00 000 00110011 00110011 00110011001111 000011 001100110011001100 110011 00 11 1100011001111001100 001100110011001100 110011 001100110011 00110011 00110011 00110011 00110011 0011000 001100111100110110 0011001111001100011 0011001100 110011001100110011 00110011 00110011 00110011 00 11 1100001100110011 001100110011 001100110011001111 11 11 00 001100110011 001100110011 001100110011 001100110011 11 00110011 00110011 00 00 11 11 1100110011 001100110011 001100110011 001100110011 001100110011 00 11 00 001100110011 001100110011 0011001100110011001100110011 001100110011 001100110011001111 000011 001100110011 001100110011 00 11 00110011 00110011 00110011 00110011 00110011 00 11 00 0011 0011 0011 00110011 001100 11 11 00 11 00 11 00 11 00 11 00 11 00 110011 0011 0011 001100 00 11 0011 0011 0011 00110011 00110011 001100 11 00110011 00110011 00110011 110011 00 00110011 00110011 00110011 0011001100110011110000 110011001100110011 00110011 00110011001100 11 0011 00110011 00110011 00110011 00110011110000 1100110011 00110011110011011000 11 11 00 110011 001100110011 00 00 11 11 00 11 0011001100 11 00 11 00 11 00 0011 00110011 11 00 00110011001111001100011 001100 11 11001100 11001100110011 00110011 00 11 0011001100110011001100 00 11 001100110011 00110011110011000110011 1100001100110011 11 0000110011110000111100 001100 0011 0011 11 11 00 110011 00110011001100110011 00110011001100111100 001100110011 00 001100110011 001100110011 11 00001100111100 001100110011110000 11 11 00 11 00 0011 0011 0011 00110011 00 0011 00110011 00 11 00 11 00 11 11 11 001100110011 001100110011 001100110011 11 11 001111000011001100 00 00110011 00 110011001100110011 001100 00 1100110011 00 11 00111100110 0011 0011001100 11 001111 0011000 11 0011001100110011110011011001100110 110000110011 001100110011 001100110011 00 11 11 00110011 001100 00 110011 00110011 110011 001111 00001100 11 001100110011001100 11 00 001100110011 001100110011 1100001100111100 11 00110011 001100110011 0011 00 11 00 00110011 00110011 00110011 11 00 00111100110 001111 00110 00110011001111 000011 0x2de 0x121 0x121 0x121 0x2de 0x1c2 0x221 0x221 0x221 0x1fe 0x3ff 0x203 0x206 0x20e 0x3f9 0x000 0x06c 0x06c 0x000 0x000 00 11 1100110011 00 11 00 11001100110011 00 11 00 0x000 0x06d 0x06e 0x000 0x000 11 00 0011 0011 11 001100 11 00110011 00110011 00 110000110011 001100110011001100110011001100110011 0011 00110011001100110011 0011001101100110 0011001100110011 001100110011 001100110011 1100001100110011 0011001100110011 0011001100110011 00110011 0011001100110011 0x000 0x3fb 0x3fb 0x000 0x000 7 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 J.-M Friedt Objectifs Organisation Stockage de la police Résultats Conclusion Problème de gestion de mémoire Seulement 2,5 KB de RAM, mais table de caractères est statique donc on peut la mettre en flash (32 KB) ... sauf sur une architecture Harvard. • Sur MSP430 (Von Neumann), sans puis avec const : msp430-gcc -mmcu=msp430f1611 -O0 -o 3pov_memoire.msp430 3pov_memoire.c msp430-size 3pov_memoire.msp430sansconst text data bss dec hex filename 112 966 2 1080 438 3pov_memoire.msp430sansconst msp430-size 3pov_memoire.msp430avecconst text data bss dec hex filename 1062 16 2 1080 438 3pov_memoire.msp430avecconst • Sur Atmega32U4 (Harvard), sans puis avec const : avr-gcc -mmcu=atmega32u4 -O0 -Wall -o 3pov_memoire.avr 3pov_memoire.c avr-size 3pov_memoire.avrsansconst text data bss dec hex filename 232 966 0 1198 4ae 3pov_memoire.avrsansconst avr-size 3pov_memoire.avravecconst text data bss dec 232 966 0 1198 hex filename 4ae 3pov_memoire.avravecconst (text va en flash, data et bss en RAM) 8 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 Affichage d’un message alphanumérique J.-M Friedt Objectifs Organisation Stockage de la police Résultats • 3000 rpm = 50 rps = 20 ms/tour, donc afficher ”HELLO WORLD ” = 12 chars ⇒ 1.7 ms/char Conclusion • 5 colonnes/char et un espace = 6 colonnes/char ⇒ chaque colonne s’affiche 1700/6=283µs • utilisation du timer en mode Output Compare pour cadencer l’affichage • ajustement de la cadence sur vitesse de rotation (Input Capture v.s INT0) 9 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 J.-M Friedt Input Capture • Déclenchement d’une interruption sur une transition sur une broche liée à un timer Objectifs Organisation Stockage de la police • Étallonnage préliminaire ⇒ cadencement à 62500 Hz=16 MHz/256 50 Hz=0x4E2, 20 Hz=0xC35, 10 Hz=0x186A, 8 Hz=0x1E84, 4 Hz=0x3D09 Résultats Conclusion 0x175A=96 ms=10,4 Hz 0x166F=92 ms=10,9 Hz 5 Attention : la sonde à effet Hall nécessite une alimentation de 5 V/5 mA, elle ne commute pas si elle est alimentée en 3,6 V. 5. http://www.farnell.com/datasheets/1702865.pdf 10 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 Génération 5 V J.-M Friedt 1 Convertisseur DC-DC en step-up (3,6 V→5 V) 2 MAX1674 : entrée entre 0,7 et 5 V, sortie fixe à 5 V (300 mA) 3 ici, MAX631 : entrée entre 2,5 et 5 V, sortie fixe à 5 V (50 mA) Montage en dead-bug pour ne pas perdre de temps à refaire un circuit imprimé Objectifs Organisation Stockage de la police Résultats Conclusion 11 / 12 Projet : Persistance of Vision (POV) – affichage d’un message lumineux par Atmega32U4 Conclusion J.-M Friedt Objectifs 1 Projet permettant d’aborder de nombreux périphériques d’un microcontrôleur (GPIO, timer, interruption matérielle) 2 application embarquée nécessairement alimentée sur pile (rotation) 3 complexité incrémentale avec validation de chaque étape. Organisation Stockage de la police Résultats Conclusion Perspectives 1 ajouter la couleur en remplaçant l’unique LED rouge par colonne par le triplet RGB ou une LED 3-couleurs 6 7 . 2 solution 1-wire du WS2812 (Hackable n.6, 2015) au lieu de 10 GPIOs ? 6. LED RGB 5 mm, Farnell référence 2290374, 1 euro/p 7. Panasonic LED driver ICs POV (Persistence of Vision) illumination demo examples à http://channel.panasonic.com/contents/10919/ 12 / 12