www.elektroncso.hu » cikkek
előzmény o

A grafikus vákuum flouresszensz kijelző modulok.
Bozó Balázs

A grafikus kijelző modulok.
A legolcsóbb grafikus
A csatlakozó bekötése - a kábelezés
A CIG BG technológia
Fejlesztői környezet
Az utasítások bemutatása egy konkrét példán keresztűl

A felhasználás szempontjából természetesen a legnagyobb szabadságot a grafikus modulok jelentik. Sajnos áruk miatt nem annyira ismertek, pedig vannak olcsóbb típusok is anélkül, hogy le kellene mondanunk az inteligens modulok előnyéről. Egy ilyet próbálunk ki jelen esetben, a gyártó hirdetése szerint karakteres modul áráért grafikust. Régebben a grafikus modulok egyszerű vezérléssel voltak ellátva. Leginkább közvetlenül cpu buszra ültethető interfésszel memóriába ágyazott eléréssel rendszerint memória nélküli megjelenítő eszközök voltak. Memória nélküliként arra gondolok, hogy természetesen a felbontásának megfelelő RAM-al rendelkezett, hogy a kijelzőt frissíthesse, de azon kívűl más funkciót nem látott el, rendszerint kiolvasni sem lehetett csak írni a kijelző memóriát. A mai kijelző modulok ezt már túlhaladták. A rengeteg lábszámú kijelzőt meghajtó áramköröket már inteligens mikrokontrollerek vezérlik sokszor igen jelentős órajellel és megfelelő méretű memóriával, sok funkciós kijelzési lehetőségekkel esetenként saját operációs környezettel és utasításokkal. A gyártói vonal kétfelé ágazott ugyanis. Az egyik ág a hagyományosnak mondható memóriába ágyazott módszert használva jeleníti meg képeit, persze ma már minimum 2 kijelzőnyi memóriával, hogy ameddig az egyik kép a kijelzőn, addig a másik kép már töltődhessen a memóriába. A másik vonal a saját utasításokat használó megoldás. Ez azonban nem zárja ki természetesen, hogy egy adott terméken belül is lehet a két hozzáférési mód között átjárni, választani.

Az Itron 7000-es sorozata egy ilyen karakteres árú grafikus modulja, ami az utóbbi szerinti utasítás alapú vezérlést igényli. Kicsit összefoglalava ezt olyan kép tárul elénk, hogy a 800-as sorozat az elsőnek említett közvetlen memóriába ágyazot elérési móddal, a 7000-es sorozat az utasításokkal elérhető és van egy csúcs sorozat a 3000-es sorozat, melynek tagjai nem csak, hogy utasításokkal is és közvetlen memória hozzáféréssel is elérhető, de mindkettő igen nagy sebességgel is - teret adva ezzel az animációs lehetőségeknek is. Az utasítások igen szerteágazóak, melyek segítségével egy kisteljesítményű vezérlésből is látványos kijelzés nyerhető. A teljesség érdekében megemlíthető még a 8000-es sorozat is, amely a 800-as tovább fejlesztett változata, amely így már nagysebességűvé válik. Ha az elektronikai interfész szempontjából közelítjük meg a sorozatot akkor megállapíthatjuk, itt is az érvényes, hogy bármit lehessen a modulhoz illeszteni. Ezek alapján a 7000-es sorozat alapesetben i80-as párhuzamos és RS232C szinteket is tűrő soros interfésszel ellátottak. A 7002-es sorozat szintén i80-as buszhoz és szinkron, illetve aszinkron soros busszal rendelkezik. A 7003-as sorozatúak csak a már említett aszinkron, szinkron soros interfésszel rendelkeznek, míg a 7006-os sorozatban a párhuzamos interfész M68 sorozatú processzorokhoz illeszkedő. A sorozat százas helyiértékű számai a fontkészletre utalnak. Sőt a kor kihívásaira válaszolva létezik már 7032 sorozat is, ahol a tizesek helyén megjelenő 3-as a 3.3-voltos busz-ra utal.
A magyarországi forgalamzótól bemutatásra egy GU140X32F-7000-es modult kaptam. Ez a modul tehát egy i80-nak megfelelő párhuzamos interfésszel ellátott, illetve egy RS232C-t tűrő soros interfésszel is rendelkezik. A párhuzamos interfész a CN1 nevezetű egysoros 14 kivezetéses csatlakozón keresztűl érhető el, míg a soros egy (CN2) hatcsatlakozóson közlekedik. A párhuzamos csatlakozó jelei: (1) GND - a tápfeszültség közös pontja, (2) Vcc - a tápfeszültség + pontja (+5V/400mA), (3) Nem használt,(4) RS - regiszter választó, (5) _WR - írás jel, (6) _RD - olvasás jel, (7) D0, (8) D1, (9) D2, (10) D3, (11) D4, (12) D5, (13) D6, (14) D7/PBUSY. A (3)-as csatlakozó funkciója Jumperekkel választható, alapesetben nem használt. A soros csatlakozó bekötése; (1) Vcc - a tápegység pozitív pólusa (+5V), (2) SIN - soros adatvonal, (3) GND - a tápegység közös pontja, (4) SBUSY - foglaltság jelző, (5) nem bekötött, (6) _Reset - alaphelyzetbe állító jel.A modulon található ezen kívűl még egy Jumper terület is, ahol a szükséges konfigurációkat el lehet végezni. A gyári alap beállítás szerint mind nyitott. Átállításkor vegyük figyelembe, hogy a modul csak egyszer, a tápfeszültség bekapcsolása után értékeli ki a jumperek állapotát! Az összesen négy darab jumper jelentése a következő: a J0 és J1 a soros kommunikációt ütemező Baudrate kiválasztását szolgálja. Alapesetben ez 38400bps (mindkettő nyitott). A maximális sebesség 115200bps ha mindkettő zárt, és a leglassabb 9600bps a J0 nyitott és a J1 zárt állapotában érhető el. A soros kommunikációnak nagy előnye, hogy a vezérléskor használt mikrokontroller lábaiból csak egyet kell felhasználni, igaz némi sebesség csökkenés árán. Visszatérnék még egy pár mondatig a 14-es csatlakozó sor (3)-as lábára, mert a CN2 közelében található egy JB nevezetű jumper is amellyel ennek a (3)-as lábnak adhatunk funkciót. Ez a funkció lehet _Reset (C-R zárt) vagy kivezethetjük vele a PBUSY (C-B zárt) jelet. Az érdekesség miatt megemlítendő, hogy a modul kezelésében nem kap szerepet az RS regiszter választó jel, ami az utasítás és adat között tenne különbséget. Mivel az utasítások úgy lettek kitalálva, hogy az adatok beágyazottak, így ennek a jelnek nincs szerepe.

