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

Documents pareils