PIC alapok


      Az alábbi rövid összefoglaló a PIC mikrovezérlökkel most ismerkedöknek szól. Tartalmazza azokat az alapokat, ami a PIC-el való ismerkedés első lépéseihez elengedhetetlen. Ez az irás Istvánfi Béla és Braun Gábor munkája, kiegészítve a időközben megszünt ChipCAD levelezőlista tagjainak észrevételeivel. (A levlista forum-á alakult.)

Ahhoz, hogy a mikrovezérlőd működjön, az alábbiakra lesz szükséged:


1. Mindenekelött némi olvasnivaló-ra:

      A első három pontban felsorolt doksik mind rajta vannak a Microchip CD-n, vagy elérhetők a Microchip oldaláról a fenti linkekkel is. A CD ingyenes. Magyar nyelven is létezik némi szakirodalom, pl. Tietze - Schenk: Analóg és Digitális áramkörök c. könyve, ebből is a Mikroszámítógépek c. fejezet. Ez nem a PIC-ekről szól, hanem általánosságban tisztáz néhány alapfogalmat. A PIC-ekről is van némi magyar nyelvű irodalom, ezek a Chipcad Kft.-nél beszerezhetőek, pár száz forintért. Illteve a fenti linkek között talalható Hadházi László munkája, amely átsegít az első lépéseken. Ha a fentieket áttanulmányozod, ismerni fogod a PIC mikrovezérlők lelkivilágát. Alább pár mondatban összefoglaljuk a lényeget:

A PIC mikrovezérlő család sokféle elemet tartalmaz, ezeknek rengeteg közös tulajdonsága van. Minden PIC-et hasonló, majdnem azonos nyelven lehet programozni. A különbség abban rejlik, hogy a különféle PIC-ek más-más integrált hardver eszközöket tartalmaznak, mint például beépített A/D konverter, EEPROM adatmemória, stb.
Minden PIC mikrovezerlő beépítve tartalmaz egy RISC CPU-t, programmemóriát (amely lehet PROM, EPROM, EEPROM), RAM adatmemóriát, 1 db 8 bites hardveres számlálót, watch-dog és resetáramkört, valamint oszcillátort. A 16C5x-es család után megjelent kontrollerek tartalmaznak megszakításvezérlőt, az újabbak pedig beépített brown-out reset áramkört is. A fentiekkel bizonyára tisztában vagy, de azért foglaljuk össze a dolgokat:



RISC CPU: Reduced Instruction Set Central Processing Unit, azaz csökkentett utasításkészletű CPU. Valamikor a számítástechnikai őskorban két irányba szakadt szét a CPU-k fejlesztése. Az egyik irány, hogy minél több komplex utasítást, - akár szorzást is - valósítson meg a processzor (ez volt a CISC, Complex Instuction Set CPU), a másik pedig, hogy kevés, egyszerű utasítást tudjon, de azt gyorsan. Ez lett a RISC. RISC esetében a bonyolultabb műveleteket (például szorzás) programból kell megcsinálni. Mivel a programok csupán 2%-ának van szüksége szorzásra, így nem baj, hogy nem kell minden esetben megfizetni a hardverbe integrált szorzót... Így lett a RISC egyszerű felépítésű, ezért olcsó, és gyors.

A PIC fizikai felépítése lényegesen eltér például az INTEL típusú mikroprocesszoroktól pl 80286, vagy a Motorola 68HC05-ös mikrovezérlő családja), mert a PIC-nek külön van a programmemóriája és külön az adatmemóriája. Ezt a konstrukciót Harward architektúrának hívják, szemben a 286-osok és HC05-ösök von Neumann architektúrájával, (Neumann János tiszteletére hívják így) ahol a program és az adatok ugyanannak a memóriának különböző címein találhatóak.

Programmemória: az a memória, amiben a végrehajtandó program van. Ez egy kissé fura dolog a RISC procikon, ugyanis ott 1 utasítás az 1 programhelyet foglal el, szemben pld. a 80x86-os procikkal, ahol 15 byte = 1 utasítás a 'csúcs'. Nos, a furcsaság oka az, hogy a programmemória nem 8, hanem 12, 14, vagy 16 bites szervezésű. Így ez esetben nem program byte-okról, hanem program word-ökről beszélünk. 1 RISC utasítás = 1 'word'. Ha egy PIC-nek van 2048 word memóriája, abba 2048 utasításnyi programot tehetsz. Fizikailag minden nem elektronikusan újraporgramozható memóriával készitett PIC-nek van 'ablaktalan', egyszer programozható (vagy OTP = One Time Programmable) verziója, néhánynak létezik kvarcablakos, EPROMos kivitele. A kettő között csak a tokozás jelent különbséget. A 16C84 volt az elso olyan PIC típus, ami EEPROM memóriával került forgalomba, így olcsó volt (mert nem kell rá kvarcablak), és mégis könnyen újraprogramozható. Manapság már sokféle EEPROM-os PIC van. (Apróság: a 16C84 utáni összes EEPROM-os típusnak Flash EEPROM memóriája van.) A programmemória tipikus mérete 512, 1024, 2048, 4096 vagy 8192 word.

