Mini Mátrix

Készítette: Suba Gergely

Közreműködők: Gerencsér Péter, Gerzsenyi Marcell, Holcsik Tamás, Pintér Gyula, Székely Imre, Vandra Ákos, Zombori Attila

„Éjszaka egy megbeszélésről hazafelé menet láttuk, ahogy a kollégisták éppen fel-le kapcsolgatják a lámpáikat, és arra gondoltunk, milyen jó lenne ebből egy összehangolt játékot csinálni” – a 2002-es Schönherz Qpa óta a Mátrix alapítói általában ehhez hasonló bevezetővel kezdik az óriáskijelző történetét. Hat évvel később a Schönherz Elektronikai Műhely (SEM) ablakába Karácsony előtt kitett Knight Rider futófény, és persze a több ízben nézőként, ezt követően szervezőként átélt Mátrix ihlette a következőkben bemutatásra kerülő makettet. Az ötlet akkor került megvalósítási fázisba, amikor felkértek minket a Simonyi Konferencián egy Mátrixról szóló előadás megtartására. Kézenfekvőnek tűnt, hogy ezen a nagyszabású rendezvényen mutassuk be a fényjátékot, így egy hónappal a bemutató előtt nyolc emberrel és nem kevés ötlettel belevágtunk a fejlesztésbe.

Követelmények és elemzések

A Schönherz Mátrix kicsinyített makettjéről van szó, így ahhoz minél inkább hasonlítania is kell. A kor elvárásainak megfelelően színes kijelző építését tűztük ki célul, ezért az ablakokra irányított lámpákat itt RGB LED-ekkel (RGB LED: egyetlen átlátszó tokba épített piros, zöld és kék színű fénykibocsájtó dióda) kívántuk modellezni. Néhány paramétert lefektettünk követelményként; működjön 25 fps képfrissítés mellett, a színenkénti színmélysége minimum 4 bit legyen, ezen kívül képes legyen lejátszani az adatbázisunkban fellelhető régebbi Qpa csapat animációkat. Az idő szűkössége miatt fontos volt, hogy meglévő modulokkal, ill. kis módosítást igénylő áramköri elemekkel dolgozzunk.

A nagy mátrix 208 pixele tizenhat oszlopból és tizenhárom sorból áll, RGB LED-ekkel számolva tehát összesen 624 vezérlendő fényforrásról kell gondoskodnunk. Már a projekt kezdeti szakaszán a fő kérdésünk az volt, hogyan tudunk egyszerre 624 LED-et vezérelni, akár mindegyiket egyedi fényerővel. A kereskedelemben léteznek LED vezérlő IC-k, ezekkel a gond a kevés kimenet, ami miatt egy ilyen feladathoz akár több tucatot is fel kellene használnunk. Egy 30-40 IC-ből felépített kapcsolás – habár kivitelezhető – nem biztos, hogy a lehető legcélszerűbb megoldás 2009-ben.

A lábszámot mátrix kapcsolással és időmultiplex vezérléssel 55-re (16 oszlop, 13*3 sor, ha a külön színeket külön soronként kezeljük) tudjuk csökkenteni, amit egy nagyobb mikrokontroller – lábszámát tekintve – képes lenne irányítani. Itt viszont az imperatív programok feldolgozásának korlátjába ütközünk, az időmultiplex vezérlés még talán megoldható lenne, de a pixelenként egyedi PWM-es (pulse-width modulation) fényerőszabályzásra és ezzel párhuzamosan egy PC-vel folyó kommunikációra egy átlagos AVR vagy PIC mikrokontroller alkalmatlan lenne.

Ezen a ponton került szóba az FPGA (field-programmable gate array), ezzel soros kód futtatása helyett párhuzamosan működő áramköri egységekkel kivitelezhető a belső tároló feltöltése és a sorok párhuzamosan történő vezérlése.

Tegyük fel, hogy az FPGA képes mind a 624 LED-et vezérelni, így térjünk át a következő lépésre, a képek frissítésére. Az óriáskijelzőhöz hasonlóan a látványt PC-ről szerettük volna irányítani, ezért következő lépésként a PC és az FPGA közötti kommunikációra kerestük a megoldást.

USART használatát a nagy sávszélesség igény (25 frame/sec, 624 byte/frame) miatt elvetettük, második ötletként Ethernetes kommunikációra gondoltunk, ennek kivitelezéséhez a 2008-as Mátrixhoz fejlesztett Ethernetes modul megfelelőnek tűnt.

Ezek után a következő architektúrát kaptuk:

LED panel
Két lemezréteg, kétszáznyolc RGB LED, körülbelül ötven méter rézdrót – első ránézésre ilyen összetevőkből áll az elkészült LED panel. Az imént leírt vezérlésnek köszönhetően a LED-eket mátrix alakban kellett bekötnünk, ezzel sok időt és energiát megspórolva az egyenkénti meghajtáshoz képest.

A középső lemez előre kifúrt lyukaiba kerültek az 5 mm-es LED-ek, az ezeket összekötő huzalozást a lemez hátoldalán végeztük. A kékre festett elülső lemez 3 cm * 3 cm-es kivágásai a Schönherz ablakait hivatottak modellezni. A lemez belső felére pauszpapírt ragasztottunk, így a LED-ek különböző irányú fénykibocsátásaiból fakadó egyenetlenségeket kiküszöböltük.