A CIG (Chip-in-Glass) flouresszensz kijelzők BD sorozata.
A modul gyártási technológiában is újdonságnak számít, mert BD technológiával készül. Ez a technológia azt jelenti, hogy az anódokat és a rácsokat meghajtó teljes elektronikát maga a kijelző tartalmazza. Ez több szempontból is előnyős. Mivel a kijelző tartalmazza a meghajtó áramköröket, szinteltoló áramköröket, tárolókat, illetve a léptető regisztereket is, a panelen ezeknek nem kell rajta lenniük, és magának a kijelzőnek a lábszámai is jeletősen csökkenhettek. Ezek a jelek tulajdonképpen már csak a tápfeszültségek, fűtés, tárolókat vezérlő jel és a vezérlést szolgáló soros adat, valamint a hozzátartozó órajelre korlátozódik. Mint a képen is látható maga az egész meghajtó elektronika a fűtést tartó fémlemezke alá került.
További előnye a technológiának, hogy a magas integrálási foknak köszönhetően lehetővé válik, még a grafikus modulok nagy bonyolultsága mellett is, a statikus meghajtás. Ez azt jelenti, hogy tíz voltos nagyságrendű anód és rács feszültség mellett (tipikusan 15V) üzemelhessen, kiváló fényerővel és hosszabb élettartammal. Az anód és a rácsfeszültséget immár elő lehet állítani egyszerűen DC-DC átalakítóval is, elmaradhat az eddig megszokott nagyfeszűltségű tápegység és trafó. Ebből következő előny továbbá a sokkal kevesebb elektromos zaj. (Így talán már nem kell kikapcsolni majd a kijelzőt zene hallgatás közben)

