PIC

Allikas: Vikipeedia
16-bitine PIC24 mikrokontroller joonlaua kõrval

PIC on RISC tüüpi käsustikuga mikrokontroller, mida arendab firma Microchip Technology. Tänapäeval mõistetakse lühendi all tavaliselt inglise keelset fraasi "Peripheral Interface Controller", kuid algselt tähendas see "Programmable Interface Controller" ning vahepeal ka "Programmable Intelligent Computer". Esimene PIC mudel oli tegelikult PIC1650[1], mille töötas välja firma General Instruments. Osakond, mis selle välja arendas, eraldus aga hiljem ning sai iseseisvaks firmaks nimega Microchip Technology.

PIC on tänapäeval laialt kasutuses nii tööstustoodetes kui ka hobi korras mikrokontrolleritega tegelevate inimeste poolt. Põhjuseks on madal hind, suur kasutaja arv ning palju arendustööriistu, millega lihtsalt PIC arhitektuurile tarkvara saab luua.

Ülesehitus[muuda | redigeeri lähteteksti]

PIC on Harvardi arhitektuuriga mikrokontroller, mis tähendab, et kood ja andmed on eraldatud erinevatesse mäludesse. Ainsaks erandiks on 32-bitised PIC mikrokontrollerid, kus kood ja andmed on samas mälus ning mis kasutavad Von Neumanni arhitektuuri. Kuna PIC on RISC tüüpi käsustikuga, siis üksikud käsud teevad korraga vähe muutusi. Seetõttu on sellel kõikide käskude suurus baitides alati sama ning suurema osa käskude täitmiseks kulub enamasti üks tsükkel, välja arvatud käskude puhul, mis muudavad järgmise tõlgendatava käsu asukohta, näiteks hüppekäskude puhul.

PIC kasutab ühte vaheregistrit W0, mis osaleb väga paljudes erinevates käskudes automaatselt ning mida ei saa asendada käsus teise registriga. Kõik RAM piirkonnad on tegelikult nagu registrid, mida saab kasutada käskudes nii sisendi kui väljundi jaoks. Isegi riistvara kontrollimise registrid on paigutatud andmemälu piirkonda. Varasematel PIC'i versioonidel sai andmepiirkonnast korraga adresseerida ainult väikest osa ehk 256 baiti. Erinevate 256 baidi suuruste mälupiirkondade vahel vahetamiseks pidi muutma spetsiaalset staatuse registrit.

PIC'i pinu, kus hoitakse funktsioonide väljakutsumisahela talletamiseks tagasipöördumisaadresse, on riistvaraline ning asub eraldi andmemälust. Kuna PIC seeriani 18 ei olnud võimalik käskudega riistvaralist pinu otse muuta ega lugeda, kuid alates seeriast 18 on see võimalik.,

Kõik PIC mikrokontollerid käsitlevad ja adresseerivad andmeid 8-bitiste tükkidena. Koodimälus ei pruugi aga sama olukord olla, kuna erinevatel seeriatel on ühe käsu suurus bittides erinev, näiteks leidub 12-bitiste ja 14-bitiste käskudega mudeleid. PIC18 seerias on ühe käsu suurus 16 bitti.

PIC'idel on riistvaraline pinu, milles hoitakse tagasipöördumisaadresse. Riistvaraline pinu ei ole varasematel PIC seadmetel tarkvaraliselt kättesaadav, kui 18 seeria seadmetel on selle jaoks võimalused olemas. Riistavaraline tugi parameetrite talletamiseks pinus puudus varasemates seeriates, kuid seerias 18 on seda parandatud, mistõttu 18 seeria sobib paremini kõrge astme kompilaatorite jaoks kui varasemad seeriad.

Andmemälu[muuda | redigeeri lähteteksti]

Andmemälu ja registrite mälu on PIC'i puhul sünonüümid. Isegi spetsiaalse eesmärgiga registrid on paigutatud andmepiirkonda. Mälu adresseerimise viis oleneb PIC'i seeriast. Varasematel oli mälu jagatud 256 baidi suurusteks piirkondadeks, mille vahel vahetamiseks pidi muutma ühe registri väärtust. Ainuke register, mis ei asu tavaliselt põhimälus, on vaheregister W, mille abil on seega võimalik liigutada andmeid ühest adresseerimispiirkonnast teise. Hilisemates seeriates lisati käsud, millega sai liigutada andmeid otse ühest piirkonnast teise.

