Avtor: dr. Simon Vavpotič
2018_262_55
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 preteklem nadaljevanju smo spoznali naslednjo zgradbo in delovanje PIC24: oscilatorski del, preslikavo zunanjih priključkov, vhodno-izhodna vrata, časovnike, enote za izhodno primerjanje in zajemanje vhodov, prekinitveni krmilnik, A/D pretvornik z multiplekserjem, enote I2C, enote SPI, UART, uro realnega časa in vzporedno vodilo PMP ter izdelali preizkusno ploščico. Kot alternativo smo ponudili preizkusno ploščico PIC24F Starter Kit 1, ki jo lahko kupimo pri MicrochipDIRECT za okoli 51 €.
Ta vsebina je samo za naročnike
Tokrat bomo spoznali še razlike med 16-bitnimi mikrokontrolerskimi poddružinami F, H in E ter ostale funkcijske enote PIC24 in si ogledali še nekaj praktičnih primerov njegove uporabe.
Poddružine F, H in E
PIC24 obsega tri poddružine mikrokontrolerjev. PIC24F je najpreprostejša in se razlikuje od ostalih dveh po zmogljivosti do 16 MIPS in nekoliko enostavnejši vgrajeni periferni strojni opremi, medtem ko poddružini PIC24H in PIC24E dosežeta tudi do 60 MIPS. Slednji vključujeta do 15-kanalni krmilnik DMA z do 4 kB RAM-a, vendar nimata podatkovnega EEPROM-a. Omogočata sestavljanje po dveh 16-bitnih časovnikov v en 32-bitni časovnik in s krmilnikom ECAN podpirata komunikacijo preko industrijskega vodila CAN. Nekateri mikrokontrolerji iz teh poddružin omogočajo tudi 12-bitno A/D pretvorbo. Programski EEPROM je lahko do več kot dvakrat večji kot pri poddružini PIC24F in obsega do 536 kB.
32-bitni generator kod CRC
Generator števil CRC omogoča izračunavanje kontrolnih vsot, ki jih potrebujemo pri številnih omrežnih in varnostnih aplikacijah. Omogoča nastavljanje koeficientov polinomske enačbe, dolžine do 32 bitov. Dolžina podatkov je neodvisna od dolžine polinomov. Generator CRC vsebuje tudi predpomnilnik FIFO, ki se lahko prilagaja dolžini podatkov (4×32-bitov, 8×16-bitov ali 16×8-bitov) in lahko sproži prekinitev. Izračuna polinoma lahko upošteva pravilo debelejšega ali pravilo tanjšega konca. Na ta način se lahko mikrokontroler prilagaja zahtevam glavnega računalnika (npr. PC uporablja pravilo tanjšega konca).
Generator CRC programiramo z naslednjimi koraki: omogočimo delovanje modula, določimo želeno računsko operacijo (vnesemo vrednosti polinoma, določimo dolžino podatkovnih besed, izberemo pravilo tanjšega ali debelejšega konca, izberemo način prekinitve), napolnimo FIFO s podatki, sprožimo izračun CRC, sproti pišemo preostale podatke v FIFO, dokler ne prenesemo vseh potrebnih podatkov za izračun CRC in nazadnje preberemo CRC.
Opisani postopek bistveno poenostavlja izračun CRC in ne obremenjuje aritmetično-logične enote PIC24 in je veliko hitrejši pri obdelavi velikih količin podatkov.
Krmilnik DMA
Posebnosti implementacije krmilnika DMA pri poddružinah PIC24H in PIC24E so lastno podatkovno in naslovno vodilo ter poseben del podatkovnega RAM-a velikosti 4 kB (DMA RAM), do katerega lahko dostopata procesor in krmilnik DMA. Vse periferne enote znotraj mikrokontrolerja, ki jih lahko uporabljamo s krmilnikom DMA, imajo poleg vrat za dostop do procesorskega podatkovnega in naslovnega vodila še poseben par vrat za dostop do vodil DMA. To omogoča neodvisne prenose DMA znotraj mikrokontrolerja brez kraje delovnih ciklov procesni enoti.
Krmilnik DMA ima do 15 neodvisnih kanalov in omogoča 8-bitne in 16-bitne prenose podatkov. Pri tem omogoča posredno naslavljanje DMA RAM, enkratne prenose podatkovnih blokov, ponavljajoče se prenose podatkovnih blokov in način delovanja ping-pong, ko krmilnik DMA preskakuje med dvema začetnima naslovoma blokov v DMA RAM-u. Tako je mogoče izmenično polnjenje dveh izravnalnikov. Krmilnik DMA lahko ob koncu prenosa podatkovnega bloka, ali ob polovični napolnjenosti izravnalnika sproži tudi prekinitev. Tako procesni enoti sporoči, da so podatki na voljo.
Uporabo krmilnika DMA pri poddružinah PIC24H in PIC24E podpirajo naslednje periferne enote: enote za vhodni zajem, enote za izhodno primerjanje, časovniki, enote SPI, enote UART, A/D pretvornika, vmesniški modul za pretvorbo digitalnih signalov in enoti ECAN.
Enota USB-OTG
Pogosto potrebujemo tudi povezavo mikrokontrolerja z zmogljivejšim računalnikom. Zato je zelo pomembna tudi funkcijska enota USB. Deluje lahko kot naprava (gost) ali kot gostitelj naprav USB. Prvi način delovanja uporabljamo najpogosteje, saj omogoča, da PIC24 povežemo z večjim računalnikom kot zunanjo enoto. Drugi način je uporaben v primerih, ko želimo preko USB s PIC24 povezati dodatne periferne naprave, na primer tipkovnico, sledno tablico ali računalniško miško. To omogoča podpora standarda on-the-go (OTG). Mogoča je tudi dinamična sprememba načina delovanja, tako da se PIC24 iz naprave prelevi v gospodarja vodila USB, če zazna spremembo pogojev delovanja.
Funkcijska enota USB vsebuje vso potrebno logiko in registre, s katerimi lahko v RAM-u vzpostavi večje število izravnalnikov za izmenjavo podatkov. Število potrebnih izravnalnikov je odvisno od števila končnih točk, ki jih uporabljamo za komunikacijo. Enota USB omogoča komunikacijo po standardu USB 1.1 z nizko hitrostjo 1,5 megabita na sekundo ali po standardu USB 2.0 s polno hitrostjo (12 megabitov na sekundo). Za prenos podatkov potrebujemo zunanji kristalni resonator ali oscilator, katerega frekvenca je večkratnik 4 MHz.
Primerjalnik analognih vrednosti
Mikrokontroler je lahko tudi most med digitalno in analogno tehniko. PIC24 ima vgrajene do 3 analogne primerjalnike z digitalnim izhodom. Delujejo na osnovi operacijskih ojačevalnikov, katerih vhode povežemo s priključki na ohišju mikrokontrolerja (CxINy, kjer je x = 1,2 ali 3, y = A,B,C ali D), ko primerjalnik vključimo. Izhod primerjalnika Cx je logična vrednost 1, če je napetost na vhodu pozitivnem vhodu (+) večja od napetosti na negativnem vhodu (-), ali logična vrednost 0, če je napetost na pozitivnem vhodu manjša od napetosti na negativnem vhodu. Rezultat primerjanja je na voljo v statusnem registru; medtem ko ima za nastavitve vsak primerjalnik na voljo svoj nadzorni register.
Vhodi INxA vezani na pozitivne vhoda primerjalnikov, medtem ko so vsi ostali vhodi in referenčni napetosti: Cref in Iref, preko analognega multiplekserja vezani na negativne vhode primerjalnikov. Vir negativnega vhoda za vsak primerjalnik izberemo v nadzornem registru. Velja omeniti še, da, je Cref zunanja referenčna napetost, Iref pa je notranja referenčna napetost, ki je enaka 1,2 V.
Vrednost Cref določimo preko vgrajenega 4-bitnega digitalno-analognega pretvornika, ki omogoča 16-stopenjsko nastavitev vrednosti referenčne napetosti glede na napetost na priključkih mikrokontrolerja, AVDD in AVSS.
Vsakemu primerjalniku lahko preko funkcionalne enote PPS (izbira zunanjih priključkov, angl. peripheral pin select) neobvezno določimo tudi digitalni izhod, na katerega se neodvisno od delovanja vgrajene programske opreme prenaša rezultat primerjanja: CxOUT, kjer je x = 1,2 ali 3.
Izhod drugega primerjalnika, C2OUT, je vezan tudi na enoto za merjenje časa polnjenja.
Visoko zmogljiva modula CAN
Zmogljivost vsakega od dveh 2 modulov CAN pri zmogljivejših PIC24 je impresivna, saj ima do 32 sprejemnih in do 8 oddajnih sporočilnih izravnalnikov, od katerih lahko vsak hrani po največ 8 bajtov podatkov. Izravnalniki so tipa FIFO. Preko izravnalnikov je avtomatizirano tako sprejemanje kot pošiljanje sporočil. Pri tem lahko programer določi tudi prednosti za posamezne tipe sporočil. Prav tako je na voljo 16 vhodnih filtrov, ki omogočajo sprejem samo izbranih vrst sporočil.
Kot pomoč pri razvoju in preverjanju pravilnosti delovanja, je v vsak modul CAN grajena tudi podpora za povratno zanko, s pomočjo katere lahko med drugim preverimo tudi pravilnost nastavitev sporočilnih filtrov.
CAN omogoča asinhrono sporočilno komunikacijo. Informacije potujejo med oddajnimi mikrokontrolerji, oziroma računalniki, in sprejemnimi mikrokontrolerji, oziroma računalniki, v podatkovnih okvirih, ki so sestavljeni iz: krmilnih znakov (začetek okvira in konec okvira), arbitražnimi in nadzornimi podatki, vsebine CRC za odkrivanje napak med prenosom ter potrditve sprejema (ACK). Mikrokontrolerjem, oziroma računalnikom, pravimo tudi vozlišča.
PIC24 podpira štiri vrste okvirov: podatkovne, s katerimi se prenašajo podatki, ki potujejo od oddajnih vozlišč k sprejemnim, oddaljene okvire, s katerimi lahko katerokoli sprejemno vozlišče od oddajnega vozlišča zahteva podatke, okvire napak, ki jih lahko odda vsako vozlišče, ki zaznan napako ter preobremenitvene okvire, ki zagotavljajo dodatno zakasnitev med podatkovnim in oddaljenimi okviri. Medokvirni intervali pri tem zagotavljajo časovni presledek med oddajanjem okvirov.
Specifikaciji CAN2.0A in CAN 2.0B, ki ju podpirajo zmogljivejši mikrokontrolerji PIC24, pozna še dve pod vrsti podatkovnih okvirov: standardne in razširjene. Prvi uporabljajo 12-bitni arbitražni podatek, drugi pa 30-bitni. Arbitražni podatek je sestavljen iz identifikacijske kode in bita RTR, ki določa ali gre za podatkovni ali oddaljeni okvir.
Vmesniški modul za pretvorbe podatkov
Modul DCI omogoča enostavno povezovanje zunanjih naprav, kot so avdio kodeki ter A/D in D/A pretvorniki. Omogoča enokanalni ali večkanalni sinhroni serijski prenos podatkovnih okvirjev. Podpira protokol I2S za povezovanje zvokovnih naprav ter protokol AC-link. Dolžina podatkovne besede je lahko do 16 bitov, največja dolžina okvira pa do 256 bitov. Oddajni in sprejemni izravnalnik lahko shranita do 4 podatkovne besede, ker zmanjša potrebo po programski obdelavi podatkov z glavno procesno enoto.
Enota za merjenje časa polnjenja
Enota za merjenje časa polnjenja (CMTU) omogoča meritve kapacitivnosti. Zato jo lahko uporabimo za priklop membranske tipkovnice ali tipal, ki delujejo po principu spreminjanja kapacitivnosti. S CMTU lahko merimo tudi čas in celo temperaturo, ali ustvarimo zakasnitev.
CMTU ima do 32 merilnih vhodov, ki so povezani preko analognega multiplekserja. Vgrajen ima tudi natančni tokovni vir, ki ga lahko uporabimo za praznjenje in polnjenje kapacitivnega bremena, pri čemer merimo čas z natančnostjo do 1 ns. Na osnovi meritve časa lahko natančno izračunamo kapacitivnost na vsakem od analognih vhodov, ANx.
CMTU lahko samodejno sproži tudi analogno-digitalni (A/D) pretvornik, kar pomeni, da lahko sprememba kapacitivnosti samodejno sproži meritev napetosti. Izhod CMTU je preko generatorja impulzov povežemo tudi z zunanjim priključkom mikrokontrolerja, CTPLS, ki se aktivira, ko CMTU vključimo.
V PRAKSI
Merjenje kapacitivnosti s CMTU
Kapacitivnost lahko merimo na dva načina: z absolutnim merjenjem kapacitivnosti ali preko merjenja relativnega naboja. V obeh primerih mora z enoto CMTU sodelovati tudi A/D pretvornik. Prvi korak je priprava A/D pretvornika na delovanje. Sledi izvedba nastavitev CMTU; nakar programsko sprožimo tokovni generator in počakamo natančno določen časovni interval. Sledi A/D pretvorbe, s katero zmerimo napetost na kondenzatorju. Skupno kapaciteto izračunamo kot z izrazom C = I*T/UAD, kjer so: I tok tokovnega generatorja (A), U izmerjena napetost (V) in T trajanje časovnega intervala (s). Kot vidimo, je za natančnost meritve zelo pomembno, da natančno pozama vrednost toka tokovnega generatorja. Za njegovo umerjanje moramo zato predhodno izvesti kalibracijo, za katero potrebujemo upor z zelo natančno določeno upornostjo, Rcal, na katerem z A/D pretvornikom izmerimo padec napetosti in na ta način natančno izračunamo njegov tok: I = UAD/Rcal.
Drugi postopek, merjenje relativne kapacitivnosti, ne zahteva umerjanja tokovnega generatorja. Dovolj je, da kapacitivnost ocenimo na osnovi meritve napetosti z A/D pretvornikom po natančno določenem časovnem intervalu. Sprememba izmerjene napetosti je sorazmerna spremembi kapacitivnosti. Tak način merjenja lahko uporabimo, denimo za priklop kapacitivne tipkovnice, kjer nas zanima le, ali je določena tipka pritisnjena, ne pa tudi koliko sta njeni dejanski kapacitivnosti, če je pritisnjena ali spuščena.
Merjenje časa polnjenja
Čas polnjenja kondenzatorja lahko natančno izmerimo, če smo prej izvedli kalibracijo kapacitivnosti. Postopek je natančno opisan v referenčni dokumentaciji CMTU. Namen kalibracije je natančen izračun skupne kapacitivnosti A/D pretvornika, CMTU in morebitne zunanjega kondenzatorja, ki jo potrebujemo za meritev časa polnjenja.
Meritev poteka na naslednji način: Najprej pripravimo A/D pretvornik in CMTU za delovanje. Nato izvedemo nastavitev CMTU in izvedemo A/D pretvorbo. Čas polnjenja je tako: T = C/I * UAD. Pri tem je UAD izmerjena vrednosti napetosti z A/D pretvornikom.
Kapacitivna tipkovnica
Priklop kapacitivne tipkovnice sorazmerno enostaven in je ekvivalenten priklopu klasične preklopne tipkovnice. Tipke razporedimo v mrežo, pri čemer stanje posamezne vrstice tipk preverimo tako, da hkrati napajamo celotno vrstico preko vodov od BTN_4 do BTN_8 (glej sliko), medtem, ko na vodih od BTN_0 do BTN_3, ki so povezani s priključki od AN0 do AN3 izmerimo napetosti. Napajanje posamezne vrstice izvedemo tako, da najprej izpraznimo ko kondenzatorje, tako da preklopimo analogne kanale na digitalni način delovanja in jih spremenimo v izhode z logično vrednostjo 0, nakar kondenzatorje ponovno polnimo s konstantnim tokom iz tokovnega generatorja v konstantnem časovnem intervalu. V zadnjem koraku preberemo vrednost napetosti, ki odraža trenutno kapaciteto kondenzatorske tipke. Kapaciteta se spreminja glede na to, ali je tipka pritisnjena, ali ne.
Kot vidimo iz električne sheme, je kljub veliko teorije in precej programske kode, priklop kondenzatorske tipkovnice še vedno zelo enostaven in zanj ne potrebujemo dodatnih modulov, kot denimo pri nekaterih instantnih rešitvah z manj zmogljivimi mikrokontrolerji. Dovolj je, da napišemo ustrezen program in tipkovnico enostavno neposredno povežemo z analognimi vhodi mikrokontrolerja.
Prednost PIC24 je, da v sebi združuje zelo veliko strojne logike in na ta način snovalcem tiskanih vezij in programske opreme olajša delu, hkrati pa omogoča hitrejše delo, saj so zunanja vodila v primerjavi z notranjimi vodili v mikrokontorolerju nekaj velikostnih razredov počasnejša.
PIC24 kot beležka signalov UART
V spletu najdemo zanimiv primer uporabe PIC24, ki omogoča shranjevanje vhodnih podatkov preko serijske povezave z modulom UART po protokolu RS-232. PIC24 signale zajema v datoteko LOGGING.TXT na podatkovnem ključku, s katerim je povezan preko povezava USB. Primer vsebuje podporo za datotečni sistem, kot tudi izkorišča prednosti funkcijske enote USB-OTG. Poučen je tudi zato, ker z njim vzpostavimo serijsko komunikacijo. Osnovni način komunikacije je z 9600 b/s z enim startnim bitom in enim stop bitom, če pa na podatkovnem ključki ustvarimo datoteko CONFIG.TXT, lahko hitrost tudi poljubno nastavimo. Priložen je tudi načrt tiskanega vezja in vgrajena programska oprema, ki jo lahko prevedemo v MPLAB IDE 8 s prevajalnikom MPLAB C30, pri čemer moramo prej namestiti tudi Microchip Application Library.
Več podatkov o projektu najdemo na spletni strani: http://www.fischl.de/usbsticklogger
MPLAB Starter Kit for PIC24E MCUs
Vsi, ki se podrobneje zanimajo za zgradbo in delovanje najzmogljivejših PIC24E, lahko na spletnih straneh MicrochipDIRECT za 52 EUR naročijo začetni komplet, DM240012. Ta se od v prejšnjem nadaljevanju omenjenega kompleta, MPLAB Starter Kit for PIC24F MCUs, razlikuje predvsem po zmogljivejšem mikrokontrolerju.
Digitalni signalni procesorji
Spoznali smo osnovno zgradbo in delovanje 16-bitnih mikrokontrolerjev PIC24. Za konec povejmo, da so njihovi zmogljivejši bratranci, digitalni signalni procesorji iz družin dsPIC30 in dsPIC33. Njihova zgradba razširja zgradbo PIC24H in PIC24E z naslednjimi funkcijskimi enotami: enota DSP, sodčni bitni premikalnik, 40-bitni register za računanje, 16-bitni avdio D/A pretvornik in enota PWM za ustvarjanje impulzno-širinsko moduliranih signalov. Digitalni procesorji presegajo obseg tega članka, zato več o njih v prihodnjih člankih.