A kijelző modult legjobban egy konkrét felhasználáson keresztül célszerű bemutatni. Ez a felhasználás legyen mondjuk egy előerősítő kijelzőjeként. A fejlesztés alapvető szempontja közé tartozik az, hogy eldöntsük milyen formában kezeljük a modult. Sokkal nagyobb szabadságot biztosít megjelenítés szempontjából az ha grafikusan jelenítünk meg mindent, a kijelzőt csak passzívan használjuk. Bár a kijelző modulnak nincs olyan DMA közvetlen adat beviteli lehetősége, mint a 800-as, vagy a 3900-as sorozatúaknak, azért ügyes utasítás használattal, és mivel a modul elég gyors megoldható lenne. Ezt jelen esetben elvettem, mert itt első sorban az utasításokat ismertetem, és ez gyakorlatilag egy utasítással megoldható lenne, másik szempont az, hogy általános felhasználásnál a modult egy mikrokontroller vezérli, aminek erőforrásait nem kifejezetten a kijelzésre szeretnénk pocsékolni. Olyannyira nem, hogy gyakorlatilag a gyors párhuzamos vezérlésről is lemondunk esetenként, hiszen a gyakorlatban ritkán szükséges a másodpercenkénti 10-nél gyorsabb frissítés. Ezért bátran használhatjuk pusztán 1db vezetéken soros eléréssel is. Azt szeretnénk ha a felhasználót grafikus ábrákkal tájékoztatná a történtekről illetve a lehetőségekről. A ModuleMaster azért nagyszerű, mert a fejlesztési időt jelentősen lerövidíti alkalmazása és a kész listát exportálhatjuk rögtön a kijelző vezérlését adó kontroller fejleszői környezetébe. Ott már nem kell bajlódni a kijelző utasításaival, vagy emlékezni minden paraméterre, és ha mégsem sikerült emlékezni, napokig kereshetjük a hibát. Itt előre mindent megcsinálhatunk majd a kívánt formában kinyerve azt csak beillesztjük és már használható is. A program remekül használható arra is, hogy a kijelző utasításait megnézhessük anélkül, hogy a gyári leírást hosszasan bogarásznánk, hiszen minden utasításhoz tartozik leírás is. Azért pár alap dologgal érdemes tisztában lenni, nevezetesen modulunk alapvető adotsságaival. Mégpedi azzal, hogy 140x32 pixeles felbontása van. Van egy beépített karakterkészlete, mely 5x7 pontmátrix karaktereket tartalmaz. Ezekből viszont igen jeletős mennyiséget összesen 10 félét. Megtalálható benne a ciril betűktől a Win1250-es is, ami magyar ékezetes kiosztást jelent, mint amilyet a windows is használ. Ez azért jó, mert nem kell fejlesztés közben a karakter táblákkal bíbelődni, egyszerűen a Module Masterbe beírt kódokat kell küldeni, amit a kijelző az elvárt módon jelenít meg. Ez az 5x7-es pontmátrix betűtípus ezen a kijelzőn 4 sorban jeleníthető meg. Ha definiálunk neki karaktereket lehetőségünk van nagyobb 7x8 betűkészlet használatára is. Hogy ne legyen egyhangú a kijelzés egy betű növelőt is használhatunk (Specify Font Size Magnification) így lehetőségünk lesz horizontálisan (4x) is és/vagy vertikálisan (2x) is megnövelni betűinket. Használhatjuk a fixpontos kiírást vagy a proporcionális kiíratást is. Ez utóbbi azt jelenti, hogy ha pl. egy a betű és egy i betű kerül egymás mellé akkor az i betű nem foglal a betű (5 pixeles) méretű helyet így több betű fér ki egy sorban, mint a fix pontos megjelenítés esetében. A fix pontos megjelenítés viszont változó hosszúságú adatok kiírásakor jól használható mert kiszámítható a hossz és így nem borul fel a kijelzési kép.

A UserList ablak funkciói; bár nagyon egyértelmű azért egy rövid leírásban ismertetem a funkciókat, ami Demo screept, vagy a saját magunk által írt utasításlistát megjeleníteni segíti. Az ablak bal oldali részében magát a listát láthatjuk sorszámozva. Ez a sorszám majd például a Jump utasításnál megadható, így az utasítás által végrehajtott ugrás ide történhet. Ha a sorra kattintunk egerünk bal gombjával a Parameters ablakban az utasítás paramétereit láthatjuk, az ablak fejlécében a modul végrehajtási idejét láthatjuk, de visszatérve a UserList ablakra és az utasítások sorára azon a jobb egérgombot megnyomva a szokásos szerkesztési funkciókkal találkozunk (Cut, Copy, Paste, Delete) és még pár érdekességgel. A ViewHex természetesen az utasítás kódját teszi láthatóvá Hex-ában a Help ablakban a fejlécében a hossza byte-ban. A Checksum természetesen a kód ellenőrző kódját számítja ki és adja meg a választásunknak megfelelően Xor illetve Sum módszerek alkalmazásával. Az Edit Description segítségével átnevezhetjük az utasítást számunkra beszédesebb formára is, vagy akár magyarosíthatjuk is. Az Enable illetve a Dissable funkció a Lista végrehajtásakor be, illetve kikapcsolja ezt az utasítást a végrehajtásból. A RunLine természetesen arra szolgál, hogy a sort a többitől függetlenül végrehajtsa a kijlező, amit egyébként az utasítás sorára kétszer kattintva is megtehetünk.