Isegi erinevate mälupiirkondade kasutamisel oli mälu hulk väga piiratud. PIC16 seeria puhul oli staatuse registris piirkonna määramiseks vaid 2 bitti, mis tähendab, et see toetas ainult kuni nelja erinevat piirkonda, mis tähendas, et maksimaalselt sai kasutada ainult 1 kilobaiti mälu.

Alates seeriast 18 olid olemas spetsiaalsed registrid FSR ja INDF. FSR sisaldas tegelikku asukohta, mida INDF registri lugemisel ja kirjutamisel tegelikult kasutati. Hiljem lisati juurde veel võimalus FSR poolt viidatud asukohta ühe registri võrra suurendada või vähendada, mis lihtsustas oluliselt järjestikku asetsevate andmetega töötamist.

Väline mälu, mis ei asu mikrokontrolleri sees, ei ole tavaliselt otse käskudega otse adresseeritav, välja arvatud mõnede seeria 18 mudelitel.

Koodimälu[muuda | redigeeri lähteteksti]

Koodimälu on tavaliselt realiseeritud kui ROM, EPROM, EEPROM või flash ROM mäluna. ROM mälu puhul ei olnud koodimälu vajadusel võimalik üle kirjutada ning ei sobinud seega arenduskomplektide jaoks. EPROM küll parandas olukorda, kuid mälu ülekirjutamine oli siiski tülikas, kuna selleks pidi eelnevalt rakendama UV kiirgust. Alles EEPROM võimaldas elektriliselt andmeid kustutada. Tänapäeval on väga palju kasutusel aga just flash ROM.

8-bitistel PIC mikrokontrolleritel on koodimälu õimalik otse adresseerida ainult PIC17 ja mõnedel PIC18 mudelitel. Hilisematel on see juba võimalik ning 32-bitistel asub koodimälu juba andmemäluga koos.

Käsustik[muuda | redigeeri lähteteksti]

PIC'ide käsustiku suurus varieerub 35-st käsust kuni 80 käsuni sõltuvalt kindlast PIC mudelist. Käsustik sisaldab käskusid registrite peal operatsioonide tegemiseks, vaheregistrite (ingl. k. accumulator) kasutamiseks ning programmi võrdluste ja nende tulemuste põhjal koodis hüpete tegemiseks.

Mõndasid käske, näiteks bittide muutmist ja testimist, saab teha suvalise adresseeritava registri peal, kuid mitme parameetriga käsud kasutavad alati vaheregistrit W, kus W on alati kas sisendiks, väljundiks või mõlemaks. W (mõnel seerial on mitu W registrit) on ainus register, mis ei asu seadme põhimälus. W registrisse peab näiteks sisestama kõik konstandid, enne kui neid saab teistesse registritesse ümber tõsta.

PIC'i käsustik jaguneb umbes järnevalt [2]:

  • Andmete ülekande käsud, mille abil saab liigutada andmeid ühest registrist teise või siis registrist vaheregistrisse W või vastupidi.
  • Aritmeetilised ja loogika käsud, mille abil saab teha matemaatilisi tehteid ja loogilisi võrdlusi.
  • Tehted kindlate bittidega, mille abil saab teatud biti väärtust muuta (BCF ja BSF).
  • Hüppefunktsioonid, mis võivad kasutada pinu või mitte ning sõltuda eelnevate käskude tulemustest.

Jõudlus[muuda | redigeeri lähteteksti]

Arhitektuuri ülesehitus on suunatud jõudluse ja hinna suhte maksimeerisele. PIC arhitektuur on senimaani üks lihtsamaid ning odavamaid. Harvardi arhitektuur, mida PIC kasutab ning milles kood ja andmed asuvad eraldi mäludes, lihtsustab oluliselt mikroskeemi ülesehitust ning seetõttu võimaldab väga madala hinna ja elektritarbe juures suhteliselt kõrget taktsagedust.

Aeg katkestuste tekkimise ning nende täideviimise alustamise vahel on täpselt kolm tsüklit. Välised katkestused peavad olema sünkroniseeritud protsessori neljataktilise käskude tsükliga, kuid sisemised on automaatselt sünkroniseeritud. Katkestuse alustuseks olev konstantne aeg võimaldab katkestuste abil loodud taimeritel olla alati ühtlase intervalliga. See küll ei kehti kõige uuemate PIC seeriate puhul, kus katkestuste pikkus võib varieeruda.

Ajalugu[muuda | redigeeri lähteteksti]

Mitmed varasemad EPROM PIC mikrokontrollerid

