loader
Foto

Az MPLABX használatának alapjai, a portkezelés

Korábbi cikkünkben telepítettük az MPLABX-et, illetve a XC32-es fordítót. Megnézzük most, hogyan lehet egy projektet létrehozni, és áttekintjük a portkezelés alapjait is.

Korábbi cikkünkben telepítettük az MPLABX keretkörnyezetet, illetve az XC32-es fordítót. Itt az ideje, hogy elkészítsük az első projektünket, amely a portkezelést mutatja be.

Indítsuk el az MPLABX-et és hozzunk létre egy projektet (1. ábra).

kep
1. ábra   Új projekt létrehozása az MPLABX alatt
 

Ha az "New Project" menüpontra kattintunk, akkor a következő ablak (2. ábra) jelenik meg, ahol a leendő projektünk típusát tudjuk kiválasztani. Válasszuk ki a "Standalone Project"-et, majd kattintsunk a "Next" nyomógombra.

kep
2. ábra   "Standalone Project" kiválasztása
 

Ezután tudjuk kiválasztani azt a mikrovezérlőt (illetve a családot), amelyet használni szeretnénk a későbbiekben. Mi a PIC32MX795F512L mikrovezérlőt választottuk ki (3. ábra).

kep
3. ábra   PIC32MX795F512L mikrovezérlő kiválasztása a projektünkhöz
 

Ezt követően választhatjuk ki azt a programozót (4. ábra), amelyet majd használni kívánunk. A programunkat "C" nyelven fogjuk írni, amelyet majd *.hex formátumra fogunk lefordítani. Ezt a hex file-t azután egy programozóval (pl.: ICD4) letöltjük a mikrovezérlőnkbe.

kep
4. ábra   Programozó kiválasztása (nem kötelező)
 

Most tudjuk kiválasztani azt a "C" fordítót, amelyet majd használni akarunk a későbbiekben. Korábban csak az XC32-est telepítettük, ezért csak azt tudjuk most kiválasztani. Jelöljük ki a fordítót, majd kattintsunk ismét a "Next" nyomógombra.

kep
5. ábra   Az "XC32"-es fordító kiválasztása a projektünkhöz
 

A következő ablakban tudjuk megadni a létrehozandó projektünk tulajdonságait. Meg kell adnunk a projekt nevét, illetve az elérési útvonalát is. Az MPLABX keretkörnyezetben egyszerre több projektet is tudunk kezelni, ezért fontos megadni azt, hogy melyikkel szeretnénk majd különböző műveleteket (pl.: fordítás, szimuláció, stb) végezni. A projekt létrehozásakor automatikusan kijelölésre kerül a "Set as main project" (6. ábra).

kep
6. ábra   A projekt neve, elérési útvonala
 

A projektünk elkészült. Különböző üres könyvtárak vannak a projektünkben, ilyen például a "Header Files", illetve a "Source Files". Az egér jobb gombjával kattintsunk a "Source Files" könyvtárra, majd ehhez adjunk hozzá egy új file-t (7. ábra).

kep
7. ábra   Új forrásfile hozzáadása a projekthez
 

A projektünkhöz hozzáadott "C" file megtalálható a "Source Files" könyvtárban (8. ábra)

kep
8. ábra   "C" file a "Source Files" könyvtárban

 

A hozzáadott "C" típusú ffile nem üres, a tartalmát töröljük ki, és másoljuk be a következő kódot.

#include <p32xxxx.h>

int gDarab;

void Keses(unsigned int hatar)
{
    int k;
    for(k = 0; k < hatar; k++);
    gDarab++;
}

main()
{
    TRISB = 0x0000;
    TRISD = 0x0000;
    
    while(1)
    {
        LATD = 0x0000;
        Keses(10000);
        LATD = 0x0001;
        Keses(10000);
        LATB = gDarab;
    }
}

 

Aki már foglalkozott PIC mikrovezérlőkkel az MpLab (nem az MPLABX!) keretkörnyezetben, találkozott a "p32xxxx.h" header file-lal, amelyben makrókat, bitmezőt, stb találunk. Ez a header file itt is felhasználható, de alkalmazható helyette az "xc.h" is. Ebben az xc.h-ban nagyon sok feltételes fordítás található, az általunk alkalmazott mikrovezérlőhöz tartozó header file kerül majd felhasználásra.

Noha a PIC32MX család tagjai 32 bitesek, minden regisztere 32 bites, a portregiszterei csak 0-tól 15-ig használhatók, és ráadásul vannak olyan portregiszterek, ahol nem is teljes a 0-15 sor (9. ábra, "A" regiszter).

kep
9. ábra   Az "A port regiszterei
 