Ennyi információ után már készen állunk első valódi fejlesztésünkre ami a már említett előerősítő kijelzés lenne. Hozzá is kezdhetünk saját UserList-ánk írásához. A bal oldali ablakban rá kattintva a megfelelő utasításra az megjelenik a középső [UserList] ablakában. Ha szükséges neki további paraméter megadása azt mindig a Parameters ablakban tehetjük meg. Első utasításnak adjuk ki a ModMasternek, hogy miképpen érheti el a kijelző modult. Ezt a (már fentebb tárgyaltuk) Set Comms Port [1:] utasítással tehetjük meg. A ModMaster-nek szóló utasítások piros színnel jelöltek. Ezek tulajdon képpen olyan utasítások amik segítik és lehetővé teszik a fejlesztést a valódi működést. Mivel a fentebbi részben már említettem miképpen kell konfigurálni, így itt most eltekintek tőle. A forrás következő részében Initialize Display [2:] utasítás következik mely fekete színével is jelzi, hogy immár a kijelzőhöz szól és annak inicializálását végzi el. Figyelem a kijelző modul (DIP kapcsolók állása) konfigurációját nem olvassa újra! Ez az utasítás törli is a kijelzőt és alapállapotba is állítja. Sokszor gyorsabb a használata – és a biztosan tudott alap állapot, mint nyomon követni, hogy hol – mi is történik.
A következő utasításunk Send Bitmap Image to Display [3:] utasítás az ami tulajdonképen kirakja a grafikus ikont a kijelzőre. Mint már említettem az ikont egyszerűen bmp formában várja. A paramétereinél meg kell adni az ikon nagyságát. A vízszintes (X) irányú kiterjedését, ami nálunk 32 pixel, illetve a függőleges nagyságát, ami szintén 32 pixel, de a VFD modul sajátosságainak megfelelően ezt byte-ban kell megadnunk az az ide 4-et írunk. Ezután a Display Positon-t kell megadnunk, ami példánkban 0,0. Ezután természetesen magát a bmp file elérési útvonalát. Ha nem megfelelő lenne az ikon vagy a megadott paraméterek, azt jelzi a program, futtatáskor. A Left X illetve Top Y vagy a Right X, Bottom Y paraméterek segítségével egy nagyobb képből illetve a kép bizony részeit is meg tudjuk jeleníteni. Ez a funkció különösen scrollozásnál hasznos. (Ne feledjük a Bottom Y-nál 1 el kevesebbet kell megadni, mert 0-s oszlop is beleszámít a képbe.) A következő paraméter a Bit/Byte orientation ami a kijelző belső szervezésére utal. A mi esetünkben az alapbeállítás használatos (V Write / V Byte / D7 Top).
A következő utasítással CursorSet [4:] a kiírandó karakterek pozícióját állíthatjuk be, vagyis a kurzor helyzetét ahonnan a kiírás majd kezdődik. Az előző utasítás logikájára az X poziciót pixelben az Y-ét byteban adjuk meg. 40,1 így majdnem középre kerül. Ezután már csak a Write Text [5:] utasítást kell kiadnunk, paramétereként természetesen a kiírandó szöveggel ami esetemben az elektroncso.hu szöveg lesz.
Ha idáig eljutottunk akár meg is nézhetjük mit csinál az első screeptünk. A UserList ablak jobb oldalán található gombok segítségével elindíthatjuk (Run List) megállíthatjuk (Stop) vagy menet közben felfüggeszthetjük a futtatást (Pause) segítségével, míg a Single Step gombbal lépésenként tudjuk végrehajtatni a Listát. A Show opciókkal további információkat is megjeleníthetünk illetve tilthatunk. A Parameters alapesetben engedélyezett ez teszi lehetővé, hogy az utasítások paramétereit a paraméter ablakban láthassuk, szerkeszthessük. A Note segítségével a jobb oldali ablakban jelennek meg a megjegyzések a program használatával kapcsolatban pl. a soros port és a modul bekötése. A Transmit és a Receive egy ablakot nyit a jobb oldali oszlopban amin keresztül nyomon követhetjük a modul és a gép közötti kommunikációt. A TX és az RX led-ek a kimenő jelnek megfelelően villognak. A gyakorlatban és ha a kézfogást nem kapcsoltuk be csak a Tx LED-et láthatjuk majd dolgozni. Az alattuk lévő Clear Tx illetve Clear Rx gombok a bekapcsolt Transmit illetve a Receive ablakok tartalmát törlik megnyomásukkor. Visszatérve az utolsó opcióhoz a Show kapcsolói közé a HexOnly kapcsoló hatására az információk csak Hex-ában jelennek majd meg, mert egyébként aminek van értelmes karaktere az megpróbálja olyan formában megjeleníteni. (Bár a hexa kijelzés további előnye, hogy regisztrációs kód nélkül is kinyerhetjük a kész kódot a programból mert az kijelölhető és így Cut/Copy-z ható.)
Az alap beállításokhoz tartozik, hogy kiválasszuk a használni kívánt karakter és kód táblákat. Ezt Font Set Select [6:] (Latin Amerika) illetve a Specify Character Code Type [7:] (PC852 Latin2)-vel tehetjük meg. Azért ezt választottam, mert a WPC1252 ugyan a Windows-nak megfelelő helyen tartja ékezetes betűit, de hosszú ékezetek helyett gyakran „kalapos” betűket használ, holott a kijelző modul karakterei között megtalálhatóak az általunk használtak is. Így ugyan kiíráskor kicsit trükközni kell, de ezt egyrészt a felhasználó – az előfok használója nem látja, és nem is érdekli – másrészt a tervezhető karaktereket elhasználhatjuk másra. Arról tájékoztatást, hogy mit hol találunk a karakter táblákban a gu7000intfon leírásból nyerhetünk. Beállítjuk még az Over-Write Módot [8:], hogy a kiírásaink egymás tetejére kerüljenek megoldva ezzel a kijelző törlését is.
A következő sorba beiktatok egy Detect key/input sort, amelynek hatására szimuláljuk a majdani előfok inicializálási idejét. Jelen esetben egy billentyű megnyomására vár. A paraméterei között megadjuk, hogy a billentyűzetről várjuk a változást (Detect From Keyboard) és a Key/Code sorban adhatjuk meg, hogy milyen kódra vagy karakterre várjon. Én most csak a szóköz billentyű lenyomásával egy szóköz várására vettem rá. Az Actionnál állítsuk be a Wait-next line opciót, így a szóköz leütésével a következő sorra lép.
Ezután kikapcsoljuk (Screen Saver: Mode – Power Off [10:]) a kijelzőt. Vagyis a majdani előfok készenléti üzemmódban kerül. Bekapcsolni a saját bekapcsoló gombjával lehet majd, illetve távvezérlőről. Mivel az előfok természetesen elektroncsöves felépítésű ezért a bekapcsolás első fázisában a csövek fűtését kapcsolja be és a kijelzőn ennek visszajelzése látható.
Első lépésben az imént már megismert Detect key/input-sorral ismét szimuláljuk a távvezérlő, illetve a bekapcsoló gomb funkcióját és várunk arra, hogy a felhasználó aktivizálja a rendszert. Ezután a kijelző modult a Screen Saver álltal előidézett energiatakarékos kikapcsolt állapotból fel kell ébreszteni az újból kiadott ScreenSaver Mode:Power On [12:] utasítással. Ezután beállítjuk a kijelző fényerejét (Display Brightness 25% [13:]), amit majd az előfokon beállíthatunk, mint felhasználó. Letöröljük a kijelzőt [14:] és megjelenítjük a Send Bitmap Image to Display [15:] utasítással a bekapcsolást jelző logót. A fűtés kiírásához pozícionáljuk a kurzort a megfelelő helyre (58,0) és kiírjuk a „Fűtés” szöveget, ami kicsi trükkel tökéletesen megjeleníthető anélkül, hogy az ű-t és az é-t meg kellene rajzolnunk. Ezért a szöveget úgy írjuk be, hogy a fentebb már beállított karakter táblának megfelelő legyen. Mivel a szövegbe bármikor használhatunk hexa vagy decimális kódot is írjuk így: F!ebt!82s, ami azt eredményezi, hogy az ű-t a hex eb-n lévő karakter jeleníti meg, míg az é-t a hexa 82. A használt Latin2 táblában itt található a miénkre leginkább hasonlító ű és é betű. A ModMasternek a !jel jelzi a hexa formát, vagy a # decimális formát.

Felhasznált irodalom:
[1] Noritake - ItronGU140X32F-7000 Specification