Algne PIC mikrokontroller ehitati 1975. aastal General Instruments'i poolt. Esimene PIC ei olnud mõeldud iseseisvaks protsessoriks, vaid seda kasutati selleks, et mõned sisend-väljund operatsioonid nende 16-bitisest põhiprotsessorist CP1600 ümber tõsta, kuna CP1600 oli just nendes operatsioonides väga aeglane [3]. Algselt oli lühendi PIC tähendus "Programmable Interface Controller", kuid üsna varsti muudeti see ümber ning uueks tähenduseks sai "Programmable Intelligent Computer".

1989. aastal müüs General Instruments oma mikrokontrolleritega tegeleva osakonna maha ning see hakkas tegutsema nime Microchip Technology all. PIC oli üks vähestest projektidest, mida selleks hetkeks polnud pooleli jäetud. Microchip langetas oluliselt PIC mikrokontrollerite müügihinda lootuses, et need võetakse laialt kasutusse ning see korvab hinnavahe. See taktika töötas ning Microchip hakkas üsna pea arendama välja mitmeid erinevaid PIC variante.

1992. aastaks oli müügil juba kuus erinevat PIC varianti. Neli neist olid 12-bitiste käskudega, seeriast PIC16C5x. Müügil oli ka üks 14-bitiste käskudega mikrokontroller PIC16C71. See oli esimene mudel, mis sisaldas endas analoog-digitaalmuundurit ning võimalust kasutada katkestusi. Veel oli neil müügil üks 16-bitiste käskudega PIC17 seeria mudel PIC17C42, kuid kuna PIC17 seeria erines oluliselt varasematest, siis väga paljud ei läinudki PIC16 pealt üle PIC17 peale.

Põhiliselt müüdi küll ühekordselt kirjutatavaid PIC mudeleid, kuid müügiedu kasvatas väga oluliselt just see, et Microchip tõi müügile EEPROM mäluga versiooni PIC16C84. Elektriliselt kustutatav mälu tegi arendajate tööd palju lihtsamaks ning PIC kogus veelgi populaarsust, sest nüüd oli võimalik mikrokontrollerit lahti ühendamata koodimälu üle kirjutada.

Kuna tekkis vajadus 16-bitiste käskudega seeria järele ning PIC17 ei olnud eriti edukas, arendas Microchip välja uue seeria PIC18, mida nad tutvustasid aastal 2001. PIC18 seeria oli üles ehitatud nii, et PIC16 pealt üleminek oleks võimalikult lihtne ning see seeria osutus selle võrra edukamaks.

Varsti hakkas Microchip välja arendama ka reaalselt 16-bitiseid mikrokontrollereid. Sellised seeriad olid PIC24 ja dsPIC, kus tegelikult käskude pikkus oli 24 bitti. Kuigi erinevus eelmistest seeriatest oli väga suur, kuna mindi üle 8-bitistelt mikrokontrolleritelt üle 16-bitistele, üritas Microchip uued seeriad väga sarnase välise ehitusega.

2007. aastal tuli Microchip välja ka 32-bitiste PIC mikrokontrolleritega, mis suurendasid oluliselt taktsagedust, maksimaalset mälu suurust ning mille peal oli võimalik jooksutada koodi RAM mälust.

Arendustarkvara[muuda | redigeeri lähteteksti]

Microchip Technology pakub vabavaralist tarkvarakomplekti MPLAB, mis sisaldab hulga erinevaid tööriistu PIC'i peale tarkvara arendamiseks. Komplekt sisaldab assemblerit, linkerit, emulaatorit ja silurit. C kompilaator, mida Microchip PIC seadmetele pakub ning mis sobib kasutamiseks MPLAB komplektiga, on aga tasuline, kuigi on olemas katseversioon, mis töötab 60 päeva samamoodi kui tasuline, seejärel aga keeratakse kinni mõned koodi optimeerimised. Microchip pakub MPLAB kaubamärgi all kompilaatoreid seeriatele PIC18, PIC24, PIC32 ja dsPIC.

C kompilaatoreid PIC'i jaoks pakkus ka firma Hi-Tech Software, mis aga osteti Microchip Technology poolt 2009. aastal. Nüüdsest on Microchip kodulehel müügiks ka Hi-Tech poolt loodud kompilaatorid, mis katavad ära seeriad PIC10, PIC12, PIC16 ja PIC18.

Hetkel ainus täielikult vabavaraline C kompilaator PIC mikrokontrollerite jaoks on SDCC, mis toetab mitut erinevat PIC seeriat. SDCC kasutab GPL litsentsi, seega on avatud lähtekoodiga.

Programmaatorid[muuda | redigeeri lähteteksti]