Adatmemória: RAM, melyben a program átmenetileg (amíg be van kapcsolva a PIC) tárolhat adatokat, változókat, stb. A RAM 8 bit szélességű, byte szervezésű. A RAM elso kb. 12-32 byte-ja 'foglalt' (ez típustól függ), utána típustól függoen 40-50 byte memória áll rendelkezésre. Az első foglalt 12-32 byte-ban a PIC perifériáit (idozítő, számláló, A/D konverter) lehet elérni, úgy, mintha a memóriában 'látszanának'. Az adatmemóriát hivják még file regisztereknek is.

Hardveres számláló / idozítő: egy 8 bites számláló, ami a következőket tudja:

Mindkét esetben rendelkezésre áll egy beépített hardveres osztó, ami 2..256-os frekiosztást tud, kiválaszthatóan. Ez praktikus, ha viszonylag nagyobb frekvenciákat kell megmérni. Ha a számláló értékét az órajel növeli, akkor idozítőt kapsz.

Watchdog: 'Őrző-védő kutya', egy kis, független áramkör, ami a PIC-et reseteli, ha esetleg a benne futó program valami programhiba, de sokkal inkább tápzavar, ipari környezet, stb. hatására 'elszáll'. Ez úgy muködik, hogy a watchdog egy kb. 20 ms-os idozítő, ami elindul. Ha 20 ms alatt nem történt CLRWDT utasítás a programban (a program 'lefagyott'), akkor reseteli a processzort. Ha megvolt a CLRWDT, akkor újraindul a 20 ms. A fentebb említett előosztóval a 20ms-os watchdog timeout értékét megnövelheted, max. 128-szorosára.

Reset áramkör: A tápfeszültség megjelenésekor automatikusan reseteli a PIC-et. (Régen, még a Z80, 8051-es időkben erre egy külön RC tagot kellett kívülről odaragasztani...) Néhány típusban van egy PWRT = PoWer staRtup Timer, ami a 'megfelelőnek' vélt reset után 200ms-ig még resetben tartja a PIC-et, a biztonság kedvéért. Nem szériatartozék, csak az újakban van a brown-out reset áramkör. Ez akkor nagyszerű, ha a tápfeszültség fura módon piciket változik. Pl.: tipikusan el szoktam követni azt a hibát, hogy dióda, nagy elkó, stabkocka... Ez esetben a táp megszüntekor a PIC-en a táp lassan fog megszünni, mert az elkó tartja a tápfeszt. A táp lassan lemászik 3V-ig, aztán valaki megint bekapcsolja... és ekkor a normál resetáramkör nem mindig / nem jól resetel. A brown-out reset ezt küszöböli ki. (Ha nincs benne BO reset, akkor külső resetkockával kell(ene) próbálkozni.)

Oszcillátor: A PIC-re kerámia rezonátort, kvarcot, RC oszcillátort, alacsony frekis kvarcot tudsz rátenni, az oszcillátor többi része a tokba van integrálva. Te mondod meg, hogy mid van, és az oszcillátor áramkör a tokon belül úgy rendezi el magát, hogy az adott konfiguráció muködjön. A programod elején tudod meghatározni, hogy miféle oszcillátorod van. Az MPLAB help-ben olvasd el a __CONFIG direktívát. Ide kívánkozik a power management is: egy SLEEP nevű utasítás a PIC-et alvó állapotba helyezi: ekkor az oszcillátor megáll, és az áramfelvétel pár uA-re csökken a tetemes tipikus 4mA-ről. Az alvásból reset, watchdog timeout, vagy valami megszakítás tudja felébreszteni a PIC-et.

Megszakítás vezérlő: A 'megszakítás' azt jelenti, hogy a program normális, szekvenciális futása valamilyen külső hatás miatt átmenetileg felfüggesztodik, és a vezérlést egy külön rutin, a megszakításkezelő kapja meg. Miután a megszakításkezelő végzett, a program a futását - mintha semmi se történt volna - folytatja. A külső hatások tipikusan: jelváltozás valamelyik bemeneten, a hardver számláló / idozítő 255-rol 0-ra váltása (túlcsordulása), vagy pld. az A/D konverter jelzése, hogy készen van a konverzió. A megszakítás vezérlő feladata, hogy:

Kezdetben valószínuleg nem fogsz a megszakításokkal foglalkozni, de hamar elérkezik ennek is az ideje. Ha nem kell az interrupt, gondoskodj arról, hogy az INTCON regiszter 00h-ban legyen. Ezzel minden megszakítást letiltottál.

2. Egy mikrovezérlő, amiben könnyen tudod cserélni a programot

      Ez lehet egy ablakos eszköz is, de ez kicsit macerás, mert UV fénnyel (germicid lámpa ajánlott, és vigyázz, a fénye ne jusson a szemedbe!) kell törölni. Az ablakos eszközöknél kicsit olcsóbb a Flash memóriás PIC, ezt anélkül tudod újraprogramozni, hogy elotte fénnyel kellene törölnöd. Kezdőknek a PIC16F84-et (vagy inkább a PIC16F628-at) ajánljuk, ez egy 18 lábú IC, újraprogramozható és nem túl drága. De a PIC16F87x valamelyik tagja is tökéletes.


