projet : persistance of vision (pov) – affichage d'un message
TRANSCRIPT
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Projet : Persistance of Vision (POV) – affichaged’un message lumineux par Atmega32U4
J.-M Friedt
FEMTO-ST/departement temps-frequence
transparents a jmfriedt.free.fr
15 mai 2015
1 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Objectifs du projet
• Objectif : utiliser la persistance retinienne pour afficher un messageau moyen d’un reseau de LEDs alignees en mouvement
• Concept familier pour l’affichage 7-segments/LCD ou les ecranscathodiques, mais historiquement utilise avant l’avenement ducinema (folioscope et zootrope en 1834 ...)
• Domaine d’application : acquisition et traitement de donnees sursupport mobile, necessite d’alimenter sur pile un dispositif qui seraen rotation (roue, rotor de moteur ou de turbine).
2 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Etat de l’art
• Principe : une barrette de LEDs en mouvement affiche un motif quievolue pour afficher un message
• Contraintes : synchroniser sur la vitesse de rotation du support
• Projet classique faisant intervenir du GPIO, input capture,interruptions dans un cadre ludique
Exemples de demonstrations dans la litterature :
• SpokePOV Persistence of Vision for your Bike ! 1
• R.P. Paul, G.B. Rathod, V.R. Trivedi, P.V. Thakkar, Persistence ofVision Control Using Arduino, I.J. Intelligent Systems andApplications, 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, McGraw Hill (2011), chap. 8 4
1. http://www.ladyada.net/make/spokepov/
2. http://www.mecs-press.org/ijisa/ijisa-v6-n1/IJISA-V6-N1-11.pdf
3. https://github.com/amcinnes/pov_display
4. https://www.youtube.com/watch?v=Ulq33B_GnLo3 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Organisation10 seances de 3 heures :
0 comprendre le sujet + bibliographie
1 choix technologique : prise en main du microcontroleur et desfonctions de base, planification du travail
2 conception du circuit (schema) et commande des composants
3 suite de 2 (routage), test de la sonde a effet Hall, tensiond’alimentation et distance de declenchement
4 realisation d’un premier prototype permettant de se familiariser avecle concept de POV : un motif periodique (chenillard) est affichetandis que la plateforme est en rotation – relation entre GPIO etposition
5 programme permettant d’afficher un message – table de caracteres(difficulte : depassement de RAM)
6 declenchement du motif sur un point fixe de reference (INT0)
7 affichage sur timer au lieu d’afficher sur delai fixe (boucle vide)
8 ajustement de la vitesse du timer afin d’etaler le message sur toutela surface
9 finalisation rapport et presentation orale4 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Circuit imprime et premieredemonstration
• logiciel s’apparentant au chenillard
• Olimexino-32U4 respecte lanomenclature Arduino et melange lesports ⇒ LUT reliant chaque LED ason port/position
• montage mecanique de mise enrotation
123456789
10
CON4
A0A1A2A3A4A5
D0D1D2D3D4D5D6D7
D8D9D10D11D12D13GNDAREF
RST3V35VGNDGNDVIN
SDASCL
PLATFORM1
12345678
CON3
123456
CON1
123456
CON2
IC1
VCC
1
GN
D2
OU
T3
LED1
LED2LED3
LED4
LED5
LED6
LED7LED8LED9LED10
JP112
RESET
D1(TXD)
D3(SCL)D2(SDA)
D0(RXD)
D7(LED1)
D13(UEXT_#CS)
D4D5D6
D9(LED2)D10D11D12
D8(UEXT_PWR_E)
POW
ERAN
ALO
GD
IGIT
ALD
IGIT
ALAR
DU
INO
LEO
NAR
DO
PLA
TFO
RM
Circuit imprime : CADSoft
Eagle (www.cadsoft.de)
5 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Circuit imprime et premieredemonstration
• logiciel s’apparentant au chenillard
• Olimexino-32U4 respecte lanomenclature Arduino et melange lesports ⇒ LUT reliant chaque LED ason port/position
• montage mecanique de mise enrotation
123456789
10
CON4
A0A1A2A3A4A5
D0D1D2D3D4D5D6D7
D8D9D10D11D12D13GNDAREF
RST3V35VGNDGNDVIN
SDASCL
PLATFORM1
12345678
CON3
123456
CON1
123456
CON2
IC1
VCC
1
GN
D2
OU
T3
LED1
LED2LED3
LED4
LED5
LED6
LED7LED8LED9LED10
JP112
RESET
D1(TXD)
D3(SCL)D2(SDA)
D0(RXD)
D7(LED1)
D13(UEXT_#CS)
D4D5D6
D9(LED2)D10D11D12
D8(UEXT_PWR_E)
POW
ERAN
ALO
GD
IGIT
ALD
IGIT
ALAR
DU
INO
LEO
NAR
DO
PLA
TFO
RM
Circuit imprime : CADSoft
Eagle (www.cadsoft.de)
6 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Table d’allocation des caracteres• 10 LEDs (0x000-0x3FF) encodees
sur un short
• 10×5 pixels/caractere
• caracteres affichables de la tableASCII : 32-127
• 95 caracteres×2 octets/colonne×5 colonnes/caractere=950 octets
• travail incremental : ajouter lescaracteres si necessaire
short c[475]= // on a 2.5 KB RAM
{0x000,0x000,0x000,0x000,0x000, // space
0x000,0x3fb,0x3fb,0x000,0x000, // !
0x000,0x000,0x000,0x000,0x000, // "
0x048,0x3ff,0x048,0x3ff,0x048, // #
...
0x3ff,0x203,0x206,0x20e,0x3f9, // 0
0x000,0x100,0x3ff,0x000,0x000, // 1
0x107,0x209,0x211,0x221,0x1c1, // 2
0x202,0x221,0x221,0x252,0x18c, // 3
0x3e0,0x020,0x020,0x3ff,0x020, // 4
0x3e1,0x221,0x221,0x212,0x20c, // 5
0x0fe,0x121,0x221,0x211,0x00e, // 6
...
����������������������������������������
����������������
����������������
����������������
����
����������������������������������������
������������ ����
��������������������������������
��������
������������
��������
���� ��������������������
������������
������������������������������������
����������������
����
����������������
������������ ����������������������������������������
������������ ����
����������������������������������������
��������
��������
��������������������
������������
��������������������������������
����
��������
����������������
����
����
����
������������
����
��������
����������������������������
����
��������
������������
����
������������
�������� �������� ����
�������� ��������
����������������������������
��������������������������������
��������������������������������
����
����������������������������������������
��������
������������
����
��������
�������� ����
������������
����
����
����
��������
����������������
����
��������
������������ ����
����������������
��������������������
����
����������������
����������������
����
����������������������������������������
��������
������������
��������
��������
���� ��������������������
��������
��������
����
����������������
����
����
������������
����������������
��������������������
����
����
��������
��������������������
������������
������������
��������������������
���� ��������������������������������
��������
������������
��������
����
����
���� ����
����
������������
�������� ����
����
������������������������
��������
����
������������������������
��������
����
����������������������������������������
��������
������������
�������� ����������������������������������������
��������������������������������
��������
��������
����������������
����
��������
����������������
����
����������������
����������������������������
����
��������
����
������������
�������� ��������
�������� ��������������������������������������������
����������������
��������
����
������������
����
��������������������������������
������������ ����
��������������������������������
������������
��������
���� ����
����
��������
������������
����
��������
������������
����
����������������
������������
����������������
��������
��������������������
��������������������������������
��������
����������������
����
����
������������
����
��������
��������������������
��������
��������
����������������
��������������������������������������������
�������� ����
����
����
����
��������
����
����
�������� ����
����
����
����
��������
��������
����
����
�������� ��������
���� ����
����
����
������������
��������
������������
������������
����
����
��������
��������
�������� ����
��������
������������
��������
�������� ����
����
������������
��������������������
��������
��������
������������������������
����
������������
��������
��������
��������
������������ ����
����������������
��������
������������
��������������������
��������
�������� ������������
����
������������ ���� ��������
��������
������������
������������
����������������
����
����������������
����������������
��������
��������
������������ ������������
������������
������������
����
������������
����������������������������������������
��������
��������
����������������
��������������������
����
��������
��������
������������
��������
�������� ����
��������
������������
������������
����
��������������������
��������
��������
����
����
����������������
��������
����
����������������
����������������
��������
��������
������������
����
������������������������
��������
���� ����
���� ����������������
����
���� ����
��������
����������������
����������������
���� ���� ����
���� ���� ����
0x3ff0x2100x2200x2500x18f
0x3ff0x020
0x3ff
0x0200x020
0x3ff0x2210x2210x2210x221
0x3ff0x001
9
0
0x0010x0010x001
0x1fe0x3030x2010x3030x1fe
0x0000x0000x0000x0000x000
0x3ff0x2010x2010x1020x0fc
0x3fc0x0030x01e0x0030x3fc
0x3ff0x0c0
0x3ff
0x0780x00c
0x3ff0x2200x2200x2400x180
0x3ff0x203
9
0
0x2060x20e0x3f9 0x200
0x3fe0x0010x0010x0010x3fe
0x3800x0400x03f0x0400x380
0x3fc0x0020x0010x0020x3fc
0x38f0x0500x0200x0500x38f
0x0c10x3210x221
0x20c0x200
0x2000x3ff
0x300
0x213
(127−32) caracteres * 5 shorts = 950 octets
0x1ff0x320
0x320
0x3ff0x2210x2210x3520x08c
0x1fe0x303
9
0
0x2010x2010x201
0x1fe0x303
0x3230x13e
0x201 0x3ff0x0040x2030x2010x203
0x3ff0x2600x0900x1080x207
0x120
0x1ff
0x3ff0x2200x2200x2200x200
0x221
0x2010x2010x3ff0x201
0x3fc 0x3ff0x100
0x1000x0c0
0x2030x20d
0x381
0x2110x231
0x3fc0x2020x2310x2310x1c2
0x0000x100
9
0
0x3ff0x0000x000 0x18c
0x3e00x0200x020
0x2000x2000x23f0x2400x380
0x3e10x221
0x2120x20c
0x0fe0x1210x2210x2110x00e
0x1070x2090x211
0x1c10x252
0x2210x221
0x202
0x221 0x3ff0x020
0x2de0x121
0x2de
0x1210x121
0x2210x2210x2210x1fe
0x3ff0x203
9
0
0x2060x20e0x3f9 0x000
0x0000x0030x0030x0000x000
0x0000x3fb0x3fb0x0000x000
0x0070x00c0x0300x0c00x380
0x0480x3ff0x0480x3ff0x048
0x0000x06c0x06c
0x0000x0000x06e
0x000
0x000
0x06d0x1c2
0x221
7 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Probleme de gestion de memoireSeulement 2,5 KB de RAM, mais table de caracteres est statique doncon 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 hex filename
232 966 0 1198 4ae 3pov_memoire.avravecconst
(text va en flash, data et bss en RAM)8 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Affichage d’un messagealphanumerique
• 3000 rpm = 50 rps = 20 ms/tour, donc afficher”HELLO WORLD ” = 12 chars ⇒ 1.7 ms/char
• 5 colonnes/char et un espace = 6 colonnes/char ⇒ chaque colonnes’affiche 1700/6=283µs
• utilisation du timer en mode Output Compare pour cadencerl’affichage
• ajustement de la cadence sur vitesse de rotation (Input Capture v.sINT0)
9 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Input Capture
• Declenchement d’une interruption sur une transition sur une brocheliee a un timer
• Etallonnage preliminaire ⇒ cadencement a 62500 Hz=16 MHz/25650 Hz=0x4E2, 20 Hz=0xC35, 10 Hz=0x186A, 8 Hz=0x1E84, 4 Hz=0x3D09
0x175A=96 ms=10,4 Hz 0x166F=92 ms=10,9 Hz
Attention : la sonde a effet Hall 5 necessite une alimentation de5 V/5 mA, elle ne commute pas si elle est alimentee en 3,6 V.
5. http://www.farnell.com/datasheets/1702865.pdf10 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Generation 5 V
1 Convertisseur DC-DC en step-up (3,6 V→5 V)
2 MAX1674 : entree entre 0,7 et 5 V, sortie fixe a 5 V (300 mA)
3 ici, MAX631 : entree entre 2,5 et 5 V, sortie fixe a 5 V (50 mA)Montage en dead-bug pour ne pas perdre de temps a refaire uncircuit imprime
11 / 12
Projet :Persistance of
Vision (POV) –affichage d’un
messagelumineux parAtmega32U4
J.-M Friedt
Objectifs
Organisation
Stockage de lapolice
Resultats
Conclusion
Conclusion
1 Projet permettant d’aborder de nombreux peripheriques d’unmicrocontroleur (GPIO, timer, interruption materielle)
2 application embarquee necessairement alimentee sur pile (rotation)
3 complexite incrementale avec validation de chaque etape.
Perspectives
1 ajouter la couleur en remplacant l’unique LED rouge par colonnepar le triplet RGB ou une LED 3-couleurs 6 7.
2 solution 1-wire du WS2812 (Hackable n.6, 2015) au lieu de 10GPIOs ?
6. LED RGB 5 mm, Farnell reference 2290374, 1 euro/p7. Panasonic LED driver ICs POV (Persistence of Vision) illumination demo
examples a http://channel.panasonic.com/contents/10919/12 / 12