Létrehoztunk egy globális változót (gDarab), amelyben a Keses() függvény meghívását számoljuk, és "B" porton fogjuk megjeleníteni majd ennek a változónak az értékét.
A Keses() függvény feladata benne van a nevében, annyi a szerepe, hogy egy for ciklussal elszámolunk 0-tól a 'hatar" nevű paraméterben átadott értékig. Ez a késleltetés ahhoz kell, hogy a "D" porton lévő LED0 villogását lássuk.
A main() függvény elején beállítjuk a "B" és a "D" portokat kimenetként. Ehhez az adott TRISx regiszterbe (TRISB, TRISD) kell 0-kat írni. Ezt megtehetjük decimális értékadással (=0), binárisan (=0B0000000000000000), vagy akár hexadecimálisan (=0x0000). Ezután egy while(1) végtelen ciklus következik, amelynek több feladata van. Egyik feladata az, hogy a LED állandóan villogjon, ne csak egyszer. A másik feladata (szerintünk ez fontosabb....) az, hogy a Program Counter (PC) ne mutasson olyan memóriaterületre, ahol már a memóriában már nem a mi programunk van.

Ha bemásoltuk a "C" kódot a projektünk file-jába, akkor le kell ezt fordítanunk *.hex file-ba, amelyet már le tudunk tölteni a mikrovezérlőbe. Ehhez a "Production/Build Main Project" menüpontra kell kattintani, de ez a parancs megtalálható a toolbar-on is (10. ábra).

kep
10. ábra   Projektünk lefordítása
 

Ha a "Files" tab-ra kattintunk, akkor megtaláljuk a létrejött *.hex file-t. (alapok.X.production.hex, 11. ábra).

kep
11. ábra   A projektnév.hex file elérési útvonala
 

Oldjuk meg az előbbi feladatot egyszerűbben! Hozzunk létre definíciót és makrót, és a Keses() függvényt tegyük a main() után. Ekkor a Keses() függvény szignatúráját el kell (inkább csak javasolt) helyeznünk a main() előtt.

#include <p32xxxx.h>

#define LedD0       LATDbits.LATD0
#define LD0Tg()     { Led0 = ~Led0; }

int gDarab;

void Keses(unsigned int hatar);

main()
{
    TRISB = 0x0000;
    TRISD = 0x0000;

    while(1)
    {
        LD0Tg();
        Keses(10000);
        LATB = gDarab;
    }
}

void Keses(unsigned int hatar)
{
    int k;
    for(k = 0; k < hatar; k++);
    gDarab++;
}

 

Most nézzük meg azt, hogy hogyan lehet beolvasni egy bitet egy portról (pl.: "A" port 1.bit). Ehhez be kell állítani ezt a portbitet bemenetre. Ezt megtehetnénk úgy is, hogy a TRISA regiszter minden bitjét beállítjuk például 1-re, de mi bitmezőt alkalmazunk, mert csak az "A" port 1. bitjét kell logikai 1-be állítani.
A #define segítségével a PORTAbits.RA1 bitet elneveztük "BTN"-re, ezután akár "BTN"-t is használhatjuk a "PORTAbits.RA1" helyett.

#include <p32xxxx.h>

#define LedD0       LATDbits.LATD0
#define LD0_On()    { LedD0 = 1; }
#define LD0_Off()   { LedD0 = 0; }

#define BTN         PORTAbits.RA1

main()
{
    TRISAbits.TRISA1 = 1;
    TRISD = 0x0000;

    while(1)
    {
        if(BTN)
        {
            LD0_On();
        }
        else
            LD0_Off();
    }
}

 

Amikor a BTN logikai 1-ben van, akkor bekapcsoljuk a LED-et, amely a "D" port 0. bitjére van kötve a tesztpanelon.



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

Október közepén elindítjuk az Atmel 8 bites mikrovezérlőkről szóló sorozatunkat. Ehhez használnunk kell természetesen egy fejlesztőkörnyezetet is. Több ilyen is létezik, például a WinAVR, vagy az Atmel Studio. Mi az Atmel Studio-t fogjuk használni, e. . . .

A PIC18F mikrovezérlők ma is népszerű a fejlesztők körében. Noha 8 bites architektúráról beszélünk, számos érdekes és hasznos alkalmazás megvalósítható vele. Elég csak az USB-re, vagy akár az Ethernetre gondolnunk. Ezért a Szerkesztőség egy sorozat k. . . .

A Microchip által javasolt fejlesztőkörnyezet az MPLABX, amely felváltja az MPlab-ot. Használata nehézkesnek tűnhet, ezért megnézzük ennek az IDE környezetnek a használatát, készítünk egy egyszerű projektet, amely egy PIC32 mikrovezérlőre épül.. . . .