3. Program

      A mikrovezérlőt fel kell programozni, tehát kell egy program. Ezt Te fogod megírni. Kezdetnek azt javasoljuk, hogy az egyik I/O port valamelyik kivezetése legyen kimenet, és ennek segítségével villogtass egy LED-et. Aránylag egyszerű feladat, néhány sornyi programmal megoldható, mégis elegendő arra, hogy a programírás alapszabályait megtanuld. Ha valami nem megy, nyugodtan kérj segítséget a ChipCad listán, de arra kérünk, hogy NE azt kérd, hogy valaki írjon neked egy ilyen - olyan programot. HANEM pl.: "itt ez a pár soros program, én írtam, és nem akar muködni. Segítsetek már, mi lehet rossz! " és itt következik a néhány soros kis program, amit elkövettél. Így sokkal könnyebb segíteni (tehát hamarabb kapsz választ), és Te is többre jutsz vele.


4. Fejlesztőkörnyezet

      A program megírásához kell egy fejlesztőkörnyezet. pl.: Az MPLAB. Ez ingyenes, letölthető a Microchip weboldaláról, vagy a Microchip CD-ről. A program 3.1-es vagy annál újabb Windows alatt fut. Van benne szövegszerkesztő, assembler (ez fordítja le a szöveges utasításokat gépi kódra), szimulátor, amivel ellenorizheted, hogy a programod mit csinál. Más fejlesztőkörnyezet is létezik, pl a Parallax féle, és DOS alatt is lehet programot írni PIC-re, csak nem olyan kényelmes. (Olvasd el ezt is.)


5. A programot bele kell tölteni a PIC-be

      Ha megírtad a programot, akkor azt valahogyan bele kell töltened a PIC-be, ezt a folyamatot a zsargonban égetésnek hívjuk. Külön készüléket igényel, ami össze van kötve a PC-ddel, bele tudod tenni a PIC-et és felprogramozod. Többféle ilyen készülék van forgalomban, de magad is építhetsz egyet. A doksikat az Internetrol össze lehet szedni hozzá. (De itt is talalsz.)


6. A PIC-et ki is kell próbálni

      A felprogramozott (beégetett) PIC-et ki is kell próbálni, ehhez egy kis hardvert kell építened. Ha elfogadod a 2. pontbéli LED villogtatást, akkor egy csupalyuk próbapanelre tégy egy 18 lábú IC foglalatot (hogy a PIC-et ki tudd venni programozás céljából), valamelyik I/O portra soros 470 ohm-on keresztül köss egy LED-et. A PIC oszcillátora legolcsóbb esetben egy RC tag, a katalógusból ki tudod olvasni az értékeket, de en inkább egy 4MHz-es kerámia rezonátor használatát javaslom. Kell még neki tápfeszültség: legyen mondjuk 5V, fontos, hogy stabilizált legyen! Ha ez nincs, egy 4,5V-os zseblámpaelem is megteszi. (A stabilizált tápfesz azért kell, mert zajos, brummos feszültségről nem fog jól muködni a mikrovezérlő. A szárazelem nem zajos, tehát megfelel.) A hozzávalókat elektronikai alkatrészboltokban megkapod.
Kell némi kitartás is. Ne add fel az elso kudarc után!


7. Amire figyelni kell

     A PIC eléggé jól sikerült mikrovezérlő, stabilan működik és tartós, de ehhez néhány ökölszabályt be kell tartanod. Például:

8. Ha mégse muködik, az alábbiakat ellenorizd

9. Végül néhány ábra, segédanyag a gyakorlati felhasználáshoz




1. ábra: Ajánlott tápellátás




2. ábra: Alap bekötés 4MHz-es kerémia rezonátorral




3. ábra: Alap bekötés 4MHz-es quartz-val




4. ábra: LED a kimenetre




5. ábra: relé a kimenetre

A relé tekercsével párhuzamosan kötött dióda alapvető fontosságú! Ne hagyd ki! Hasonló módon tudsz kapcsolni bármilyen törpefeszültségü kisteljesítményü fogyasztót. Pl. lámpát. Ne köss rá 230V-ot! Ha induktiv fogyasztót használsz (motor, relé), akkor a dióda mindenképpen fontos!




6. ábra: Optocsatoló a kimenetre




7. ábra: Egyszerü gomb a bemenetre




8. ábra: Az előző gomb bolondbiztos változata, ami minden lehetséges hiba ellen védett




9. ábra: Gomb egyszerübben: kihasználva az RB porton beépitett felhuzóellenállásokat



10. Különleges utasítások

A PIC-ek utasitáskészlete megtalálható az adatlapjukon. De az MPASM assembly forditó további utasitásokat is elfogad, amelyeket helyettesit a harmadik oszlopban található "Egyenértékű művelet" assembly utasításokkal, ezzel konnyitve pl. az elágazások programozásat.










Ird meg kérdésed vagy véleményed: