Oktatások msp430 indítópult

Egy lépéssel megyünk egy teljes körű mérőeszköz létrehozásától. Mindaz, ami a számunkra maradt, hogy a mérési eredményeket elérhetővé tegyük a hibakeresőn kívül. Ennek számos módja van. Az egyik az, hogy a mérési eredményt a háztartási készülékekhez hasonlóan az LCD-hez továbbítja. Ebben a leckében megtudhatjuk, hogyan használhatunk szabványos LCD-modult a LaunchPad segítségével. Itt is megvizsgáljuk az egyedi könyvtár létrehozásának koncepcióját. A lecke végén egy olyan könyvtárat kapunk, amelyet a jövőbeni projektjeinél LCD-képernyőn is használhat, ami csökkenti a kódírásra fordított erőfeszítéseket.

LCD modul (LCM)


Ehhez a leckéhez szüksége van egy olyan LCD kijelzőre, amelyet esetleg nem. Ha nem, azt javaslom, hogy vásárolj egyet. Ezek a kijelzők nagyon gyakoriak és nem drágák. Különböző méretben és típusban kaphatók, itt egy szabványos 16x2-es LCD-modult használunk a HD44780 interfésszel. Vásárolhatók bárhol, például az eBay-en. tetszés szerint tetszés szerint választhat, de győződjön meg róla, hogy a 3.3 V-os feszültségen működik, és nem tervezték újra a soros interfészen (I2C / TWI) történő működésre. Ha egy nagyméretű modult (például 20x4-et) szeretne, amennyit csak kíván, akkor ugyanúgy működnek. Választhat bármilyen színt.

A kijelzőmodul csatlakoztatása


A standard LCD modul 16 tűvel rendelkezik (14 háttérvilágítás nélkül). Az első néhány a hatalomra tervezett (két helyen lehet háttérvilágítással) és a kontraszt beállításaival. Az 1. kimenetet (Vss-nak jelölve) a LaunchPad földjére kell csatlakoztatni. A 2. érintkező (Vdd) csatlakozik a LaunchPad Vcc tápjához. Ha a 15 háttérvilágítás kimenetet (LED +) használja, akkor a Vcc és a 16-os (LED-) csatlakozó is a földeléshez kapcsolódik. (Ez a legegyszerűbb a kenyérlemezre helyezni). A 3. érintkező (V0) a képernyő kontrasztját vezérli. Ha 10 kΩ-os változó ellenállása van, csatlakoztassa ezt a csapot az ellenállás középső érintkezőjéhez, és csatlakoztassa a két végső érintkezőt a talajhoz és a tápellátáshoz, és beállíthatja a kontrasztot. Ha nincs ellenállás, csak földelje ezt a kimenetet, akkor nem fog olyan jónak látszani, mint amennyit csak tud, de működni fog.

11 ellenőrzésről és adatokról van szó. Három vezérlő vonal, ezek a 4 (RS), 5 (R / W) és 6 (E) csapok. Nem szükséges az olvasási / írási (R / W) kimenetet kiadni, és a földhöz történő csatlakoztatásával bekapcsoljuk az olvasási módot a kijelzőn. Nem vállal semmit a kijelzőn (például a kurzor pozícióját, foglalkoztatási helyzet zászló, stb), de ez ad nekünk egy szabad visszavonás MSP430. A kijelző vezérléséhez a Register Select (RS) és Ready (Enable) kimeneteket használjuk. Az utolsó következtetések 7-14 (D0-D7), ez az adatbusz. Ezeket a következtetéseket ugyanúgy tekinthetjük meg, mint az MSP430 P1 portjának nyolc pólusa, - D0 az első bit, D1 a második, stb. Ha használjuk a teljes I / O port a MSP430 az adatbusz, egyszerűen csatlakoztassa a megfelelő port pin azonos számú kimeneti adatbusz és szabadulj meg a nehézségeket, hogy létrehozza a virtuális port egy szabványos helyen csapok a programon belül. De, mivel a G2211-nek nincs elég portja ehhez, csak 4 bites bemeneti módot használunk. Számára a kijelzőmodul D4-D7 kimenetei használatosak. A D0-D3 kimenetek nem kapcsolódnak egymáshoz.

A kapacitásmérő programjában az LCD-modul használatának köszönhetően a munkapontokat ki kell cserélni. A P1.1-et a CA1 helyett TA0.0-ként használjuk. és használja a P1.2 / CA2 paramétert a komparátor nem invertáló bemeneteként. A Pin P1.0 figyeli az RS-t. P1.3 vezérlés Az E. P1.4-P1.7 kimenetek vezérlik a D4-D7-et.