Programmaatoreid kasutatakse selleks, et üle kirjutada mikrokontrolleri koodimälu. Suuremal osal hetkel müüdavatest PIC mikrokontrolleritest saab programmaatorit kasutada ka siis, kui see on elektroskeemi ühendatud. See aga ei olnud võimalik EPROM koodimälu kasutavatel PIC variantidel, seega pidi nendel mikrokontrolleri ümberprogrammeerimiseks elektroskeemist lahti ühendama. Lisaks koodimälu ülekirjutamisele kontrollivad programmaatorid tavaliselt ka seda, et koodimälust välja loetavad andmed vastaksid kirjutatud andmetele.

Programmaatoreid ning silumiseks mõeldud riistvara müüb Microchip ise, kuid ka kolmandad osapooled toodavad sarnaseid seadmeid. Lihtsamad programmaatorid, mille puhul koodimälu ülekirjutamiseks vajalik signaal tuleb otse arvutist, ühenduvad arvutiga tavaliselt jadavärati või paralleelvärati kaudu. Keerulisemad programmaatorid, mis saavad arvutilt ainult kirjutatavad andmed, kuid täpsemalt tegelevad koodimälu kirjutamisega ise, kasutavad mõnikord ka USB liidest.

Mõned flash ROM'i kasutavad PIC versioonid ei vaja ümberprogrammeerimiseks üldse eraldi riistvaralist programmaatorit. Seda meetodit kasutatakse tavaliselt arenduskomplektides ning see saavutatakse lisades koodimällu alglaadija, mis on võimeline uut tarkvara koodimällu laadima ilma, et see iseennast ümber kirjutaks. See meetod on ka kõige kiirem viis koodimälus muudatuste tegemiseks ning võimaldab kirjutatud koodi kohe käivitada.

Silumine[muuda | redigeeri lähteteksti]

PIC'ile kirjutatud koodi silumiseks on peamiselt kaks erinevat võimalust. Kuna PIC on palju madalama jõudlusega, kui tänapäeva PC arvutid, siis on olemas sellele emulaatoreid, mis võivad töötada palju kordi kiiremini kui tegelik mikrokontroller ise. Silumise toega emulaatoreid on PIC mikrokontrolleritele erinevaid ning leidub nii vabavaralisi kui ka tasulisi emulaatoreid.

Paljud PIC'i versioonid võimaldavad ka silumist läbi viia reaalse riistvara peal, kasutades selleks spetsiaalset seadet, mille saab ühendada mikrokontrolleriga ning mis suhtleb protsessoriga spetsiaalse liidese kaudu, mis uuematele PIC'idele sisse on ehitatud. Riistvara peal silumisel aga on piiratud võimalused. Siluja kasutamisel ei ole võimalik muudel otstarvetel kasutada mitmeid sisendiks ja väljundiks mõeldud radasid ning mõndasid mikrokiibi võimalusi ei pruugi üldse silujaga koos kasutada saada.

Eelised ja puudused[muuda | redigeeri lähteteksti]

PIC arhitektuuri on tihti väga mugav kasutusele võtta selle lihtsuse tõttu. Seesama omadus aga tekitab piiranguid, mis mõneks otstarbeks PIC'i kasutamise ka keerulisemaks teevad. Peamised PIC'i eelised on järgmised:

  • Käsustik on suhteliselt väike ja koosneb lihtsatest käskudest (RISC arhitektuur).
  • Sisemise ostsillaatori sagedust on võimalik muuta.
  • On olemas lihtsasti kasutatavad tööriistad PIC'i tarkvara arenduseks ning silumiseks.
  • PIC'i mikrokontrollerid ise on suhteliselt odavad.
  • On loodud palju erinevaid liideseid, mille kaudu saab mikrokontolleriga suhelda.

Kõige olulisemad piirangud PIC'i puhul on järgmised:

  • Paljudel seeriatel on ainult üks vaheregister.
  • Erinevate mälupiirkondade kasutamiseks tuleb nende vahel vahetada spetsiaalse registri väärtuse muutmise kaudu.
  • Paljud käsud töötavad ainult kindlat tüüpi sisendi ja väljundiga. Mõned töötavad ainult konstantitega, mõned registritega ja mõned vaheregistriga aga üldiselt mitte kõigi nendega.

PIC18 seeria on mõningate varasematel seeriatel leiduvate piirangutega seoses teinud muutusi. Näiteks on riistvaraline pinu adresseeritav. Samuti on PIC18 seeria mikrokontrolleritel lihtsam luua ka tarkvaraline pinu, mis annab arendajale veelgi suurema kontrolli seadme üle. Seega on selle seeria peal juba teoreetiliselt võimalik vahetada mitme tegumi vahel.

Viited[muuda | redigeeri lähteteksti]