MSP430: Svˇeteln´e efekty na maticov´em displeji Dokumentace projektu IMP 2009 - 2010
Autor: Macek Miroslav (xmacek13)
V Brnˇe, 12.12.2009
Obsah 1
´ Uvod
2
2
ˇ sen´ı HW Reˇ 2.1 Modul displeje . . . . . . 2.2 Popis sch´ematu zapojen´ı . 2.2.1 Seznam souˇca´ stek 2.3 Sch´ema zapojen´ı . . . . . 2.4 Deska ploˇsn´eho spoje . . .
. . . . .
2 2 3 3 4 5
. . . . .
6 6 6 7 7 8
3
4
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
ˇ sen´ı SW Reˇ 3.1 Mapov´an´ı v´ystup˚u MCU na LED displeje 3.2 Multiplexovan´e zobrazen´ı . . . . . . . . . 3.3 Zp˚usob uloˇzen´ı dat pro zobrazen´ı . . . . . 3.4 Bˇeh programu . . . . . . . . . . . . . . . 3.5 Struktura efekt˚u . . . . . . . . . . . . . . Ovl´adac´ı manu´al
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
9
1
´ 1 Uvod ´ celem projektu je vyuˇzit´ı mikrokontrol´eru MSP430 obsaˇzen´em v pˇr´ıpravku FITkit k zobrazov´an´ı Uˇ svˇeteln´ych efekt˚u na maticov´em displeji 8x8 bod˚u. Efekt˚u m´a b´yt minim´alnˇe 5 a jejich v´ybˇer je prov´adˇen pˇr´ıkazy zas´ılan´ych pˇres termin´al. Pˇr´ım´e pˇripojen´ı svˇeteln´ych diod displeje k v´yvod˚um MCU nen´ı z d˚uvodu relativnˇe velk´eho odbˇeru proudu optim´aln´ı ˇreˇsen´ı. Proto byl navrˇzen a zkonstruov´an modul obsahuj´ıc´ı posilovac´ı tranzistory pro pˇreveden´ı pr˚utoku proudu displeje pˇr´ımo z nap´ajen´ı FITkitu. Modul je s FITkitem propojen v´ıceˇzilov´ym kabelem opatˇren´ym dutinkov´ymi konektory. Po vyˇreˇsen´ı hardwarov´e str´anky probl´emu pˇrich´az´ı na ˇradu ˇreˇsen´ı principu ovl´ad´an´ı kaˇzd´eho bodu (svˇeteln´e diody) displeje. Uvnitˇr displeje jsou spojeny vˇzdy katody sloupce a anody ˇra´ dku. V´ysledkem je zredukov´an´ı poˇctu ˇr´ıd´ıc´ıch vodiˇcu˚ na 16. Vznik´a vˇsak probl´em nemoˇznosti ovl´adnut´ı kaˇzd´e z LED displeje v jednom cˇ asov´em okamˇziku. Proto je pro vykleslen´ı obrazu na displeji vyuˇzito cˇ asov´eho multiplexu softwarovˇe implementovan´eho v MCU. V projektu jsem pouˇzil displej obsahuj´ıc´ı v kaˇzd´em svˇeteln´em bodˇe dvˇe LED - cˇ ervenou a zelenou. Rozhodl jsem se tedy implementovat moˇznost ovl´ad´an´ı obou barev. V jednom okamˇziku m˚uzˇ e sv´ıt´ıt pouze jedna z barev, d˚uvod bude uveden n´ızˇ e. Aplikace je pˇreloˇziteln´a v SVN syst´emu termin´alov´e aplikace QDevKit a ovl´ad´ana pomoc´ı termin´alu.
ˇ sen´ı HW 2 Reˇ Z d˚uvodu velk´e variability zp˚usob˚u propojen´ı displeje s FITkitem je potˇreba detailnˇe popsat mnou realizovan´y zp˚usob.
2.1
Modul displeje
Jak jiˇz bylo zm´ınˇeno v´ysˇe, displej nen´ı k fitkitu pˇripojen pˇr´ımo. Proud jedinou LED displeje m˚uzˇ e b´yt podle datasheetu aˇz 30 mA (ˇcerven´a) a 25 mA (zelen´a) pˇri konstantn´ım proudu. V pulzn´ım reˇzimu s d´elkou pr˚utoku 1/10 milisekundov´e periody pulzu dokonce 140 mA. Proto je omezen´ı proudu cca 40 mA na jeden pin MSP430 naprosto nedostaˇcuj´ıc´ı (uvaˇzme, zˇ e by jeden pin MCU musel b´yt schopen propustit aˇz 8x25 mA). Proud pro cˇ erven´e LED je omezen rezistory 120 R, pro zelen´e 130 R. V´ypoˇctem podle Ohmova z´akona dost´av´ame proud 25 mA pro cˇ ervenou a 22 mA pro zelenou LED. ˇ adky displeje tvoˇr´ı anody diod, proto jsou buzeny P-kan´alov´ymi MOSFET tranzistory. Sloupce R´ tvoˇr´ı katody, jsou tedy podpoˇreny NPN tranzistory. Tyto NPN tranzistory jsou k dispozici v integrovan´ych osmic´ıch, takˇze se konstrukce zjednoduˇs´ı. Spojen´ım ˇra´ dk˚u obou barev byl zredukov´an poˇcet ˇr´ıd´ıc´ıch vodiˇcu˚ na 24. Pro slouˇcen´ı byly z´amˇernˇe vybr´any ˇra´ dky kv˚uli zmenˇsen´ı poˇctu P-MOSFET tranzistor˚u, kter´e jsou v porovn´an´ı s integrovan´ymi NPN tranzistory drah´e a zab´ıraj´ı v´ıce m´ısta. Celkem modul obsahuje 8 P-MOSFET tranzistor˚u typu
2
BS250KL a 16 NPN tranzistor˚u ve dvou integrovan´ych obvodech ULN2803. Obˇe barvy vˇsech sloupc˚u maj´ı vlastn´ı pˇredˇradn´y rezistor, je jich tedy potˇreba 16. Nemoˇznost zobrazit v jednom okamˇziku v´ıce barev je d´ana pr´avˇe redukc´ı MOSFET tranzistor˚u ˇra´ dk˚u. Ty by v pˇr´ıpadˇe rozsv´ıcen´ı vˇsech 16 LED v ˇra´ dku (8 cˇ erven´ych + 8 zelen´ych) musely b´yt dimenzov´any na proud 380 mA. Typ BS250KL je pouze do 270 mA. Proto LED mus´ı b´yt pˇrep´ın´any po sloupc´ıch - v jednom okamˇziku m˚uzˇ e v r´amci jednoho ˇra´ dku sv´ıtit maxim´alnˇe jedna LED kaˇzd´e barvy. To ˇra´ dkov´y MOSFET tranzistor zat´ızˇ´ı proudem max. 47 mA. Tranzistory NPN pole ULN2803 mohou b´yt zat´ızˇ eny aˇz 500 mA, proto na pˇr´ıpadn´y proud 380 mA pˇri svitu obou barev cel´eho sloupce jsou zcela vyhovuj´ıc´ı. Pˇredˇradn´e rezistory b´az´ı NPN tranzistor˚u jsou jiˇz integrov´any v obvodech ULN2803, proto se bez nich zapojen´ı obejde. Diskr´etn´ı tranzistory BS250KL, jakoˇzto typ MOSFET, rezistory pro gate nepotˇrebuj´ı (sp´ısˇe naopak). Mechanick´e propojen´ı modulu s FITkitem je usnadnˇeno vyveden´ım vˇsech b´az´ı a gate elektrod na piny pasuj´ıc´ıch do dutinkov´ych konektor˚u. Pro tento 26-pinov´y konektor byl vyroben kabel se 40 pinov´ym konektorem na stranˇe FITkitu pasuj´ıc´ı na konektor JP9. Z tohoto konektoru je tak´e do modulu pˇriv´adˇeno nap´ajen´ı 5 V. Z´aklad modulu tvoˇr´ı ploˇsn´y spoj vyroben´y v amat´ersk´ych podm´ınk´ach a osazen´y pˇr´ısluˇsn´ymi souˇca´ stkami. Pro pˇripevnˇen´ı displeje jsou do DPS pˇrip´ajeny jednoˇrad´e dutinkov´e liˇsty tak, zˇ e do nich lze displej zasunout. Pro u´ plnost je nutno dodat, zˇ e s moˇznost´ı ovl´adat dvˇe barvy LED v jednom bodˇe z´ısk´ame tˇri moˇzn´e barvy - cˇ ervenou, zelenou a jejich sm´ıch´an´ım tak´e zˇ lutou.
2.2
Popis sch´ematu zapojen´ı
ˇ adky displeje a jim odpov´ıdaj´ıc´ı vstupy bud´ıc´ıch tranzistor˚u jsou znaˇceny Rx, kde x je cˇ´ıslo ˇra´ dku. R´ Obdobnˇe jsou znaˇceny sloupce jako Cxy, kde x je cˇ´ıslo sloupce a y je znaˇcen´ı barvy. M˚uzˇ e b´yt bud’ R pro cˇ ervenou nebo G pro zelenou. Pˇr´ısluˇsej´ıc´ı piny vˇsech konektor˚u modulu a FITkitu k ˇra´ dk˚um a sloupc˚um jsou zaznamen´any ve sch´ematu zapojen´ı. 2.2.1
Seznam souˇca´ stek
Jm´eno
Hodnota/Typ
R1-R8 R9-R16 Q1-Q8 IC1, IC2
130-150R 120R BS250KL ULN2803
3
Sch´ema zapojen´ı FITkit MCU header JP9
R2
R3
R4
C5 C6 C7 C8 R G R G R G R G
S1
R1
17
ULN2803
18 17 16 15 14 13 12 11 10 +5V O1 I1 O2 I2 O3 I3 O4 I4 O5 I5 O6 I6 O7 I7 O8 I8 GND CD+ 1 2 3 4 5 6 7 8 9
IC1
Q4
Q3
Q2
R1 R9 R2 R10 R3 R11 R4 R12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Display TOP socket 32
Q1
14 12 10 8 6 4 2
39 +5V 37 C7R 35 C6G 33 C6R 31 C5G 29 C5R 27 R4 25 R3 23 R2 21 19 R1 17 R8 15 R7 13 R6 11 9 7 5 3 1
+5V
GND 40 C8G 38 C8R 36 C7G 34 C4R 32 C4G 30 C3R 28 C3G 26 C2R 24 C2G 22 C1R 20 C1G 18 R5 16
Display modul header
GND
GND
1 R6 3 R7 5 R8 7 R1 9 R2 11 R3 13 R4 15 C5R 17 C5G 19 C6R 21 C6G 23 C7R 25 +5V
+5V
H1
C1 C2 C3 C4 G R G R G R G R
R5
R6
R7
1
R8
S2
R5 2 C1G 4 C1R 6 C2G 8 C2R10 C3G12 C3R14 C4G16 C4R18 C7G20 C8R22 C8G24 GND 26
16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Display BOTTOM socket
R13 R5 R14 R6 R15 R7 R16 R8
R1-R8 (red) 130R (150R)
Q8
Q7
Q6
Q5
ULN2803 +5V
O1 I1 O2 I2 O3 I3 O4 I4 O5 I5 O6 I6 O7 I7 O8 I8 GND CD+
Q1-Q8 BS250KL
1 2 3 4 5 6 7 8 9
IC2
18 17 16 15 14 13 12 11 10
R9-R16 (green) 120R
GND
C1
C2
C3
C4
C5
C6
C7
C8
R1 R2
RED
R3 R4 R5 R6 R7 R8
D1
D9
D17
D25
D33
D41
D49
D57
D2
D10
D18
D26
D34
D42
D50
D58
D3
D11
D19
D27
D35
D43
D51
D59
D4
D12
D20
D28
D36
D44
D52
D60
D5
D13
D21
D29
D37
D45
D53
D61
D6
D14
D22
D30
D38
D46
D54
D62
D7
D15
D23
D31
D39
D47
D55
D63
D8
D16
D24
D32
D40
D48
D56
D64
D65
D73
D81
D89
D97
D105
D113
D121
D66
D74
D82
D90
D98
D106
D114
D122
D67
D75
D83
D91
D99
D107
D115
D123
D68
D76
D84
D92
D100
D108
D116
D124
D69
D77
D85
D93
D101
D109
D117
D125
D70
D78
D86
D94
D102
D110
D118
D126
D71
D79
D87
D95
D103
D111
D119
D127
D72
D80
D88
D96
D104
D112
D120
D128
R1 R2
GREEN
2.3
R3 R4 R5 R6 R7 R8
Display 8x8
Obr´azek 1: Sch´ema zapojen´ı modulu
4
2.4
Deska ploˇsn´eho spoje
ˇ Cerven´ e cesty znaˇc´ı dr´atov´e propojky na stranˇe souˇca´ stek.
Obr´azek 2: rozmˇery: 83 x 66 mm
5
ˇ sen´ı SW 3 Reˇ Po zhotoven´ı hardwarov´e cˇ a´ sti a u´ spˇesˇn´em propojen´ı modulu displeje s FITkitem je programov´a cˇ a´ st ˇreˇsen´ı zcela v reˇzii konstrukt´era. Vyjma spr´avn´eho namapov´an´ı pouˇzit´ych pin˚u MCU na porty dostupn´e v programovac´ım jazyce lze zbytek software ˇreˇsit libovolnˇe. V n´asleduj´ıc´ım textu budou struˇcnˇe uveden´e principy m´eho ˇreˇsen´ı.
3.1
Mapov´an´ı v´ystupu˚ MCU na LED displeje
Pro jednoduˇssˇ´ı a intuitivn´ı pˇr´ıstup k jednotliv´ym bit˚um port˚u PxOUT mikrokontrol´eru MSP430 jsem vytvoˇril bitov´e masky kaˇzd´eho pouˇzit´eho pinu. Pomoc´ı tˇechto masek jsou definov´any dalˇs´ı makra s parametrem, kter´a uˇzit´ım bitov´ych logick´ych operac´ı umoˇzn´ı rozsv´ıcen´ı nebo zhasnut´ı pˇr´ısluˇsn´e LED. N´azvy maker odpov´ıdaj´ı znaˇcen´ı ˇra´ dk˚u a sloupc˚u uveden´ych ve 2.2. Naps´an´ım napˇr. R5(ON); C8R(ON); se rozsv´ıt´ı cˇ erven´a LED na p´at´em ˇra´ dku v osm´em sloupci. S hodnotou OFF naopak LED zhasne.
3.2
Multiplexovan´e zobrazen´ı
Jak jiˇz bylo zm´ınˇeno, pro moˇznost ovl´adat stav kaˇzd´eho bodu displeje nez´avisle je nutnost´ı pouˇz´ıt cˇ asov´y multiplex zobrazen´ı. V kaˇzd´em cˇ asov´em okamˇziku je aktivov´an pouze jeden sloupec a k nˇemu pˇr´ısluˇsn´e ˇra´ dky. Sloupce se pˇrep´ınaj´ı cyklicky zleva doprava. Aktivita kaˇzd´eho sloupce trv´a dobu 1 ms. Definice funkce pro multiplex je multiplex(unsigned long long* d, char color), kde d je odkaz na promˇennou s daty a color definuje barvu sn´ımku. M˚uzˇ e nab´yvat hodnot RED, GREEN nebo YELLOW.
6
˚ Zpusob uloˇzen´ı dat pro zobrazen´ı
3.3
Aby se uloˇzen´ı konfigurace vˇsech LED pro jeden sn´ımek zobrazen´ı nemuselo zab´yvat multiplexn´ım ˇr´ızen´ım, jsou data uloˇzena v jedn´e 64-bitov´e promˇenn´e typu unsigned long long. Kaˇzd´y jej´ı bit reprezentuje stav LED - ON nebo OFF. Korespondence jednotliv´ych bit˚u s body displeje je uvedena zde: COLS ROW ROW ROW ROW ROW ROW ROW ROW
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 ------------------------|63|62|61|60|59|58|57|56| |55|54|53|52|51|50|49|48| |47|46|45|44|43|42|41|40| |39|38|37|36|35|34|33|32| |31|30|29|28|27|26|25|24| |23|22|21|20|19|18|17|16| |15|14|13|12|11|10|09|08| |07|06|05|04|03|02|01|00| -------------------------
Nastavovat pro kaˇzd´y obrazec efektu ruˇcnˇe vˇsechny bity promˇenn´e s daty m˚uzˇ e b´yt nˇekdy neefektivn´ı s pracn´e. Proto jsem vytvoˇril funkce, kter´e umoˇzn´ı rozsv´ıcen´ı nebo zhasnut´ı LED urˇcen´e souˇradnicemi x, y. Pozice souˇradnic odpov´ıdaj´ı kart´ezk´e soustavˇe, to znamen´a, zˇ e spodn´ı lev´y roh odpov´ıd´a hodnot´am souˇradnic x=0, y=0, horn´ı prav´y roh odpov´ıd´a x=7, y=7. Funkce pro ovl´ad´an´ı bod˚u podle souˇradnic jsou: set_on(char x, char y, ullong* shot) set_off(char x, char y, ullong* shot) get_val(char x, char y, ullong* shot) neg_val(char x, char y, ullong* shot)
Rozsv´ıt´ı LED na pozici x, y Zhasne LED na pozici x, y Zjist´ı stav LED na pozici x, y Zneguje stav LED na pozici x, y
Pro efekty je moˇznost vyuˇz´ıt tak´e implementovan´e funkce pro vykreslen´ı u´ seˇcky Bresenhamov´ym algoritmem draw_line(int x0, int y0, int x1, int y1, char s, ullong* d), kde x0 a y0 jsou souˇradnice zaˇca´ tku u´ seˇcky a x1 a y1 jsou souˇradnice konce. Parametr s definuje, zda-li se m´a trajektorie u´ seˇcky rozsv´ıtit nebo zhasnout (ON—OFF). Ukazatel ullong je vˇzdy odkaz na data vykreslovan´a funkc´ı multiplex().
3.4
Bˇeh programu
Po inicializaci pouˇzit´ych promˇenn´ych a v´ystup˚u MCU je d´ale program rˇ´ızen v nekoneˇcn´e smyˇcce. Podle hodnoty v glob´aln´ı promˇenn´e global_effect je za pouˇzit´ı switche vol´ana funkce pˇr´ısluˇsn´eho efektu. V kaˇzd´em cyklu nekoneˇcn´e smyˇcky je vol´ana funkce multiplex() pro vykreslen´ı aktu´aln´ıch dat a funkce terminal_idle() pro obsluhu termin´alu. V tˇele efekt˚u proto nen´ı vhodn´e vyuˇz´ıvat 7
cˇ ekac´ıch funkc´ı, protoˇze se t´ım prodlouˇz´ı doba mezi vykreslov´an´ım multiplexu. Prodlevy mezi stavy efektu jsou proto ˇreˇseny poˇc´ıtadly pr˚ubˇeh˚u, jak bude uvedeno n´ızˇ e. Pˇri zad´an´ı pˇr´ıkazu pˇres termin´al je vol´ana funkce decode_user_cmd(), kter´a rozpozn´a zadan´e pˇr´ıkazy a jejich dek´odov´an´ım nastav´ı poˇzadovan´e glob´aln´ı promˇenn´e. Glob´aln´ı promˇenn´e ovlivˇnuj´ıc´ı pr˚ubˇeh programu v nekoneˇcn´e smyˇcce jsou: unsigned unsigned unsigned unsigned
3.5
char global_effect char global_color char global_clr_rnd int global_speed
ˇ ıslo prob´ıhaj´ıc´ıho efektu C´ Aktu´aln´ı barva efektu Pˇr´ıznak, zda-li m´a b´yt barva mˇenˇena n´ahodnˇe Rychlost aktu´aln´ıho efektu
Struktura efektu˚
K´od kaˇzd´eho efektu je obsaˇzen ve vlastn´ı funkci v souboru effects.c. Promˇenn´e vyuˇz´ıvan´e konkr´etn´ım efektem jsou deklarov´any pˇred hlaviˇckou funkc´ı a jsou glob´aln´ı. Ke glob´aln´ım promˇenn´ym hlavn´ıho modulu main.c je umoˇznˇen pˇr´ıstup d´ıky modifik´atoru extern. Pro snadn´e ˇr´ızen´ı efekt˚u je vytvoˇreno pole pˇr´ıznak˚u effect_run[] ud´avaj´ıc´ı, kter´y efekt je spuˇstˇen. Na zaˇca´ tku kaˇzd´eho efektu je testov´an´ı na aktivitu (pˇr´ıznak na pˇr´ısluˇsn´em indexu effect_run[]) a pokud nen´ı pˇr´ıznak nastaven, efekt provede inicializaci sv´ych pouˇz´ıvan´ych promˇenn´ych, vynuluje pole effect_run[] a nastav´ı v nˇem pˇr´ıznak bˇehu (hodnota 1) na sv´e pozici. Pˇri dalˇs´ıch bˇez´ıch smyˇcky se jiˇz vykon´av´a k´od efektu. Jelikoˇz nekoneˇcn´a smyˇcka prob´ıh´a relativnˇe rychle (zpoˇzd’ov´an´ı je pouze ve funkci multiplex()), je ve vˇsech efektech pouˇzit cˇ´ıtaˇc delay, kter´y je porovn´av´an s hodnotou zpoˇzdˇen´ı global_speed a t´ım doc´ıl´ıme zpoˇzdˇen´ı mezi f´azemi efektu bez n´ar˚ustu prodlevy mezi vol´an´ım vykreslov´an´ı multiplex(). Pˇri kaˇzd´em bˇehu smyˇcky je tak´e aktualizov´ana barva color hodnotou global_color zadanou pˇres termin´al uˇzivatelem. Nˇekter´e efekty mohou b´yt i nez´avisl´e na barvˇe zadan´e global_color a urˇcovat si ji samy. D´ale je jeˇstˇe v bˇehu smyˇcky aktualizov´ana hodnota global_speed zadan´a ˇ ım vyˇssˇ´ı hodnota, t´ım jsou prodlevy mezi zmˇenami efektu vyˇssˇ´ı. Pˇri zjiˇstˇen´ı aktivn´ıho uˇzivatelem. C´ pˇr´ıznaku global_clr_rnd se barvy mˇen´ı n´ahodnˇe v n´ahodnˇe generovan´ych intervalech.
8
4
Ovl´adac´ı manu´al
Po pˇrekladu a nahr´an´ı aplikace do FITkitu (nejl´epe pouˇzit´ım QDevKitu) aplikaci spust’te otevˇren´ım termin´alu. Pˇr´ıkazy zas´ılan´e MCU termin´alem: EFFECT number NEXT PREV OFF COLOR value SPEED number
Spuˇstˇen´ı efektu pod cˇ´ıslem number Spuˇstˇen´ı n´asleduj´ıc´ıho efektu Spuˇstˇen´ı pˇredchoz´ıho efektu Zastav´ı pˇrehr´av´an´ı efektu Nastav´ı barvu efektu, moˇznosti jsou: [RED—GREEN—YELLOW—RANDOM] Nastav´ı rychlost efektu v rozmez´ı [1..1023]
Implementovan´e efekty jsou (moˇzn´a bude potˇreba m´ırnˇe zapojit fantazii): EFFECT EFFECT EFFECT EFFECT EFFECT EFFECT
1 2 3 4 5 6
Pˇres´ypac´ı hodiny Zrychluj´ıc´ı se vrtule s n´aslednou exploz´ı (barvy a rychlost jsou pevnˇe dan´e) Z´ablesky Efekt spektr´aln´ıho analyz´atoru hudebn´ıch pˇrehr´avaˇcu˚ Bl´ızˇe nespecifikovateln´y efekt Padaj´ıc´ı sn´ıh
9