Ne feledje, hogy a P1.3 kimenete a LaunchPad-ban a gombhoz kapcsolva, ez nem akadályozhatja a program működését; Felhúzta ellenállást a tápegység, ez vezet a megnövekedett szivárgási áram, amikor vissza E. Sajnos a Launchpad nem nyújt jumper az S2 gombot, mint a megállapításait P1.0 és P1.6 LED, úgyhogy hagyd úgy, ahogy van . És amíg erről beszélünk, mindenképpen távolítsuk el a két LED-et és a TXD / RXD-t. (Itt érdemes megértenünk, hogy az új LaunchPad-nak nincs felhúzó ellenállása a P1.3-ban)

A kijelzőmodul vezérlése


Miután mindent összekapcsoltunk, a parancsok és szimbólumok küldése a kijelzőre egyszerű feladat. Valójában akár kezekkel is, mikrokontroller nélkül is elvégezhető! A fő elv itt írási utasításokat ad az adatbusz-kapcsokhoz és egy impulzust alkalmaz az E-re. Az utasítás leolvasható az É szélén, ezért szükség van egy impulzusra. Ha az RS nullázódik, az utasítás az LCD modulvezérlő parancsaként értelmezhető, ha az RS be van állítva, majd a kimenet karakterkódjaként.

Például nézzük meg azokat a parancsokat, amelyekre a kijelzőmodult 4 bites módban kell telepíteni. A 8 bites bináris kódban a "Funkcionális kiválasztása" utasítás így néz ki: 0b001nnnxx. (A konfiguráció kiválasztásához használt értékek itt jelennek meg, és x fel nem használt biteket jelöl, függetlenül attól, hogy számítanak, nem befolyásolják semmit). A 4. bit ebben a kézikönyvben meghatározza az interakció módját: 1 - állítja be a 8 bites interfészt, 0 - 4 bites interfészt. Így küldő 0b00100000 utasítások (vagy 0x20), akkor beállíthatja a kijelző modult tud parancsokat és a karakterek a két 4 bites send, egy helyett 8-bit. Ezt a parancsot el kell küldeni először, hogy együttműködhessünk a 6-vezetékes kapcsolatrendszerünkkel. Először is az értéket az adat buszon parancs P1OUT | = 0x20 (miközben csökken az RS (ami azt jelenti, ez a csapat, nem pedig egy szimbólum) és csepegtető E (szükség van a kapcsolási rajzot)), majd parancsot küld impulzust a E.

A kijelző modul nem válaszol azonnal a parancsra, pontos időintervallumai vannak a megfelelő működéshez. Különösen az RS-t kell egy bizonyos időn belül visszaállítani az impulzus elindítása előtt az E-re. Az adatvezetéket bizonyos ideig be kell állítani az impulzus leesési élének előidézése előtt, és az impulzus után elegendő ideig kell tartani állapotukat. Ezután bizonyos időnek el kell telnie, mielőtt új impulzust küldhetnénk E-nek. Szerencsére számunkra az időeltolódás pontossága csak az impulzusok utasításai között fontos. A fennmaradó késleltetések több száz nanoszekundumos sorrendben vannak, és az MSP430 parancs végrehajtásának sebessége elég kicsi ahhoz, hogy ezek a késések természetesen előforduljanak. A következő parancs elküldése előtt a parancs elküldéséhez szükséges idő kb. 150 ms. Késleltetéssel () kapható.

Összefoglalva a fentiek mindegyikét, itt egy sor utasítás az LCD modul 4-bites módba történő telepítéséhez:


Noha az adatbusz telepítése előtt beállíthatja az E-t, kényelmesebb a sorrend módosítása, hogy elkerülje az ideiglenes eltéréseket. Abban az esetben, ha más PIN csatlakozási rendszert használ, különösen akkor, ha több portot használ, ez a kód nem fog működni. Kényelmes a P1.4-P1.7 csatlakozócsapokat használni az LCD modul D4-D7 termináljára, de nem feltétlenül. Ha megváltoztatja a sorrendet, akkor például a P1.4-P1.7 kapcsolódott a D7-D4-hez, akkor írjon 0b0100-at. és nem 0b0010-et a kódban lévő adatbuszba. Legyen óvatos, egy másik pólus konfiguráció használatával, meg kell adnia az adatbusz minden bitjét ennek megfelelően. Az utolsó sor törli az adatbuszt, hogy megkönnyítse a következő parancs helyes bemenését.