A függőleges irányú összekötésekre vastagabb, 4 A-re tervezett sodrott rézdrótot használtunk, ezekkel a vezetékekkel ugyanis egyszerre biztosítjuk 39 LED közös katódjának táplálását, amik az időmultiplex vezérlésnek és meghajtásnak köszönhetően egyenként 100 mA-t is felvesznek. A sorok huzalozását vékonyabb tömör rézdróttal végeztük, itt ugyanis 100 mA maximális árammal számolhatunk.

A lemezeket műanyag távtartón keresztül csavaroztuk össze, a LED-ek és a pausz papír közötti 1 cm távolság egy kompromisszumos választásnak mondható a pixelnagyság és a három színkomponens szórásából adódó látványbeli problémák között.

Meghajtó áramkör
A meghajtó áramkör az FPGA kis teljesítményű kimeneteit a LED-ek időmultiplex meghajtására alkamas szintjeire alakítja. A LED-eket viszonylag nagy árammal kell meghajtani, mivel az idő csak kis hányadában világítanak, de az átlagos fényerejüknek a folyamatos meghajtással összemérhetőnek kell lennie. A soroknál nincs komolyabb probléma, ezen keresztül egyszerre csak egy LED kaphat áramot, ami legfeljebb 100 mA-t vehet fel. Az oszlopoknál már más a helyzet, ott egy időben akár 3*13 LED is bekapcsolhat, ezért ezekre a helyekre erősebb meghajtót kellett választanunk, a helyzetet pedig tovább rontja, hogy az FPGA nagyon kis áramot tud csak leadni. Mivel legalább ezerszeres áramerősítésre van szükség, ezért Darlington tranzisztorokat használtunk, ezek pár milliamper hatására több ampert is képesek kapcsolni.

mini_matrix_pic1

Vezérlő FPGA
A mátrix oszlopainak és sorainak vezérléséhez 55 kimeneti lábat használunk el, az Ethernetes csatolótól jövő kommunikáció további 10 bemenetet igényel. Ezen feltételek miatt vezérlő egységként a Xilinx Spartan3 Starter Kit-et választottuk, ez ugyanis rendelkezik megfelelő számú tüskesorra kivezetett I/O porttal. A kölcsönkapott fejlesztő panelt ezúton is köszönjük a MIT tanszéknek, különösképpen Fehér Béla Tanár Úrnak!

A fejlesztést Xilinx ISE WebPack környezetben végeztük, Verilog nyelven.

Az FPGA-ban felépített soronkénti dual port block RAM-ok minden időpillanatban az aktuális képet tárolják. A RAM-ok állapota időmultiplex módon kerül a Meghajtó áramkörhöz, egy átlagos hétszegmenses kijelző időmultiplex vezérlésétől csak annyiban tér el, hogy az oszlopkiválasztás időtartama alatt a sorokat a fényerővel arányos kitöltési tényezőjű impulzussal vezéreljük. Ezzel tehát lényegében ötvöztük az időmultiplex eljárást az impulzus szélesség modulációval. Az oszlopkiválasztásokat egyszerű órajelre kötött számláló és dekóder páros végzi, a sorokra kiadott egy bites jeleket pedig a RAM-ban tárolt 8 bites kitöltési tényező értékek és az órajel megfelelő leosztásával kapott bitek közötti reláció adja.

A dual port block RAM másik portja a pixelenkénti kitöltési tényezők beállítására lett fenntartva, ezeken a portokon keresztül állíthatjuk a LED-ek fényereit. A bájtonként MUEB-től érkező adatokat sorban eltároljuk a RAM megfelelő celláiban.

mini_matrix_pic2

Ethernet csatoló

mini_matrix_pic3A 2008-as Mátrix egyik nagy újítása az Ethernet alapú kommunikáció. Ezt újonnan tervezett mikrokontrolleres szobánkénti egységekkel értük el, amelyet – talán kicsit nagyképűen – Multi Usage Ethernet Board-nak, rövidített nevén MUEB-nek neveztünk el. Az eszköz az elmúlt félév során különféle Ethernetes fejlesztések alapját képezte, ezek során többször bebizonyította, hogy tényleg érdemes erre az elnevezésre.

Jelen alkalmazásban a szerepe nagyon egyszerű; a PC által küldött UDP csomagok hasznos terheit bájtonként kiküldi az FPGA felé, egyszerűen kialakított párhuzamos porton. A 8 bites adatport mellett Wr és FrameStart control jelek szolgálnak a kommunikáció biztosítására.

 

PC – szoftver

mini_matrix_pic4Az óriáskijelzőre készített animációkkal való kompatibilitás céljából a Mátrix alapító Csernozjom által készített Animáció Szerkesztő programot fejlesztettük tovább az új formátumú UDP csomagok kiadására. Az eddigi animációk egyszínű két- ill. három árnyalatosak voltak, a fejlesztés után ezeket piros, zöld ill. kék alapszínnel tudjuk lejátszani a beállításoknak megfelelően.

A régi animációkon keresztül a színes kijelzőben rejlő lehetőségek töredéke érzékelhető csak, ezért fejlesztettünk egy új, színes lejátszó programot, aminek első verziója egymás utáni képek (jpg, gif, bmp) időzített megjelenítésével éri el a mozgó kép hatást.

Epilógus
A Schönherz Elektronikai Műhely csapata több hetes munka után a 2009-es Simonyi Konferencián bemutatta a kollégium első színes kijelzőjét, amit hamarosan mindenki láthat működés közben a SEM 319-es laborjának ablakában. Pár hét próbaüzem után akár a Te animációd is levetítésre kerülhet, amelyet a kollégistákon kívül a Budafoki- és Irinyi út kereszteződésében Schönherz felé tekintő járókelők is megcsodálhatnak majd.