Fórum témák
» Több friss téma |
Cikkek » Tényleg nincs királyi út? I. rész Tényleg nincs királyi út? I. rész
Szerző: icserny, idő: Jún 22, 2013, Olvasva: 26939, Oldal olvasási idő: kb. 11 perc
A Stellaris Launchpad kártya bemutatásaA Texas Instruments EK-LM4F120XL típusjelű Stellaris LM4F120 LaunchPad kártyája egy kicsit kilóg a sorból, mivel nem MSP430 hanem egy nagyteljesítményű 32 bites ARM Cortex-M4F magú LM4F120H5QR mikrovezérlő ketyeg benne, ami teljesítményben és bonyolultságban már meghaladja azt a szintet, amit kezdőnek szívesen ajánlana az ember. A teljesség kedvéért azonban erről a kártyáról is szólnunk kell, hiszen az Energia ezt a kártyát is támogatja. Szólnunk kell azonban arról is, hogy a 2012. őszén megjelent Stellaris LM4F120 LaunchPad kártyát a gyártó már átdolgozta, s egy még nagyobb teljesítményű és USB OTG képességű TM4C123GH6PM mikrovezérlővel szerelve fogja árulni (e sorok írásának idején még csak előrendeléseket fogadnak), s előbb-utóbb azt is támogatni fogja az Energia. Mi azonban egyelőre az eredeti EK-LM4F120XL kártyánál maradunk, azt ismertetjük röviden. A kártya felépítése az alábbi ábrán látható. A kártya felső részén a programozó és hibavadász áramkör található, amely egy USB mikro-B kábelen keresztül csatlakoztatható a számítógéphez. A kártya középső és alsó részén a kísérleti áramkör (vagy "cél áramkör") helyezkedik el.
8_1. ábra: Az LM120 Stellaris Launchpad kártya A céláramkörhöz RESET gomb, két felhasználói nyomógomb és egy RGB LED is csatlakozik. A kivezetések úgy vannak kialakítva, hogy a két szélső csatlakozósor (a képen J1 és J2) geometriailag és elektromosan is kompatibil az MSP430 Launchpad kártyával. Ez lehetővé teszi, hogy az MSP430 Launchpad kártyához készült bővítőkártyákat (shield) a Stellaris Launchpad kártyához is használhassuk. A kártya túloldalán a kivezetések 20 pólusú csatlakozóhüvelyekben végződnek. Ezek segítségével a Stellaris Launchpad kártya akár egy anyalapra (motherboard) is ráültethető. A Stellaris LaunchPad kártya (nemhivatalos nevén "Stellarpad") egy 80 MHz-es LM4F120H5QR mikrovezérlőt tartalmaz (pontosabban kettőt, mert a kártyára épített programozó és hibavadász áramkör is egy másik ugyanilyen mikrovezérlőt tartalmaz). Az LM4F120H5QR mikrovezérlő 256 KB flash programtároló memóriát, 32 KB RAM-ot és 2 KB EEPROM-ot tartalmaz. Van benne két 12-bites analóg-digitális átalakító, egy USB 2.0 port, hibernációs modul, és sokféle soros kommunikációs lehetőséggel rendelkezik (pl. UART, CAN, SPI, I2C). Az Energia szoftverkönyvtáraiban a lábak szerepét az alábbi diagram segítségével mutatjuk be, melyet a https://github.com/energia/Energia/wiki/Hardware címről vettünk át (az ábrát Rei Vilo készítette). 8_2 ábra: A Stellaris LM4F120 LaunchPad kártya lábkiosztása Amint a fenti ábra is mutatja, összesen 35 általános célú ki/bemenet áll rendelkezésre, melyek közül 12 db lehet analóg bemenet. Az általános célú I/O kivezetések szokásos elnevezése mellett a RED_LED, BLUE_LED, GREEN_LED (az RGB LED-et vezérlő PF_1, PF_2, PF_3 kivezetések alternatív elnevezései), valamint a PUSH1, PUSH2 (felhasználói nyomógombok) neveket is használhatjuk. Mintapélda: Az RGB LED villogtatásaAz alábbi programban egyenként felkapcsoljuk a kártyán található RGB LED piros, zöld és kék alapszínét, ebben a sorrendben. Mindegyik szín egy-egy másodpercig világít, utána lekapcsoljuk. Végül egy másodpercre kikapcsolva hagyjuk az összes alapszínt. Hardver követelmények: Stellaris Launchpad kártya. A program listája az alábbi ábrán látható.
8_3. ábra: Az RGB_ledblink program listája
Mintapélda: RGB LED vezérlése folyamatos színátmenettelAz alábbi program az "Arduino Forum"-ról letölthető Code for RGB LED példaprogram némileg átdolgozott változata. A program véletlen számokat generál az RGB színkomponenesek előállítására, s az előző színből az új színbe való átmenet fokozatosan, 255 lépésben történik. Az előállított RGB színkomponenseket a kártyán elhelyezett RGB LED vezérlésére használjuk fel, a digitalWrite() függvény segítségével (lásd a PWM vezérlésnél, a 4. oldalon). Hardver követelmények: Stellaris Launchpad kártya.
Az eredeti programhoz képest lecsökkentettük, illetve kivettük a késleltetéseket, s azzal, hogy nem fogadunk el olyan színkombinációt, ahol az R+B+G összege nem éri el a 300-at, megakadályozzuk, hogy az RGB LED túlságosan elsötétedjen.
Nokia 5110 grafikus kijelző vezérléseA 6. oldalon bemutatott, Nokia 5110 grafikus kijelzőt működtető programot a Stellaris Launchpad kártyán is futtathatjuk, hiszen Rei Vilo LCD_5110_SPI példaprogramja úgy van megírva, hogy az MSP430 Launchpad kártyán kívül a Stellaris Launchpad kártyával is működjön. A program ezért meg van tűzdelve feltételes fordítási direktívákkal. Most csak azok a programsorok fordulnak be a programunkba, amelyek vagy nincsenek feltételhez kötve, vagy pedig az __LM4F120H5QR__ szimbólum definiáltságához vannak kötve. A bekötés megegyezik a 6_6. ábrán bemutatottal. Az alábbi táblázatban a Sparkfun által forgalmazott kijelző modul lábkiosztását követtük, amelyen a lábak sorrendje balról jobbra így néz ki:
Figyeljünk a bekötésre, mert más gyártók más bekötési sorrendet alakítanak ki (az alábbi fényképen is más a lábak sorrendje és emiatt a vezetékek színe)! Eltérés lehet abban is, hogy a háttérvilágítás bekapcsolása VCC vagy GND szintű jellel történik. A program működéséhez be kell csatolnunk az SPI.h és az LCD_5110_SPI.h fejléc állományokat. Előbbi a "gyári" könyvtárak között található, utóbbit nekünk kell a felhasználói könyvtárunkban az Energia/libraries könyvtárban elhelyezni. Ha az MSP430 Launchpad kártyán már futtattuk ezt a programot, akkor az LCD_5110_SPI könyvtár már a "helyén van", nem kell foglalkoznunk vele... A setup() függvényben előbb az SPI soros kommunikációs egységet kell beállítani, ezt követően pedig az LCD modult inicializáljuk. Az SPI modul órajelének sebességét úgy kell beállítani, hogy az 5 MHz-et ne haladja meg, mert ennyit bír a Nokia 5110 modul PCD8544 típusú vezérlője. A Stellaris Launchpad kártya esetében az SPI modul inicializálásánál meg kell mondanunk, hogy melyik SPI egységet használjuk, mert több is van belőle. Mi a 2. sorszámú modult használjuk, s ezt az SPI.setModule(2) függvényhívással mondhatjuk meg. Ez egyúttal meghívja az SPI.begin() metódust is, tehát azt nem kell külön kiadnunk. Ezt a részt Rei Vilo eredeti programján módosítanunk kellett, mert az abban szereplő SPI inicializálás nem volt kompatibilis az Energia "gyári" SPI könyvtárával. A háttérvilágítást kezdetben bekapcsoljuk, a futás során pedig a Launchpad kártya felhasználói nyomógombjával ki-be kapcsolgathatjuk. Ha valaki hozzám hasonlóan olyan 5110 modult szerez be, amelyiken a háttérvilágítás alacsony jelszinttel történik (a LED-ek katódja van kivezetve), akkor ne lepődjön meg, ha a program fordítva működik: a háttérvilágítás kezdetben ki lesz kapcsolva. A képernyő bal felső sarkában kiírjuk a "Hello!" üzenetet. Egy másodperc elteltével töröljük a képernyőt, majd a bal alső sarokba kiírjuk a "Light off" üzenetet. (A mobiltelefonokhoz hasonlóan mindig a gombbal indítható műveletet írjuk ki, azaz a következő gombnyomás lekapcsolja a háttérvilágítást.) A végtelen ciklusban figyeljük a nyomógombot (lenyomás esetén átváltjuk a háttérvilágítás állapotát), majd nagyobb méretű betűkel felváltva az MSP430, illetve az LM4F feliratokat írjuk ki. Ezt követően kisebb karaktermérettel egy csillagot (vagy szorzásjelet) szánkáztatunk a képernyőn balról jobbra (az animáció miatt a mozgó csillag a pillanatfelvételen többnyire kettőnek látszik...). 8_4. ábra: Az LCD_5110_SPI program futtatása Stellaris Launchpad kártyán
Színes TFT kijelző vezérléseSzámos helyen beszerezhető olyan színes LCD modul, amelyben a JD-T1800 kijelzőt használják, amely szinkron soros (SPI) módon kommunikál (többnyire a népszerű Arduino platformhoz ajánlják). A kijelző modul hátuljára többnyire egy SD kártya foglalatot is felszerelnek (az SD kártya szintén az SPI buszra csatlakozik, de külön kiválasztó vonal tartozik hozzá). Az E-bay kínálatában található olyan kivitel (lásd az alábbi képen!), amelyen az illesztő minden vonalán egy-egy szintillesztő tranzisztor is helyet kapott, így 5 V-os és 3,3 V-os áramkörökhöz egyaránt csatlakoztatható. Ha a későbbiekben 5 V-os rendszerekben is használni szeretnénk, ennek beszerzését javasoljuk. 8_5. ábra: Soros vezérlésű, 1.8" TFT színes kijelző modul A kijelző vezérlője egy ST7735 chip, adatlapja innen letölthető. A kijelző felbontása 128x160 képpont, a színmélység elvileg 18 bites, mi ebből csak 16 bitet használunk majd (RGB 5/6/5). Az Adafruit honlapján is árulnak a fentihez többé-kevésbé hasonló, és vele teljesen kompatibilis kijelző mudulokat, amelyekhez részletes termékleírás és tutorial is található, ezért ezekre a részletekre itt nem térünk ki. Az Adafruit honlapjáról elérhető programkönyvtárak és demóprogramok az Arduino kártyához készültek, amelyeket közvetlenül nem tudunk felhasználni. A kijelzőt kezelő Adafruit_ST7735 és a grafikus eljárásokat tartalmazó Adafruit_GFX könyvtárakat azonban Stephen Crane már adaptálta a Stellaris Launchpad kártyához. A kijelző modult az alábbi táblázat szerint kössük össze a Stellaris Launchpad kártyával. A fehér vezetéket (SD_CS kiválasztójel) nem kell bekötni, mivel ebben a példában az SD kártyát nem használjuk.
A jelszinttől függetlenül a kijelző VCC lábára +5 V-ot kell adni (saját feszültség-stabilizátorral állítja elő a 3,3 V-ot). A Stellaris Launchpad kártyán a +5 V-ot a +VBUS feliratú lábak valamelyikéről vehetjük le. Mintaprogram: graphicstest_highspeedAz Adafruit_ST7735 programkönyvtár mintapéldái közül egyelőre csak a graphicstest_highspeed demóprogram használható a Stellaris Launchpad kártyán. Ez a program a színes kijelző és az Adafruit_GFX könyvtár lehetőségeit mutatja be. A "highspeed" elnevezés itt arra utal, hogy az SPI kommunikációt hardveres támogatással végezzük (alternatív lehetőség a szoftveres SPI kezelés, amely flexibilisebb lábkiosztást engedélyez, de lassabb és CPU időigényesebb a kezelés). A program elején felhívják arra is a figyelmet, hogy a JD-T1800 (vagy vele kompatibilis) kijelzőkből több változat is piacra került, amelyek vezérlésben apróbb különbségek vannak. Ezek a változatok a védőfólia fülének színe alapján is azonosíthatók, vagy próbálgatásos alapon kell megtalálni a megfelelő beállítást. Ha nem jók a kijelzett színek (piros - kék színcsere tapasztalható), vagy a kép szélén zavaró képpontok látszanak, akkor az INITR_BLACKTAB helyett az INITR_REDTAB, vagy az INITR_GREENTAB paramétert kell választani. A 8.5 ábrán látható kijelzőnél például a védőfólia füle zöld színű, ennél a gyártmánysorozatnál a INITR_GREENTAB paramétert kell megadni az inicializáló metódusnak. Nekem egy fekete címkéset sikerült kifogni, ehhez az INITR_BLACKTAB-ot kellet választani, különben a képernyőn piros helyett kék, kék helyett piros látszott. Hardver követelmények:
A graphicstest_highspeed program listája: (forrás: Adafruit_ST7735 on GitHUB)
A program inicializálás után a szövegkiírási lehetőségeket mutatja be. Mivel az Adafruit_ST7735 és az Adafruit_GFX objektumosztályok a Print osztály leszármazottjai, így a képernyő inicializálása és a tintaszín megadása után a print metódussal írathatunk ki szöveget, számokat, lebegőpontos számot és hexadecimális számot. Nagyított karakterek kiírására is van lehetőség, de vegyük figyelembe, hogy a szöveg nagyítása csak a pixelek felnagyításával történik, ami durva karakterképet eredményez. A program ízelítőt ad a vonalak, síkidomok, kitöltött és kitöltetlen alakzatok rajzolásából is. Végül egy lejátszó és leállító gomb rajzolata jeleni meg, majd a program végtelen ciklusban invertálja a színeket. A futás végeredménye az alábbi képen látható. 8_6. ábra: A graphicstest_highspeed program futásának eredménye Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |