Avtor: dr. Simon Vavpotič
2018_261_42
16-bitni mikrokontroler, PIC24, je starejši brat PIC32. Zmogljivosti za manjše projekte mu ne manjka. Zanimalo nas je, kje so njegove prednosti in slabosti.
V serijah o programiranju PIC18 in PIC32 ter Harmonija razvoja in programiranja smo v preteklih letih spoznali dve zelo različni mikrokontrolerski arhitekturi. PIC24 je nekje vmes. Arhitektura PIC24 je razširitev PIC18, vendar na način, da ohrani vse bistvene značilnosti Harvardske procesorske arhitekture. Premore do 96 kB RAM in do 256 kB programskega pomnilnika. Nekatere izvedbe imajo še dodaten EEPROM velikosti do 512 bajtov. Mi smo uporabili PIC24FJ64GB002 s 64 kB programskega pomnilnika in 8 kB RAM.
Ta vsebina je samo za naročnike
PIC24 lahko uporabimo za manj zahtevne projekte, kjer obdelujemo srednje količine podatkov, vendar vseeno potrebujemo natančnejšo obdelavo podatkov. Vgrajene periferne enote so podobne tistim v PIC32, vendar so njihovi registri dostopni na drugih lokacijah v podatkovnem pomnilniku. Hkrati imajo nekoliko manj možnosti nastavitev. Nekoliko razširjeno arhitekturo PIC24 uporabljajo tudi Microchipovi digitalni signalni procesorji iz družin dsPIC30 in dsPIC33.
Oscilatorski del
Mikrokontroler potrebuje za svoje delovanje takt, ki ga dobi s pomočjo notranjega, zunanjega ali delno zunanjega oscilatorja. Slednji je sestavljen iz zunanjega resonatorja in notranjega negatorja s histerezno zanko.
Mikrokontrolerji PIC24 podpirajo dokaj širok obseg različnih zunanjih oscilatorjev in resonatorjev. Na spletni strani https://sites.google.com/site/pcusbprojectsdownloads je objavljena datoteka PIC24FJ64GB002 firmware v1.0.zip, v kateri so datoteke HEX za različne oscilatorje in resonatorje, ki jih lahko uporabimo pri mikrokontrolerju.
Podrobnosti nastavitev za mikrokontrolerjev PIC24 so sicer opisane v Microchipovih podatkovnih polah, ki so izdelane posebej za vsako od poddružin mikrokontrolerjev (npr. PIC24F). Osnovna vezja za PIC24, ki so objavljena na spletni strani PC USB Projects, imajo sicer že vgrajen resonator ali oscilator, ki je prilagojen prednastavitvam v vgrajeni programski opremi. Zato nam za osnovno uporabo ni potrebno ničesar spreminjati.
Preslikava zunanjih priključkov
PIC24 vsebuje enoto PPS za preslikavo vhodov in iz izhodov notranjih funkcionalnih enot na zunanje priključke. Brez možnosti za nastavitev preslikave izhodov in vhodov posameznih funkcijskih enot na priključke mikrokontrolerja bi potrebovali nekajkrat več priključkov, hkrati pa bi bilo veliko priključkov neizkoriščenih. Ob zagonu mikrokontrolerja PIC24, so skoraj vsi priključki, razen tistih s nespremenljivo funkcionalnostjo (VDD, GND, MCLR, … in nekaj priključkov vrat A), prirejeni enim od številnih vhodno-izhodnih vrat. Delovanje slednjih smo spoznali v preteklem nadaljevanju.
Enota PPS ima dva nabora registrov, s katerima nastavljamo vhodne in izhodne preslikave. Način delovanja PPS je pri PIC24 skoraj povsem enak kot pri PIC18. Vsakega od vhodov notranjih funkcijskih enot mikrokontrolerja, ki ga lahko preslikamo na en ali več priključkov na vhodu mikrokontrolerja.
Za preslikave izhodov funkcijskih enot na izhodne in izhodno-vhodne nožice mikrokontrolerja je uporabljena nekoliko drugačna logika: PPS ima po en register za vsako nastavljivo nožico na ohišju mikrokontrolerskega čipa.
Vhodno-izhodna vrata
Osnovni koncepti delovanja vhodno-izhodnih vrat je pri PIC24 podoben kot pri ostalih Microchipovih mikrokontrolerjih. Vsaka od 16-bitnih vhodno-izhodnih vrat so sestavljena iz priključkov, ki jih upravljamo neposredno preko krmilnih registrov, ali z notranjo funkcijsko enoto mikrokontrolerja preko preslikave v PPS.
Za vsak priključek, ki ga upravljamo neposredno, lahko izberemo izhodni ali vhodni način delovanja. Pri izhodnem načinu delovanja lahko izberemo način delovanja z odprtim kolektorjem, ki omogoča uporabo zunanjega vira napajanja. To je še posebej zanimivo, če želimo dvigniti nivo napetosti do največ 5,5 V; kar omogočajo na to napetost tolerantni vhodni-izhodi mikrokontrolerja, ki so v njegovi podatkovni poli posebej označeni.
Tudi pri vhodnem načinu delovanja imamo možnosti. Priključek je lahko analogni ali digitalni vhod. Analogni način delovanja je sicer potreben samo za vhode, katerih vrednosti vzorčimo z 10-bitnim analogno-digitalnim (A/D) pretvornikom v PIC24.
PIC24 ima tudi posebne strojne ukaze za delo z biti (postavljanje, brisanje, invertiranje) zato je delo s posameznimi biti vhodno-izhodnih vrat ali v SRAM prav tako enostavno kot pri PIC18.
Časovniki
Časovniki ustvarjajo impulze, ki poganjajo druge funkcijske enote. Lahko delujejo tudi kot sinhroni ali asinhroni števniki. Zato je zelo pomembno, da razumemo njihovo delovanje in jih znamo pravilno povezovati z drugimi funkcijskimi enotami. Najpogosteje časovnike uporabljamo v povezavi z enotami za vhodno in izhodno primerjanje za merjenje ter ustvarjanje impulzno-širinsko moduliranih signalov.
Medtem, ko imajo vsi časovniki od vključno 2 naprej skoraj povsem enako zgradbo in jih lahko povežemo v pare po principu časovnik(n) + časovnik(n+1), denimo v časovnik 2/3. Posamezni časovnik je 16-biten, medtem, ko je par 32-biten. Več bitov omogoča bistveno bolj natančno merjenje in ustvarjanje signalov. 32-bitne pare časovnikov lahko tvorimo vselej, ko jih ne potrebujemo veliko. V nasprotnem, lahko del časovnikov uporabimo neodvisno, nekaj pa jih povežemo v pare.
Delovanje časovnikov je sicer dokaj preprosto. Ko časovnik prešteje do vnaprej določene vrednosti, sproži prekinitev, oziroma postavi prekinitveno zastavico ter opcijsko začne ponovno šteti.
Več podatkov lahko najdemo v podatkovnih polah za mikrokontrolerje PIC24 (npr. s spletnim iskalnikom poiščemo na primer: PIC24FJ64GB002 datasheet) in v referenčnem priročniku za PIC32. Vsi so dostopni tudi iz Microchipovih spletnih strani (www.microchip.com).
Enote za izhodno primerjanje in zajemanje vhodov
Vsaka enota za izhodno primerjanje omogoča ustvarjanje enega impulza ali vlaka impulzov ob določenih dogodkih. Enota za izhodno primerjanje vsebuje števec impulzov, ki jih lahko zajema iz različnih virov. 16-bitna enota za izhodno primerjanje ustvari vlak impulzov brez posredovanja CPE. Mogoča je tudi povezava dveh enot za izhodno preverjanje v 32-bitno enoto. Na ta način je mogoče ustvarjati časovne signale z izjemno visoko natančnostjo, kot jo dosega tudi PIC32.
Enote za vhodno primerjanje, nasprotno, merijo dolžine vhodnih impulzov in prav tako kot časovno bazo uporabljajo časovnike. Štetje impulzov časovnika je lahko 16-bitno ali 32-bitno. Pri 32-bitnem načinu delovanja združimo po dve enoti za vhodno primerjanje v eno 32-bitno. Na ta način zelo povečamo natančnost meritev.
Prekinitveni krmilnik
Mikrokontrolerji PIC24 imajo zmogljiv prekinitveni krmilnik, ki omogoča do 118 virov prekinitev. Za vsak vir je mogoče v prekinitvenih tabelah navesti tudi ločen naslov (prekinitveni vektor), kamor skoči programski števec CPE ob proženju prekinitve. Prekinitveni krmilnik PIC24 deluje več-vektorsko. Vsaka prekinitev ima svoj prekinitveni vektor.
Poglejmo še ostale pomembne lastnosti prekinitvenega krmilnika. Omogoča proženje iz do dveh zunanjih prekinitvenih vhodov (odvisno od nastavitev enote PPS). Možno je tudi programsko proženja katerekoli prekinitve, kar je uporabno predvsem pri testiranju.
Če bi hoteli do potankosti opisati delovanja prekinitvenega krmilnika v PIC24, bi lahko v članku pisali samo o njem.
A/D pretvornik z multiplekserjem
Analogno-digitalni pretvornik je 10-biten. Omogoča izredno hitro vzorčenje analognih napetosti iz različnih virov in njihovo začasno hranjenje v izravnalniku. Izravnalnik je pri hitri A/D pretvorbi nujen, saj bi sicer mikrokontroler ne mogel izvajati tudi drugih pomembnih nalog (npr. vzdrževanje povezave USB).
Vhodni del A/D pretvornika PIC24 z multiplekserjem podpira do 16 analognih vhodov, od tega 13 zunanjih. Izberemo lahko analogne vhode od AN0 do AN12 in tri notranje . Med slednjimi sta tudi vgrajena je tudi merilnika napetosti in temperature jedra mikrokontrolerja. Najhitrejše zajemanje vzorcev je 500.000 ali 1,1 milijona vzorcev v sekundi.
Enote I2C
PIC24 ima vgrajene 2 ali 3 funkcijske enote I2C, odvisno od različice. Zato omogoča vzpostavitev prav tolikšnega števila neodvisnih vodil, preko katerih lahko povežemo različne naprave. I2C ni namenjen prenosu velikih količin podatkov, temveč izmenjavi meritev in oddaji nadzornih podatkov in nastavitev med integriranimi vezji, ki so del elektronske naprave ali sistema za elektronsko upravljanje stroja ali vozila.
Preko vsakega od priključkov I2C se lahko mikrokontroler poveže z do 255 različnimi napravami, če uporablja 10-bitno naslavljanje, ali z do 127 različnimi napravami, če uporablja 7-bitno naslavljanje. Vsekakor je potrebno opozoriti, da je dejansko število naprav na vodilu odvisno tudi od tega, kakšen del naslova naprave na vodilu dekodirajo. Če naprava ne dekodira celotnega naslova, se lahko preslika na več naslovov, s čemer za toliko zmanjša število razpoložljivih naslovov, ter od električnih lastnosti vodila in frekvence ure vodila.
Standardizirane frekvence vodila I2C so: 100 kHz, 400 kHz in 3,4 MHz. V kolikor to naprave na vodilu dopuščajo, lahko Microchipovi krmilniki generirajo takt ure tudi pri poljubni drugi frekvenci.
Vodilo deluje preko dveh napajalnih in dveh signalnih vodov: napajalna napetost, masa, dvosmerni podatkovni vod in vod za signal ure. Signal ure oddaja le integrirano vezje, ki je v vlogi gospodarja vodila. Prav tako, je gospodar vodila edini, ki sme začeti prenos podatkov, ne glede na to ali gre za pisali ali bralni dostop. Ostale naprave na vodilu delujejo kot sužnji.
Hkrati lahko kot gospodar vodila deluje le ena naprava, vendar protokol I2C dopušča, da se gospodarji vodila izmenjujejo in celo zamenjujejo svoje vloge. Krmilna enota za vodilo I2C zna ugotoviti kolizije, od katerih pride pri poskusih hkratnih oddaj podatkov, če poskuša hkrati oddajati več gospodarjev vodila. Prav tako zna nastaviti različna stanja vodila, kot je denimo začetno stanje, ki suženjskim napravam na vodilu I2C signalizira začetek operacije, ki jo vodi gospodar vodila.
Enote SPI
PIC24 ima vgrajene 2 ali 3 funkcijske enote SPI. SPI je zunanje zaporedno vodilo, ki omogoča hkratni dvosmerni prenos podatkov. Če je na vodilo priključenih več naprav, ki izbiramo preko posebnih naslovnih linji, CS, saj naslov naprave ni del podatkovnih besed, ki jih prenašamo preko SPI.
Vgrajena programska oprema mora izbrati le ustrezen način delovanja in že lahko prenašamo podatkovne besede dolžin 8 in 16 bitov. V izhodni izravnalnik preprosto prenašamo podatkovne besede ter iz vhodnega izravnalnika beremo besede. S pretvarjanjem podatkov v zaporedje bitov in nazaj v besede se ukvarja izključno strojna oprema. To omogoča za programerja enostavne in zanesljive implementacije protokola SPI. Globina strojnih izravnalnikov je 8. Na ta način so izravnalniki vedno v celoti izkoriščeni. Za manj zahtevne aplikacije, ki zahtevajo več prilagajanja imamo tudi možnost posamičnega prenosa podatkovnih besed, brez izravnalnikov in uokvirjanja pri oddaji podatkovnih besed.
UART
UART omogoča veliko načinov komunikacije zaporedne in vzporedne komunikacije na osnovi notranje sinhronizacije oddajnika in sprejemnika. Zato prav tako pomemben kot že prestavljeni moduli SPI in I2C. Posebnost UART je, da imata oddajnik in sprejemnik notranji časovni bazi, ki se sproti medsebojno usklajujeta. Zato prenos taktnih impulzov ni potreben. PIC24 ima 1 od 4 module UART, odvisno od števila priključkov.
UART podpira protokole: RS-232, industrijski RS-485, LIN 1.2 in IrDA za infrardeče komunikacije. PIC32 lahko deluje kot kodirnik ali dekodirnik infrardečega signala po standardu IrDA. Podpira hkratni dvosmerni 8-bitni ali 9-bitni prenos podatkov (angl. full duplex) z enim ali dvema zaustavitvenima bitoma. Omogoča uporabo lihe ali sode paritete, ali prenos podatkov brez preverjanja pravilnosti. Omogoča strojni nadzor pretoka podatkov in samodejno nastavljanje optimalne hitrosti prenosa, ki lahko znaša od 76 bitov na sekundo (b/s) do 30 Mb/s, odvisno od osnovnega takta za UART-ov generator impulzov.
UART vsebuje tudi ločena izravnalnika za vhodne in izhodne podatke, ki podpirata samodejno preverjanje paritete in zaznata prekoračitev obsega. Bistveno hitrejše delovanje od klasičnih vmesnikov UART omogočata tudi ločeni prekinitvi za sprejem in oddajo podatkov.
Ura realnega časa
Ura realnega časa v PIC24 ima registre z enako funkcionalnostjo kot tista pri PIC18, vendar so snovalci mikrokontrolerja dobro izrabili 16-bitnost. Nič več ni potrebno uporabljati zapletenega načina posrednega naslavljanja. Do vseh registrov ure dostopamo neposredno.
Ura realnega časa je prilagojena za delovanje v 21. stoletju, od leta 2000 do 2099, saj vsebuje v tem obdobju vsa prestopna leta. Zato datuma ne bo potrebno prenastavljati kadar ima februar 29 dni. Vselej bo pravilno določen tudi dan v tednu, če ga bomo na začetku pravilno vnesli.
Podobno kot pri PIC18, ima tudi ura realnega časa pri PIC24 možnost ponavljanja alarma na osnovi maske, s katero označimo kateri deli datuma in časa se morajo ujemati, da se sproži alarm. Na ta način lahko nastavljamo različne periode proženja. Vendar je najdaljša perioda 1 leto, saj v datum alarma ne moremo zapisati letnice.
Vzporedno vodilo PMP
PMP je 16-bitna funkcijska enota za priključitev naprav z vzporednimi vodili v različnih režimih delovanja. Na voljo imamo do 16-bitni podatkovno in naslovno vodilo ter nadzorno vodilo, katerega število signalov je odvisno od izbire širine naslovnega vodila. Širino podatkovnega vodila lahko izbiramo med 8 in 16 biti, medtem ko je širina naslovnega vodila manjša na račun več signalov na nadzornem vodilu. Slednje ima obvezna signala PMWR in PMRD, s katerima določa smer toka podatkov, medtem kot so signali PMCSx za izbiranje na vodilo priključenih naprav opcijski (PMCS, signal za izbiro čipa, angl. chip select signal). Izberemo lahko 0, 1 ali 2 signala. Temu primerno manj je tudi bitov naslovnega vodila. Zelo dobro je, da lahko polarnost signalov PMCSx, PMWR in PMRD izberemo programsko, saj tako morebitna vgradnja prilagoditvenih signalnih inverterjev ni potrebna.
Po drugi strani lahko naslovnemu vodilu dodamo tudi splošne izhodne signale in s tem omogočimo naslavljanje pomnilniškega prostora, večjega od 64 kB. V tem primeru preklapljanje med pomnilniškimi prostori, oziroma pomnilniškimi bankami, s po 64 kB prevzame programska logika. Uporabljamo lahko tudi prenose DMA, ki so lahko dolgi največ 64 kB, oziroma eno pomnilniško banko.
Pravkar opisani način delovanja PMP, brez multipleksiranja podatkovnih in naslovnih signalov pa ni edini. Na voljo so trije načini multipleksiranja; tako, da so multipleksitani samo podatkovni, samo naslovnih ali oboji signali. S tem lahko prihranimo veliko nožic na ohišju mikrokontorlerja na račun dvakratne ali večkratne upočasnitve hitrosti prenosa podatkov.
Multipleksiranje signalov lahko uporabljamo tudi v kombinaciji z zunanjimi napravami, ki multipleksiranja signalov v osnovi ne podpirajo. Dovolj je že, če dodamo dvosmerna logična vrata s pomnilnimi celicami za naslovne in/ali podatkovne signale; na primer 74HC373 ali 74LS373. Podrobnosti njihovega delovanja lahko preberemo v podatkovni poli, če v spletni iskalnik vtipkamo iskalno geslo »373 datasheet«.
Ni odveč dodati, da mikrokontrolerji z manjšim številom nožic od 100 ne omogočajo 16-bitnega podatkovnega vodila brez uporabe multipleksiranja. Obenem je omejena tudi največja širina naslovnega vodila.
Čeprav je to nekoliko v protislovju z njegovim imenom, lahko PMP deluje kot gospodar vodila ali pa kot suženj. Pri prvem načinu PIC24 zunanje naprave s stališča programerja obravnava skoraj enako kot vgrajene funkcijske enote. Pri programiranju moramo na začetku le pravilo nastaviti zakasnilne cikle, v katerih CPE PIC24 čaka na oddajo ali dostavo podatkov iz na vodilo priključenih naprav.
Pri suženjskem načinu delovanja se PIC24 predstavi kot zunanja enota, ki jo lahko povežemo na vodilo drugega računalnika, ki je gospodar vodila. Smer krmilnih signalov na nadzornem vodilu je obrnjena. Tako so signali PMCSx, PMRD in PMWR zdaj vhodni, PIC24 pa mikroprocesor drugega računalnika vidi kot 8-bitni register zunanje naprave.
V PRAKSI: Preizkusna ploščica
PIC24F Starter Kit 1 stane pri MicrochipDIRECT okoli 51 €. Vsebuje vgrajeni programator na osnovi PIC18 ter testni PIC24 s prikazovalnikom OLED, barvno svetlečo diodo in potenciometrom. Vgrajen je tudi 32 kHz tekoči kristal za pogon ure realnega časa. Ne pogrešamo niti aplikacijski priključek USB. Zato možnosti za izdelavo testnih aplikacij in njihovo testiranje tako ne manjka. Kljub temu pa se lahko raziskovanja PIC24 lotimo že za bistveno manj denarja.
Domača preizkusna ploščica temelji na poceni tiskanem vezju za prototipiranje in izbranih Microchipovih vtičnih modulih, ki so sicer namenjeni raznim Microchipovim razvojnim ploščam. Povezave med moduli naredimo sami. Res pa je, da moramo imeti pri roki kak programator za novejše Microchipove mikrokontrolerje, kot je PICkit3.
Na spletnem portalu PC USB Projects pogosto zasledimo izraz osnovno vezje, ki pomeni vezje z osnovno funkcionalnostjo, ki omogoča neposredno komunikacijo PC z mikrokontrolerjem. Osnovno vezje za mikrokontrolerje PIC24FJxxGB002, ki omogoča priklop na PC preko USB 2.0, je podrobno opisano na spletni strani: https://sites.google.com/site/pcusbprojects. Poleg osnovnega vezja najdemo tudi datoteke HEX z vgrajeno programsko opremo za mikrokontroler PIC24FJ64GB002. Slednjo bomo uporabljali tudi pri našem raziskovanju arhitekture PIC24, pri katerem nam bosta v začetku v veliko pomoč tudi Vellemanovi tiskani vezji za eksperimente, K8055-1 in K8055N-2, ki že vsebujeta podporno analogno elektroniko za analogni zajem signalov, tipke in zaščitene digitalen vhode ter vezje, ki omogoča neposredni priklop relejev. Slednja lahko kupimo tudi v bolje založenih slovenskih (spletnih in navadnih) z mikroelektroniko.
Vendar to ne pomeni, da boste morali bralci omenjeni prototipni ploščici kupiti, podporna vezja za testiranja lahko sestavite tudi sami, saj je Velleman električni načrt svojih preizkusnih ploščic K8055-1 in K8055N-2 objavil v prosto dostopnih navodilih za uporabo na svoji spletni strani: www.velleman.eu. Navodila so priložena opisu kompletov za sestavljanje, K8055-1 in K8055N-2.
Mi bomo originalna mikrokontrolerja PIC16C745 in PIC18F24J50 nadomestili s PIC24FJ64GB002. Podroben opis izdelave ustreznega vmesnika za K8055N-2 je na prej omenjeni spletni strani. Na tej strani najdemo tudi povezavo do spletne strani z opisom izdelave vmesnika za K8055-1.
Prihodnjič
Prihodnjič bomo spoznali še ostale funkcijske enote PIC24 in si ogledali še nekaj praktičnih primerov njegove uporabe.