Parancsok küldése 4-bites üzemmódban


Most a kijelzőn kész fogadni a parancsokat 4 bites módban. Ez a mód úgy működik, hogy a 4 legmagasabb bit egy részét E lüktetésével elküldi. Ezután elküldi a 4 alsó bit második részét, a második impulzust. Csatlakozási rendszerünkhöz ezt a kódot megtehetjük:


Itt világos, hogy az E pulzálásért felelős összes parancsot összegyűjtöttem, ideértve az idő késleltetéseket is, egy függvényben void pulse (void). Természetesen 8 bites módban is használható. Ha összegyűjtjük a fenti parancskészletet az üres SendByte (char) függvénybe. az alábbi inicializálási parancsokat írhatjuk így:


Miután beírta ezeket a parancsokat, a kijelzõnk készen áll arra, hogy megjelenítsen minden olyan karaktert vagy szöveget, amelyet elküldünk neki. Fontos megérteni, hogy ugyanazokat a parancsokat használják a karakterek küldéséhez, de a P1OUT-ban. A Bit BIT0 (RS) beállítást úgy kell beállítani, hogy a kijelző tudja, hogy ez egy szimbólum, nem pedig parancs. Példamban erre a célra a kiterjesztett SendByte függvényt tettem. amely lehetővé teszi mindkét parancs és szimbólum elküldését. Ezenkívül más parancsokat is használ, mint például a kijelzés törlése és a kurzor mozgatása. Ha van LCD, próbáld ki ezt a programot. Az ott kiválasztott latenciákkal a DCO 2 MHz-nél gyorsabban nem fog működni. Ha kipróbálod a kódot, tartsd ezt szem előtt. Ezután megnézzük, hogyan foglalhatjuk le ezt a kódot a könyvtárban, és hogyan használjuk fel a kapacitásmérőnkben.

(Más parancsok megismerése érdekében javasoljuk, hogy olvasson más cikkeket is az ilyen képernyők használatáról, például itt és itt.)

A program felsorolása (eredeti lcddemoG2211.c):

Új könyvtár hozzáadása


Van egy kódot, amellyel könnyen küldeni a szöveget az LCD kijelzőn, és hogy nem lenne jó, ha egy könyvtár lenne elég volt egyszerűen csatlakozhat a projekthez, és ne vegyenek részt minden alkalommal kopipastingom. C programozási nyelv nagyon egyszerűvé teszi. Tehát nézzük meg, hogyan kell együttműködni a könyvtárban lévő kijelzővel, és hogyan kell beállítani a CCS-t a könyvtár használatához. Ebben a könyvtárban minden olyan kódot hozzáadhat, amelyet ismételten használni fog.

Először válassza ki azt a mappát, amelyen tárolja a könyvtárat. A fordító nem számít, de egyszerűen hozzá kell férnie hozzá, ami változtatásokat és fejlesztéseket eredményezne. Másrészről elég biztonságos helynek kell lennie, hogy véletlenül nem törölheti, nem változtathatja meg, ne mozgassa, stb. Például létrehoztam a "könyvtár" mappát a projektkönyvtárban.

Harmadszor, másolja a fennmaradó funkciókódot egy külön ".c" fájlba, amelynek ugyanaz a neve, mint a fejléc (a mi esetünkben a simple_LCM.c). A fájl elején a #include <имя_файла.h>. ahol a "fájlnév" a fejlécfájl neve. Figyelmeztetés: ez a fájl NEM tartalmaznia kell a main () függvényt!

Negyedszer, az új projektben kattintson jobb gombbal a projekt mappájára, és válassza ki az új → mappát. Kattintson a [Speciális] gombra. és válassza ki a "Link a mappa a fájlrendszerben" linket a könyvtárhoz. Ezután meg kell találnia a könyvtárának katalógust, és hozzá kell adnia.

Most a könyvtár mappájából minden fájl elérhető a programban. Igaz, hogy a fordítónak külön meg kell határoznia a mappa elérési útját, hogy mit keresett volna. (Ez valami, amiért nem szeretem a legtöbbet, ezt minden új projekt esetében meg kell tennie, és nem találtam módot arra, hogy az új CCS-projekt létrehozásakor alapértelmezés szerint beépítsem ezt a mappát).

