Nem véletlenül választottuk ezt a PIC18F családtagot, a PIC18F14K50-et. A Microchip 20 lábú DIP tokozással hozza forgalomba, ezáltal könnyebben tudunk házi körülmények között is tesztpanelt készíteni. Szerkesztőségünk elkészített egy alaptesztpanelt, amely egy másik cikkben kerül bemutatásra, de természetesen számos helyről szerezhetünk be profi fejlesztőpaneleket is.
A PIC18F14K50 a szokásos belső perifériákat tartalmazza, megtaláljuk benne az AD átalakítót, a különböző időzítőket/számlálókat (TIMER1,2,3,4), stb. De ezeken kívül a PIC18F-es mikrovezérlő tartalmaz még egy "USB"-t is. Ennek a modulnak a használatával kényelmesen alakíthatunk ki különböző USB-s alkalmazásokat, de ezekről egy külön cikksorozatot fog a WebElektronika közölni.
Nézzük most tehát meg azt, hogy a PIC18-as család tagjait milyen (könnyen elérhető) eszközökkel tudjuk programozni.
Ilyen lehet például a PICKIT2, PICKIT3, IDC2 vagy akár az ICD3, de kapható más programozókészülék is. De vajon van más lehetőségünk is a fejlesztésre, ha nincs programozókészülékünk? Természetesen igen, és ezt a lehetőséget nevezzük "Bootloader"-nek. Ennek a cikknek az a feladata, hogy ezt a módszert bemutassa.
Ha bootloader-t használunk, akkor nem kell igénybe vennünk programozókészüléket. Illetve..... Na igen, egyszer igen, amikor egy programrészletet elhelyezünk a PIC mikrovezérlő programmemóriájába. Nézzük meg az USB-s bootloader használatát.
Noha a cél az, hogy ne használjunk programozókészüléket, felmerül egy gond. Hogyan tud kommunikálni a számítógépünk a felprogramozás során a mikrovezérlővel? Csak úgy, ha a mikrovezérlőnket erre a feladatra "felkészítjük". Erre szolgál egy speciális program, amelyet "bootloader"-nek nevezünk. Ezt a programrészletet (amelyet nem nekünk kell megírni, hanem a Microchip oldaláról tudunk letölteni) kell nekünk egy programozókészülékkel (pl.: PicKit2) betölteni a mikrovezérlő programmemóriájába. Ennek a mérete kb 800 - 1K. Tehát ennyi byte-ot foglalunk le a mikrovezérlőnk programmemóriájából.
Na de mi történik a speciális memóriacímekkel, például a resetvektorral (0H) vagy az IT vektorokkal (8H, 18H)?
Tekintettel arra, hogy a bootloader a programmemória elején foglal helyet, ezért ezek a speciális címek (0H, 8H, 18H) "elfedésre" kerülnek a bootloader miatt. A megoldás az, hogy a botloader méretével "eltoljuk" ezeket a címeket. Ha a bootloader-ünk mérete 1K, akkor az új sepciális címek a következők lesznek : 1000H, 1008, 1018H.
És most nézzük meg a részleteket, vizsgáljuk meg a konkrét fejlesztés menetét.
A bootloader innen tölthető le, amelyet be kell programoznunk a PIC18F14K50-es (vagy bármely 18F család) mikrovezérlőbe.
Ezután nincs más dolgunk, mint a következő programrészletet kell a main() függvényünk elé tenni.
#define PROGRAMMABLE_WITH_USB_HID_BOOTLOADER
#define REMAPPED_RESET_VECTOR_ADDRESS 0x1000
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018
extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
void _reset (void)
{
_asm goto _startup _endasm
}
Ezzel még nem oldottuk meg a feladatunkat, kell még az adott mikrovezérlőnek a speciális linker file-ja (pl.: rm18f14k50.lkr). Az "rm" részlet utal a bootloader-re.
A programozásról szóló cikksorozatunk következő részében egy konkrét példát nézünk meg a bootloader használatáról.
Megismerjük most a PIC18F mikrovezérlők megszakításkezelését, és készítünk két egyszerű példaprogramot is. Ezek az egy- és a kétszintű megszakításkezelést mutatják be, de sablonként is jól használhatók saját fejlesztéseknél is.. . . .
Ebben a cikkben egy kétsoros LCD felprogramozását és a hozzátartozó sajátfüggvényeket, makrókat mutatjuk be. Nem térünk ki viszont az LCD-k felépítésére, vezérlésére.. . . .
Ebben a cikkben egy kétsoros LCD felprogramozását és a hozzátartozó sajátfüggvényeket, makrókat mutatjuk be. Nem térünk ki viszont az LCD-k felépítésére, vezérlésére.. . . .