V SE312 smo spoznali MIVO in sestavljali CLC in CCL logične funkcije v strojni opremi. Tokrat nadaljujemo z ostalimi naprednimi funkcionalnosti novih 8-bitnih PIC in AVR mikrokontrolerjev.
Avtor: dr. Simon Vavpotič
Čeprav se zdi, da pri 8-bitnikih ni bistvenih novosti, podroben pregled funkcionalnosti razkrije nadvse uporabne nove module (funkcijske enote), denimo tiste za računanje CRC kod in varnostno šifriranje (SLL, TLS, AES, …), brez katerega je skoraj nemogoče izdelati varen spletni strežnik s protokolom HTTPS, ali pa novi USB 2.0 moduli, ki delujejo tudi brez kristalnih oscilatorjev.
Ta vsebina je samo za naročnike
Tokrat začenjamo z nekaj napotki za uporabo Microchip Code Configuratorja (MCC), ki je pomemben pripomoček za gradnjo in vzdrževanje obsežne programske opreme v MPLAB X IDE razvojnem okolju za podporo delovanju PIC in AVR mikrokontrolerjev v povezavi z zunanjimi perifernimi enotami, kot je WINC15x0, ki omogoča Wi-Fi komunikacijo.
Kako ukrotiti MCC?
MCC zna kdaj pa kdaj ponagajati, saj podatke za razne nastavitve črpa tudi neposredno iz GitHuba, četudi namestimo t.i. samostojno različico. Če nimamo stalnega dostopa do interneta, je dobro vedeti, da so programske knjižnice za MCC v mapi <sistemski disk>/Users/<ime uporabnika>/.mcc. Preden se lotimo spreminjanja vsebine mape, je dobro narediti rezervno kopijo. Pri tem hitro ugotovimo, da nekatere različice Microsoft Windows sicer nimajo nič proti, če je datotečna mapa poimenovana pika in ime, vendar poskus kreiranja mape s takim imenom, ali preimenovanja tako mape, v oknih spodleti, zato moramo uporabiti terminalsko okno (Command Prompt).
Z MCC 3.0 je MCC konfiguracja projekta shranjena v XML datoteki s končnico *.mc3. V prvi vrstici je sta zapisana tako različica konfiguracije, kot različica jedra MCC, s katerim je bila ustvarjena pa tudi oznaka mikrokontrolerja, na katerega se konfiguracija nanaša, denimo: <config configVersion=”1.1″ device=”PIC24FJ128GA705″ coreVersion=”4.85.0″>. Če nimamo na voljo ustrezne različice jedra MCC, a imamo na voljo višjo različico npr. 4.85.0 namesto 4.75, MCC ponudi nadgradnjo. Če ta ne uspe, oziroma se konfiguracija *.mc3 ne predstavi na zaslonu tako, da bi jo lahko urejali, lahko poskusimo tudi s katero od starejših različic, tako da v datoteki *.mc3 ročno spremenimo različico jedra, npr. iz 4.85.0 na 4.65. Dodatna jedra MCC lahko prenesemo in razširimo v mapo: <sistemski disk>/Users/<ime uporabnika>/.mcc/cores. Vsekakor je odlično, če imamo na voljo čim več različic, a te hkrati zasedajo veliko prostora na disku.
Po drugi strani so pomembne tudi različice programskih knjižnic z opisi posameznih funkcijskih enot mikrokontrolerja, ki jih pri Microchipu pogosto označujejo z imenom modul. Za grafično načrtovanje in urejanje *.mc3 datoteke, prav tako kot pri jedru, potrebujemo združljive različice knjižnic, vendar to prav tako niso nujno zadnje različice. Pri lovu na prave različice si spet lahko pomagamo s spletno stranjo microchip.com/mcc in seveda GitHubom.
Še glede uporabe MCC kot vtičnika ali kot samostojnega programskega paketa! MCC je bil v osnovi razvit kot vtičnik za MPLAB X IDE razvojno okolje, vendar lahko hkrati uporabljamo samo eno različico. Res, da na primer različica MCC 5.1.17, ki je bila zadnja v času nastajanja članka, podpira tudi starejša jedra od 5.4.13, a ji niso priložena. Tako jih bomo morali po njeni namestitvi sami poiskati in prenesti v prej omenjeno datotečno mapo. Po drugi strani, je neprestano menjavanje vtičnikov v MPLAB X IDE razvojnem okolju zamudno in moteče, če preklapljamo med novejšimi in starejšimi projekti. Če pa se pri preklapljanju podre konfiguracija, ni izključeno, da nam ne bo treba ponovno namestiti celotnega razvojnega okolja. Veliko lažje je, če uporabljamo samostojno različico MCC, ki ni odvisna od MPLAB X IDE in obratno. Tako tudi morebitna njena ponovna namestitev ne vpliva na delovanje MPLAB X IDE.
Glede moje izkušnje še to! Konfiguracijske *.mc3 datoteke v primerih projektov za mikrokontrolerja PIC16F18855 in PIC24FJ128GA705, ki jih lahko prenesemo iz GitHuba in Microchipovih spletnih strani, so nastajale v različnih časovnih obdobjih. Za urejanje *.mc3 datotek za PIC16F18855 lahko uporabimo že MCC 3.0, medtem ko potrebujemo za urejanje *.mc3 datotek za PIC24FJ128GA705 potrebujemo vsaj MCC 4.0 z jedrom 4.65, skratka novejšo različico. Poleg tega potrebujemo tudi ustrezne programske knjižnice za posamezne vrste in tipe mikrokontrolerjev in zunanjih naprav, ki so neposredno podprte v Microchip Harmony. Ker je Microchip MCC naprej uvedel za 8-bitne PIC mikrokontrolerje, nato pa podporo razširil tudi na PIC24, PIC32 in AVR mikrokontrolerje ter dsPIC33 signalne procesorje, so v skladu s tem nastajale tudi nove različice MCC in pripadajoče programske knjižnice. MCC 5.1.17 tako pokriva večino omenjenih mikrokontrolerjev, razen PolarFire, a moramo kljub temu iz spleta naloviti vsa potrebne jedra in programske knjižnice zanje.
Glede na omenjeno ne preseneča, da je bil začetni nabor jeder in programskih knjižnic, ki so se mi z leti nabrale v .mcc mapi v samostojnem MCC primeren za urejanje *.mc3 datoteke za PIC24FJ128GA705, ko pa sem dodal manjkajoče programske knjižnice, sem lahko urejal tudi *.mc3 za PIC16F18855. Dobro pa je, da tudi MCC vtičnik za MPLAB X 6.0 IDE uporablja isto konfiguracijo kot samostojna različica. No, resnici na ljubo povejmo še, da ko se konfiguracija iz *.mc3 datoteke noče in noče pravilno naložiti, pomaga tudi ponovni zagon samostojnega MCC, kar je gotovo bolje, kot če bi morali ponovno nalagati celoten MPLAB X IDE…
Kakorkoli, če z MCC nočemo izgubljati veliko časa, je morda še najenostavnejša možnost, da samostojno različico MCC namestimo na katerega od računalnikov z Windows ali Linux in dostopom do interneta, nakar s priloženimi čarovniki izberemo vse potrebne programske knjižnice za izbrani projekt, ki se nato samodejno prenesejo v računalnik. Nato je zadošča, da vsebino mape <sistemski disk>/Users/<ime uporabnika>/.mcc prenesemo v računalnik brez dostopa do interneta in nameščeno enako samostojno različico MCC.
Zdaj, ko MCC končno deluje, nadaljujemo z opisom novih funkcionalnosti v zadnjih generacijah Microchipovih 8-bitnih mikrokontrolerjev.
USB in aktivno uravnavanje takta
Čeprav sodobnih Microchipovih 8-bitnih mikrokontrolerjev, ki podpirajo USB 2.0 komunikacije, ni ravno veliko, lahko s tehnologijo ACT (active colck tuning) prek USB vodila komunicirajo tudi, če v mikrokontrolersko vezje ne vgradimo kristalnega resonatorja ali oscilatorja. ACT omogoča sprotno prilagajanje frekvence oscilatorja USB modula, tako da se ta natančno ujema s frekvenco USB krmilnika v računalniku ali mikrokontrolerju na drugi strani USB vodila. To je velika prednost, saj močno poenostavi gradnjo tiskanega vezja in zmanjša število potrebnih komponent. Hkrati se zmanjša tudi število priključkov (vsaj za 1, ki ga potrebujemo za priklop oscilatorja; če uporabljamo resonator, potrebujemo vsaj 2) na ohišju mikrokontrolerskega čipa, ki jih potrebujemo za podporo delovanju USB modula.
CRC kontrolna vsota za večjo varnost
CRC modul, ki smo ga v SE312 zgolj omenili, omogoča strojno računanje do 16 bitov dolgih CRC kod, pri čemer lahko izberemo polinom (dolžine do 17 bitov) in tudi določimo 16-bitno vrednost za seme. Pri računanju CRC lahko izbiramo med običajnim in obranim vrstnim redom, mogoče pa je tudi samodejno dodajanje manjkajočih ničel, ki so potrebne, ko se količina podatkov in večkratnih dolžine polinoma na ujemata. Pomembna funkcionalnost modula je tudi možnosti samodejnega izračuna CRC kode za večje dele pomnilnika, pri čemer se dejavnost procesne enote med zajemanjem podatkov iz pomnilnika in računanjem CRC kode zaustavi. Slednje je še posebej pomembno pri zagonu mikrokontrolerja, saj preprečuje, da bi morebitni heker z vgradnjo zlonamerne programske kode kakorkoli vplival na izračun CRC kode, zato je mogoče vsake spremembe podatkov ali programov v flash RAMu sorazmerno enostavno in zanesljivo odkriti.
CRC modul omogoča več načinov delovanja. Podatke lahko zajema iz registrskega para CRCDATH in CRCDATL, ali pa na enega od štirih načinov samostojno dostopa do Flash RAMa. Pri programskem polnjenju registrov CRCDATH in CRCDATL lahko procesor nanje odloži novo 16-bitno vrednost, ko dobi zastavica FULL vrednost 0, kar pomeni, da je CRC modul že obdelal prejšnjo vrednost. Pri tem mora najprej zapisati vrednosti v CRCDATH in šele nato v CRCDATL, saj pisanje v slednjega sproži vnos podatkov v CRC modul. Procesna enota nato počaka, da zastavice FULL dobi vrednost 0 in tako nadaljuje z vnosom nove 16-bine vrednosti, dokler niso vneseni vse, nakar lahko iz registrskega para CRCACCH in CRCACCL prebere izračunano CRC kodo.
Kot smo omenili pa CRC modul omogoča tudi samodejen zajem podatkov iz pomnilnika. Pri tem lahko uporablja vpogledni način PEEK, v katerem podatke zajema od izbranega začetnega do izbranega končnega naslovna v Flash RAM-u le, ko procesna enota do slednjega ne dostopa in zato ne moti njenega delovanja, ali pa načine FLASH, CONCURRENT in TRIGGERED, med katerimi procesna enota stoji. Zato ni odveč opozorilo programerjem, ki pogosto uporabljajo strojno podporo za watchdog-a, da se bo slednji sprožil ne glede na to, ali je CRC modul zaustavil delovanje procesorja. Zato mora biti interval proženja dovolj dolg, ali pa je treba tega pred proženjem CRC modula v načinih LASH, CONCURRENT in TRIGGERED začasno ustrezno podaljšati. Pri tem načina CONCURRENT in TRIGGERED zaustavita delovanje procesorja le pri vsakem branju pomnilniške lokacije, medtem ko pri načinu BURST procesor stoji, dokler CRC modul ne izračuna CRC kode.
Zadnji korak je pravilna interpretacija izračunane CRC kode glede na bitno dolžino polinoma zmanjšano za 2 (PLEN) in bitno dolžino vrednosti zmanjšano za ena (DLEN), za katere računamo CRC. Obe vrednosti sta določeni s po štirimi biti v registru CRCCON1. Microchip Code Configurator (MCC) ponuja odlično rešitev. CRC modul lahko konfiguriramo v grafičnih oknih in nato konfiguracijo z odličnim programskim generatorjem prenesemo neposredno v programsko kodo.
Denimo, za inicializacijo CRC modula iz glavnega programa preprosto pokličemo funkcijo CRC_Initialize, v kateri so že izvedene vse nastavitve. Slednje bi lahko vnesli tudi ročno, a to zahteva veliko časa in natančno poznavanje zgradbe registrov CRC modula. Povejmo še, da MCC pripravi tudi ostale podporen funkcije, denimo CRC_16BitDataWrite ali CRC_8BitDataWrite, ki omogočata vnos 16-bitni in 8-bitnih vrednosti. Katero funkcijo bo MCC pripravil, je odvisno od tega, kakšno bitno dolžino podatkovnih besed smo izbrali v konfiguracijskem meniju MCC. Podobno je prilagojena tudi funkcija CRC_CalculatedResultGet, ki iz registrov CRCACCH in CRCACCL prebere izračunano vrednost, jo pravilno interpretira glede na izbrani dolžini polinoma in podatkov ter vrne 16-bitno kodo CRC.
Povejmo še, da je interpretacija CRC kode najenostavnejša, če uporabljamo 16-bitne podatke in 17-bitni polinom. V tem primeru vrednost CRC dobimo tako, da sestavimo vrednosti registrov CRCACCH in CRCACCL v 16-bitno vrednost: result = ((uint16_t)CRCACCH << 8)|CRCACCL.
Samodejni izračun CRC kode za podatke v delu pomnilnika
Poglejmo še, kako moramo nastaviti CRC modul ko želimo, da ta samodejno izračuna CRC kodo za določeno pomnilniško polje. Najenostavneje je, če se ponovno podamo v MCC iz v nastavitvenem oknu CRC modula in izberemo možnost Enable Scanner, nakar v zavihku Registers vnesemo začetni naslov v registre SCANHADRH, SCANHADRL, SCANLADRH in SCANLADRL, s katerimi določimo pomnilniški področje za samodejno za katerega CRC modul samodejno izračuna CRC kodo. Računanje CRC kode poteka od 16-bitnega naslova v registrih SCANLADRL in SCANLADRH do 16-bitnega naslova v registrih SCANHADRL in SCANHADRH. Tako je mogoče teoretično izračunati CRC kodo za 64 kB pomnilniški prostor, vendar imajo PIC16F188xx mikrokontrolerji tako ali tako največ 56 kB Flash RAM, zato je bojazen, da ne bi mogli naenkrat izračunati CRC kodo za ves pomnilnik odveč.
Samodejno izračunavanje CRC kode za del pomnilnika lahko prožimo programsko, ali izberemo enega od mogočih prožilcev, med katerimi so navadni časovniki in časovniku za merjenje signalov in oscilatorji. Obenem imamo, podobno kot pri posamični obdelavi podatkov, možnost, da po samodejnem izračunu CRC kode za del pomnilnika sproži prekinitev, kar omogoča, da takoj preverimo, ali je vsebina dela pomnilnika ustrezna.
(E)CCP moduli
Čeprav (E)CCP ((Enhanced) Capture/Compare/PWM) moduli niso novost, jih kljub temu omenjamo, saj so zelo pomembni v številnih strojnih aplikacijah tako za zajemanja, merjenje analognih signalov, kot tudi generiranje PWM signalov, ki jih potrebujemo za uravnavanje hitrosti vrtenja krtačnih in brezkrtačnih elektromotorjev in v še veliko drugih aplikacijah.
Prvi korak, ki ga moramo opraviti pri programiranju (E)CCP, je nastavitev časovnika, ki generira referenčni takt, oziroma časovno bazo. Pri »zajemu« signalov časovnik nastavimo tako, da dosežemo dovolj veliko ločljivost pri 16-bitnem merjenju števila impulzov. V ta namen moramo poznati frekvenco impulzno-širinsko moduliranega signala, kot tudi območje modulacije. Priporočljivo je, da se pri moduliranju signala izogibamo skrajnim mejam, ki ju predstavlja zelo veliko razmerje med časom logične 0 in časom logične 1. Časovno bazo nastavimo tako, da je najvišja izmerjena vrednost impulzov v zgornji četrtini merilnega območja (območje je od 0 do 65535 impulzov), najmanjša izmerjena vrednost pa v spodnji četrtini. Denimo, če bi impulzno širino merili tako, da bi od 65536 možnosti izkoristili samo okoli 200, bi to pomenilo, da je kljub 16-bitni meritvi dejanska ločljivost okoli 8 bitov.
Drugi način delovanja enote CCPx je primerjava vrednosti števca izbranega časovnika s programsko izbrano vrednostjo v registru CCPR. To omogoča, da mikrokontroler deluje kot generator impulzov ali nizkofrekvenčni generator. Primerjava lastnosti impulzov poteka povsem samodejno. Ko enota CCP zazna, da je vrednost števca enaka želeni 16-bitni vrednosti v CCPR, v registru PIR2 postavi zastavico CCPxIF in v kolikor je z izbiro načina delovanja v registru CCPxCON to omogočeno, sproži še prekinitev ali spremeni logično vrednost na izhodnem priključku CCPx.
PWM omogoča 4 načine ustvarjanja PWM signala, oziroma štiri načine krmljenja: navadni, pol-most, popolni most, inverzni popolni most. CCP potrebuje v PWM načinu podporo enega izmed časovnikov. CCP omogoča v kombinaciji z enim od časovnikov tako nastavljanje trajanja signala (periode), tudi širine impulza, ko ima signal vrednost logične 1 (trajanje delovnega cikla). Dolžino periode določata vrednosti registrov TMRx in PRx, pri čemer je x številka izbranega časovnika. CCP ima dva primerjalnika. Prvi, ki določa periodo, primerja vrednosti 8-bitnih registrov TMRx in PRx. Če sta vrednosti enaki, nastavi vrednost TMRx na nič (števec časovnika spet začne od 0), postavi izhodno vrednost signala PWM na logično 0 ter izvede primerjavo 10-bitne vrednosti v registrskem paru CCPRxH in CCPRxL in para TMRx, z dodanima skritima bitoma števca taktov na repu. V primeru ujemanja postavi vrednosti izhodnega signala PWM na logično 1. Izhodni priključek mikrokontrolerja za signal(e) PWM moramo nastaviti s pomočjo enote PPS.
PWM iz (E)CCP lahko uporabimo za karkoli, vendar zna samodejno generirati tudi enega ali tri dodatne komplementarne signale, ki omogočajo neposredno krmiljenje brezkrtačnih motorjev, preko ustreznega tranzistorskega ojačevalnika. Za prirejanje signalov priključkom mikrokontrolerja spet poskrbi PPS. Način delovanja izberemo v krmilnem registru CCPxCON, z dodatnim registrom, CCPxDEL, pa določimo začetno stanje signalov ob zagonu mikrokontrolerja.
Numerično krmiljen oscilator (NCO)
NCO je odličen generator digitalnih signalov z velikim frekvenčnim razponom 32 MHz in visoko natančnostjo 20-bitov in linearnim spreminjanjem osnovne frekvence. Omogoča več načinov delovanja: Pri fiksnem nihajnem ciklu (FDC, Fixed Duty Cycle mode) trajanje logične 0 in logične 1 (periode) digitalnega signala enako, ne glede na siceršnje spreminjanje osnovne frekvence. Drugi način je impulzno-frekvenčni (PF, Pulse Frequency mode), pri katerem je dolžina trajanja impulza določena s 3-bitni vrednostjo v NCOxCLK registru. Obenem z lahko v registru NCOxCON izbiramo tudi polarnost izhodnega signala, s čemer lahko učinek podaljševanja ali skrajševanja periode signala dodatno reguliramo.
NCO deluje s pomočjo izbranega zunanjega frekvenčnega in 20-bitnega seštevalnika z akumulatorjem. Frekvenco izhodnega signala določimo vpisom vrednosti v 20-bitni NCOxINC register. Ob vsakem taktu osnovnega taktnega signala seštevalnik prišteje vrednost iz tega registra vrednosti v akumulatorju. Cikel se zaključi s prekoračitvijo obsega v akumulatorju (20-bitni NCOxACCU register). Pri tem se je izhod NCO spremenil glede na izbrani način delovanja, obenem pa lahko NCO generira tudi procesorsko prekinitev.
Modulator nosilnega signala s podatkovnim tokom (DSM)
Data signal modulator modul je vsekakor pomembna novost in je zelo uporaben pri radijskih komunikacijah na daljavo, saj omogoča različne vrste digitalnim modulacij podatkovnega toka na nosilni signal: FSK (frekvenčna modulacija), PSK (fazna modulacija) in OOK (modulacija z vklopom-izklopom nosilnega signala). DSM modul obenem omogoča tudi sinhronizacijo nosilnega signala, izbiro polarnosti signala, programiranje podatkov modulacije in nadzor časa vzpona signala.
Modulacija signalov je striktno digitalna in deluje s pomočjo dveh različnih nosilnih digitalnih signalov z različnima frekvencama, ki ju lahko pridobimo iz zunanjega vira, sistemskega oscilatorja, referenčnega oscilatorja, CCP modulov, PWM modulov, NCO ali CLC modula. Po drugi strani, lahko signal, ki ga moduliramo, pridobimo poleg iz naštetih virov še iz zunanjega signala, bita MDBIT v MDCON0 registru DSM, EUSART DT ali TX/CK signalov ter MSSPx SDO signala. Naštete opcije omogočajo sorazmerno enostavno modulacijo notranjih ali zunanjih podatkovnih tokov, kar je predpriprava za njihovo brezžično oddajanje.
Ko poznamo vire signalov, je delovanje DSM sorazmerno enostavno opisati, saj ta le preklaplja med nosilnima signaloma z višjo in nižjo frekvenco v ritmu zaporedja bitov moduliranega (podatkovnega) signala. Tako je ob logični ničli na izhodu DSM nosilni signal z nižjo frekvenco, ob logični enici pa signal z višjo frekvenco. Obenem DSM omogoča tudi več načinov sinhronizacije nosilnega signala in moduliranega signala. Pri delovanju signala nista sinhronizirana, zato se preklop med nosilnima frekvencama zgodi takoj, medtem ko se pri sinhronizaciji na nosilec z višjo frekvenco preklop zgodi šele, ko ima ta logično vrednost 0. Na enak način deluje tudi sinhronizacija na nosilec z nižjo frekvenco, medtem ko polna sinhronizacije združuje obe omenjeni sinhronizaciji.
Da ne bi smo naštevali novosti in novih modulov v sodobnih Microchipovih 8-bitnih mikrokontrolerjih za zaključek tokratnega nadaljevanja poglejmo še primerjavo starega in novega PIC16 mikrokontrolerja z za nazaj električno združljivimi priključki.
Med PIC16C745 in PIC16F18855: kaj prinese je 16 let razvoja?
Razlika v letih članov družine PIC16 je sodeč po izdaji preliminarne podatkovne pole za PIC16C745 iz leta 2000 in preliminarne podatkovne pole za PIC16F18855 iz leta 2016 celih 16 let. Vendar gre vseeno za primerljiva čipa z 28 priključki, medtem ko imata njuna večja brata PIC16C765 in PIC16F18875 po 40 ali 44 priključkov, odvisno od izvedbe ohišja.
Kljub temu je procesorsko jedro ostalo za programerja večinoma nespremenjeno, a je nekoliko hitrejše, saj tiktaka pri 32 MHz, medtem ko je jedro PIC16C745 tiktakalo pri 24 MHz. A pomnilniki so veliko večji, denimo strojni procesorski sklad je iz 8 nivojev povečan na 16. Veliko večji je tudi Flash RAM, ki ga je po 14 kB namesto 8 kB (pri PIC16F18877 s podobno arhitekturo 56 kB). Štirikrat več je tudi podatkovnega pomnilnika 1 kB namesto 256 bajtov (pri PIC16F18877 ga je za 4 kB, kar je enako kot pri, denimo PIC18F24J50).
Po drugi strani je PIC16F18855 kot tipični predstavnik 8-bitnih mikrokontrolerjev novega rodu brez USB modula, ki je zahteven za implementacijo in zasede sorazmerno velik delo silicijeve rezine. A ob tem povejmo še, da PIC16C745 zna prek USB komunicirati le po standardu USB 1.1, kar pomeni s hitrostima 1,5 Mb/s ali 12 Mb/s. Prenos podatkov tako ne more preseči 1 MB/s, kar pa je za sodobne aplikacije, ki omogočajo tudi prenašanje daljših datotek, pogosto premalo. Po drugi strani, so to vlogo prevzeli predvsem 32-bitni mikrokontrolerji, medtem ko so 8-bitni po novem namenjeni predvsem krmilnik aplikacijam in za podporo delovanju zmogljivejšim 32-bitnim mikrokontrolerjem. Zato ne morem trditi, da USB modul pri PIC16F18855 resnično pogrešamo. In kaj dobimo namesto njega?
Poleg štirih CLC modulov, ki smo jih podrobneje spoznali v preteklem nadaljevanju, so tu še CRC modul, trem 8-bitnim časovnikom iz PIC16C745 so se pridružili še štirje 16-bitni, pet CCP modulov s 16-bitni ločljivostjo za zajem in primerjanje ter 10-bitni PWM (namesto prejšnjih dveh), dodatna dva 10-bitna PWM modula, 20-bitni numerično krmiljen oscilator s frekvencami od 0 Hz do 32 MHz (NCO), dva 24-bitna časovnika za merjenje signalov (SMT), EUSART modul za RS-232, RS-485 in LIN komunikacije namesto manj zmogljivega USART modula, dva MSSP modula za SPI in I2C komunikacije in 5-bitni D/A pretvornik. Slednji je vsekakor novost v PIC mikrokotrolerjih, saj so ga v preteklosti imeli zgolj AVR mikrokontrolerji, od katerih pa se danes nekaterih ponašajo celo z 10-bitnim D/A pretvornikom…
PIC16F18855 v SPDIP ohišju tudi za domače eksperimentiranje
Prvič sem se lotil programiranja mikrokontrolerjev, ko sem si pri znameniti Vellemanovi razvojni plošči K8055 zaželel več zmogljivosti in 10-bitne A/D pretvorbe. PIC16C745 sem tako nazadnje zamenjal s PIC18F2550, vmes pa še izdelal vmesniški tiskanini za PIC18F26J50 in PIC32MX270F256B, ki ji skupaj z K8055 za enostavna testiranja periferije uporabljam še danes. Danes lahko kupimo njeno novejšo različico K8055N-2, o kateri sem v SE pisal že pred leti.
No, danes bi 5-voltni PIC16C745 brez težav, zamenjal tudi z PIC16F18855, ki prenese celo napajalno napetost 6,5 V in ima združljive priključke. Nima le USB vmesnika. Kljub tem so K8055, K8055N-1 in K8055N-2 odlične za testiranje PIC16F18855 mikrokontrolerskega čipa v SPDIP ohišju, saj ta prav tako dobro deluje tudi pri napajalni napetosti 3,3 V; seveda če imamo na voljo tudi ustrezen programator. Je pa navadno bolj priročno uporabiti Microchip Xpress razvojno ploščo, ki je vse enem. Dodati moramo le preprosto vezje za krmiljenje relejev.
Prihodnjič
Sodobni 8-bitni mikrokontrolerji se od svojih predhodnikov znatno razlikujejo predvsem po vgrajeni periferiji, kar zmanjšuje kompleksnost tiskanim in poenostavlja aplikacije na področju strojne opreme. A ker je novosti še vedno preveč za en članek, nadaljujemo prihodnjič.