Tehát ötödik, jobb gombbal kattintson a projekt mappára, és válassza ki a tulajdonság "tulajdonságait". Nyissa meg a "C / C ++ Build" szekciót és a "Szerszámbeállítások" eszközbeállításokat, keresse meg az MSP430 fordítót → Beillesztési lehetőségek lehetőséget. valamint az MSP430 Linker → Fájlkeresési útvonal. Mindkét helyen adja meg a könyvtár könyvtárának elérési útját, különben a kód nem fordul elő.

Miután a simle_LCM könyvtárnak van sablonja a karakterláncok kiadására, mi történik, ha numerikus értéket szeretnénk kinyomtatni, például az időzítő késleltetési idejét (a változó hosszú int időből)? Az egyik módszer, a C standard, az "stdio" könyvtár és a sprintf () függvény használata; tőle. Mindössze annyi karaktert kell létrehoznunk, mint például print_time [10]. és használja a sprintf (print_time, ".", time); amely a számot a string_print_ben írná. majd elküldi a PrintStr () -nak a megjelenítéséhez. Sajnos ez a módszer néhány hátránnyal jár, mikor mikrokontrollereket használ. Először is, annak ellenére, hogy a CCS-fordító nagyon jó kódot optimalizál, minden olyan program, amely a printf függvényt használja. nagyszerű lesz. Programunk meghaladhatja a 2 MB-ot a G2211-ben. Másodszor, az optimalizálás megnehezíti a helyes formázott kimenet megszerzését. Ideális esetben a% 10d formázást kell használnunk. hogy az időzítő értékét pontosan 10 byte értékkel helyezze el a változó print_time értékre. Ezt nem tehetjük a benne szereplő optimalizálással. Megváltoztathatjuk a printf optimalizálási szintjét a projekt tulajdonságaiban, de ez növeli a kód méretét.

Szerencsére vannak módszerek a probléma megoldására. A típus egészének változójától. Az egyedi számjegyeket kihasználva az egész osztószolgáltató és a részleg üzemeltetője maradhat. Tehát x% 10; visszaadja az x-ben tárolt szám utolsó számjegyét. Ezután x / = 10; eltávolítja az utolsó számjegyet a számról, így a többit hagyja. Az ilyen műveletekből hurok futtatásával, amíg x == 0 (nincs több számjegy), kivonhatjuk az összes számjegyet az egyik számról egy időben, és elküldhetjük őket nyomtatásra. A kijelzőmodulban használt ASCII kódtáblázat úgy van elrendezve, hogy bármely szám kódját egyszerűen hozzáadjuk ugyanazon konstanshoz, így 0x30 + 0 lesz "0", 0x30 + 7 lesz "7" stb. .

Ennek a módszernek az a hátránya, hogy a ciklussal jobbra-balra fordított sorrendben kapjuk a számokat. Az LCD modul működési móddal rendelkezik, ha a kurzort jobbra-balra mozgatja egy karakter nyomtatása után, így lehetséges a szöveg ilyen sorrendben történő kiadása. (Valójában ez a legtöbb hagyományos számológép működik). Tekintse meg a programunkat, hogy megtudja, mely parancsok vannak konfigurálva az ilyen típusú kimenetekre.

Tehát képesek voltunk teljes mérőműszert létrehozni az MSP430 segítségével. Egy időzítő és egy komparátor kombinációját használtuk egy kalibrált óra generátorral, hogy megmérjük a késleltetési időt az RC áramkörben. A kijelzőn a mért idő mikrogrammban jelenik meg. Az R és az ellenállás értékének ismeretében kiszámolhatjuk a C kapacitás valós értékét.

Gyakorlat: A program jól működik, de nem lenne jobb, ha LCD-képernyőn látta azonnal a kapacitást az idő helyett? Lebegőpontos műveleteket végezhet az MSP430-on (bár nem hatékonyan), de hogyan kell megjeleníteni a lebegőpontos számot a képernyőn? Ha a sprintf túl nagy a programunk számára, akkor ez a funkció kétségtelenül túl sok memóriát vesz fel. Tudod-e hozni a kapacitást a képernyőre, anélkül, hogy meghaladná a G2211 2KB-os határértékét? Ha nem sikerül, az egyik módszer itt látható: CMeterLCMFull.c. Ebben a programban az egyes mértékegységek automatikus kiválasztása is megvalósul. Kódja 1934 bájt, ami elég ahhoz, hogy beilleszkedjen a G2211-be.

Fordító megjegyzése: Annak érdekében, hogy ne növeljék a szöveg méretét, nem adtam meg a teljes listát, hanem egyszerűen hozzáadtam az archívumot könyvtárfájlokhoz és két példát a használatához.