Avtor: dr. Simon Vavpotič
2019_275_40
ARMove 32-bitne mikroarhitekture prinašajo v svet mikrokontrolerjev veliko zmogljivost in nešteto novih možnosti uporabe. Kaj so pametni mikrokontrolerji, kaj zmorejo in kako jih uporabljamo?
Nemalokrat se sprašujemo, zakaj lahko pametni telefoni, ki so pogosto manjši od prenekatere mikrokontrolerske preizkusne ploščice, poganjajo sodobne operacijske sisteme in izvajajo skoraj toliko procesov in aplikacij kot klasični namizni računalniki, povprečen 8-bitni ali 32-bitni mikrokontroler pa po zmogljivosti še vedno primerjamo s hišnimi računalniki s konca osemdesetih in začetka devetdesetih let preteklega stoletja. Odgovor na to vprašanje dajejo ARM procesorska jedra, katerih dizajn je mogoče licencirati in ga vgraditi v lastne dizajne procesorskih ali mikrokontrolerskih čipov, s katerimi se da na eni silicijevi rezini združiti vrhunsko periferijo in (sorazmerno) velike pomnilnike z zmogljivim procesorskim jedrom (ali jedri) tipa RISC, kakršna so uporabljena tudi v pametnih telefonih.
Ta vsebina je samo za naročnike
V preteklem nadaljevanju smo spoznali osnovni zgradbo in delovanje SAM mikrokontrolerjev, vendar ne tudi delovanja vseh njihovih funkcionalnih enot. Tokrat se bomo lotili še preostalih počasnih perifernih enot, od katerih so še posebej zanimivi zmogljivi programabilni časovniki in PWM enota, s katerimi lahko ustvarjamo analogne in digitalne signale ali pa jih natančno merimo. Spoznali bomo tudi najpopularnejše preizkusne plošče, s katerimi lahko preučujemo zmogljivosti novega rodu mikrokontrolerjev pa tudi eksperimentiramo.
Počasnejša periferija
Časovniki-števci
Število časovnikov-števcev (TC, angl. timer counter) je odvisno od tipa mikrokontrolerja (denimo SAM71Q21 jih ima 4), pri čemer ima vsak vgrajene po tri kanale, ki jih lahko sprogramiramo za izvajanje najrazličnejših funkcij, kot so: merjenje frekvence, štetje dogodkov, merjenje dolžine intervalov, ustvarjanje impulzov, nastavljanje zakasnitev ter ustvarjenje impulzno-širinsko moduliranih signalov. Taktni signal lahko na vsakega od kanalov povežemo iz različnih virov: treh zunanjih vhodov za taktne signale, parih notranjih vhodov za taktne signale in dveh večnamenskih vhodno-izhodnih signalov, ki ju lahko sami izberemo. TC ima vgrajen tudi kvadraturni dekoder (QDEC), s katerim lahko izvaja samodejno dekodiranje kvadraturno moduliranih signalov in filtriranje vhodnih signalov.
Čeprav je vsak od treh TC kanalov 16-biten, jih lahko verižimo in tako povečamo natančnost na 32, oziroma 48 bitov. Dva ali trije kanali časovnika se v verigi obnašajo podobno kot en TC z večjo natančnostjo. Tako ni potrebe po časovnikih z daljšimi registri, hkrati pa je vedno dovolj časovnikov za podporo delovanju še tako zapletene analogne logike.
Omenimo še, da lahko da lahko TC prožijo prekinitve procesne enote in jih lahko zato uporabljamo tudi za periodični programski nadzor enostavnih perifernih enot, ali za proženje prekinitvenih podprogramov, ki periodično izvajajo vzporedne programske niti.
PWM enota
Krmilnik za impulzno-širinsko modulacijo (PWMC) ima štiri neodvisne kanale, ki ustvarjajo impulze glede na izbrane nastavitve vsakega izmed njih. Kanali ustvarjajo po dva komplementarna vlaka impulzov, ki temeljita na: dolžini periode, času trajanja, polariteti, dolžini mrtvega časa, oziroma časa neprekrivanja. Za vsak kanal lahko izberemo tudi enega od taktnih signalov iz frekvenčnega delilnika, povezanega z zunanjo uro, ki jo prejema PWMC. PWMC uporablja dvojno shranjevanje vrednosti registrov, zato sprememba vrednosti posameznega registra vpliva šele ob začetku novega impulza. Prav tako je mogoče kanale z ustreznimi nastavitvami vrednosti registrov medsebojno povezati in s tem zagotoviti njihovo sinhrono delovanje, tako da hkrati spreminjajo čase trajanja in/ali mrtve čase. Preko programirljive primerjalne funkcije je mogoča tudi povezava z A/D pretvorniki.
SPI enote
Poleg enote za hitre prenose po od 1- do 4-bitnih SPI vodilih in USART enot, ki lahko delujejo v SPI načinu, imajo SAM mikrokontrolerji na perifernem vodilu na voljo tudi do dve namenski SPI enoti, ki lahko delujeta kot gospodarja ali sužnja. Pri tem lahko krmilita do 4 signale za izbiro čipov na SPI vodilu, omogočata pa tudi priklop pomnilnikov z zaporednim dostopom (npr. razni EEPROMi) in seveda dodatnih zunanjih naprav, kot so A/D pretvorniki, D/A pretvorniki, prikazovalniki LCD, CAN krmilnik in razna tipala (npr. temperatura, vlaga, zračni pritisk, …). Za prenos podatkov lahko uporabimo tudi enega izmed XDMAC kanalov, pri čemer lahko SPI enota proži prenose krmilnika za prenosa DMA, XDMAC.
Hitri vmesnik za kartice SD Card in MCC
Mikroikontrolerji iz družine SAM omogočajo tudi priklop pomnilniških MMC in SD kartic po specifikacijah MultiMedia Card Specification v4.3 in SD Memory Card Specification v2.0 ter specifikacijah SDIO v2.0 in CE-ATA v1.1. Enota HISMCI (angl. High-Speed Multimedia Card Interface) lahko deluje s hitrostjo do polovične hitrosti ure gospodarja vodila (angl. master clock), kar omogoča komunikacije z več pomnilniškimi karticami hkrati. Pri tem je mogoče branje in pisanje podatkov na kartice tudi s pomočjo XDMAC.
Res pa je, da imajo vgrajeno samo vtičnico za SD kartice z 9 priključki, medtem ko za kartice microSD potrebujemo vmesnik, ki ga lahko pogosto za nekaj evrov kupimo skupaj z novo microSD kartico. Priključka za starejše hitre MMC kartice sicer nimamo, lahko pa jih povežemo prek vodila s 7 priključki, če imamo na voljo ustrezno vtičnico, ki jo lahko navsezadnje odmontiramo tudi s kakega pokvarjenega fotoaparata, vendar moramo za njeno povezavo z mikrokontrolerjem poskrbeti sami.
Razvojne plošče
Na spletni stani podjetja Microchip najdemo kar nekaj zanimivih razvojnih orodij, s katerimi lahko preverimo zmogljivosti SAM E70 in SAM V71 mikrokontrolerjev. Manj zahtevni uporabniki in tisti, ki jih zanima predvsem notranja zgradba mikrokontrolerja, ali pa potrebujejo zgolj delujoče osnovno vezje, s katerim lahko povežejo svojo periferijo, se lahko določijo za sorazmerno ceneno razvojno ploščo ATSAME70 Xplained z mikrokontrolerjem SAM E70, ki jo lahko na spletni strani Microchip Direct (www.microchipdirect.com) naročimo že za nekaj manj kot 32 EUR; medtem, ko je za tiste, ki želijo brez spajkanja preizkusiti večino možnosti nove družine mikrokontrolerjev z ARM-ovimi Cortex-M7 procesnimi jedri, primernejša dražja razvojna plošča ATSAMV71 Xplained Ultra z mikrokontrolerjem SAM V71, za katero moramo odšteti nekaj več kot 170 EUR. Vendar ponudi veliko več možnosti za eksperimentiranje, saj vsebuje, poleg vmesnika za Ethernet povezave, vtičnice za SD kartice, zunanjega SDRAM-a in EEPROMa AT24MAC402 in povezave USB, še čip z 2 MB Flash pomnilnika, avdio kodek WM8904 z vhodno in izhodno avdio vtičnico ter vse potrebne vtičnice za priključitev: digitalne kamere, LCD zaslon brez lastnega krmilnika, Arduino DUE modulov, modula WiFi, ostalih nadgradih vmesniških ploščic in zunanjega programatorja. Na razvojni plošči so tudi super kondenzator s kapaciteto kar 0,1 F za rezervno napajanje (s tokom 50 µA lahko napaja rezervni SRAM SAM V71 do 1,5 h), kristalni resonator z 32,768 kHz za uro realnega časa, CAN transiver, dodatna uporabniška tipka in tipka za preklop na rezervno napajanje. Za poznavalce povejmo še to, da ima razvojna plošča ATSAME70 Xplained vgrajen pomnilniški čip s 16 MB SDRAM-a, medtem ko ima ATSAMV71 Xplained Ultra na voljo precej manj zmogljiv čip z zgolj 2 MB SDRAM-a. Po drugi strani, so na tiskanem vezju ATSAME70 Xplained za večino priključkov puščeni zgolj kontakti, kamor lahko sami prispajkamo ustrezne konektorje, če jih potrebujemo.
Morda za primerjavo z mikrokontrolerji PIC omenimo še to, da moramo SAM mikrokontrolerjem za priklop na vodilo USB dodati še vezje z zaščitnimi diodami, s katerimi jih zaščitimo pred prednapetostmi in podnapetostmi ter napetostnimi špicami, ki se lahko pojavijo zaradi različnih elektromagnetnih vplivov pa tudi odbojev v povezovalnem USB kablu.
Kako delujejo?
Obe omenjeni razvojni ploščici imata vgrajen napetostni regulator, ki lahko črpa električno energijo iz različnih virov. Pri običajnem delovanju zadošča, da ploščico povežemo z osebnim računalnikom preko ene izmed dveh vtičnic USB, od katerih je ena namenjena neposredni komunikaciji mikrokontrolerja z osebnim računalnikom, preko druge pa komunicira na razvojno vgrajeni ploščo (s spodnje strani) vgrajeni programator, Atmel Embedded Debugger (EDBG), ki temelji na preprostejšem 32-bitnem mikrokontrolerju AT32UC3A4256J-C1UR z zaklenjenim EEPROMom, v katerem je programska oprema za programiranje SAM preko JTAG vodila. AT32UC3A4256J-C1UR obenem deluje tudi kot navidezni COM vmesnik, preko katerega lahko sprejemamo v sporočila o delovanju SAM (sistemska konzola), ki jih v programu za SAM izpišemo s posebnim ukazom. Tako nam mikrokontrolerja ni potrebno dodatno povezovati preko serijskih povezav. EDBG obenem deluje tudi kot vmesniška podatkovna vrata (DGI, data gateway interface) za masovni prenos podatkov iz SAM v osebni računalnik.
Zmogljivejša razvojna plošča, ATSAMV71 Xplained Ultra, omogoča tudi neposredno napajanje iz napajalnika z enosmerno napetostjo med 5 V in 14 V. Zato pri eksperimentiranju nismo odvisni samo od napajanja preko priključkov USB in si lahko privoščimo tudi nadgradnje z analogno ali digitalno logiko, ki za svoje delovanje potrebuje več toka, kot ga lahko zagotovita USB priključka. Poleg tega načina napajanja se lahko zmogljivejša razvojna plošča napaja tudi iz že omenjenega super kondenzatorja.
Delovanje SAM mikrokontrolerja je podobno kot delovanje Raspberry Pi, ki prav tako temelji na ARM procesorskem jedru, le da so SAM mikrokontrolerji veliko bolje prilagojenji izvajanju krmilnih in diagnostičnih funkcij, kakor pa poganjanju polnih operacijskih sistemov, za katere je potrebno veliko delovnega pomnilnika. Natančen potek zagona SAM mikrokontrolerja smo opisali že v preteklem nadaljevanju, zato poglejmo kako ta sodeluje z zunanjo periferijo na razvojnih ploščah.
Zunanji SDRAM je povezan preko hitrega vzporednega EBI vodila, ki je hkrati omogoča priklop LCD prikazovalnika. Ostala zunanja vodila so bolj ali manj zaporedna. EEPROM S25FL116K je povezan preko 4-bitnega QSPI vodila, medtem ko je zaporedni EEPROM AT24MAC402-MAHM-T povezan preko I2C vodila, preko katerega lahko povežemo tudi različne Atmelove kriptografske čipe. Razvojna plošča ATSAMV71 Xplained Ultra ima pripravljenih 8 kontaktov, tako lahko tak čip (ki mora biti izdelan po tehnologiji SMD) sami prispajkamo, vseeno pa ga moramo kupiti posebej.
Preko posebnega zaporednega I2C vodila je povezan tudi avdio kodek proizvajalca Wolfson Microelectronics WM8904, na katerega zvočni izhod lahko neposredno povežemo slušalke. Obenem ima avdio kodek tudi avdio vhod za priklop digitalnega mikrofona, ali druge naprave z digitalnim zvočnim izhodom. Pogled v električno shemo ATSAMV71 Xplained Ultra razvojne plošče razkrije, da moramo za kakovosten zvok vsakemu od dveh analognih izhodnih zvočnih kanalov in dveh digitalnih vhodnih zvočnih kanalov za kakovosten zvok dodati še nekaj diskretnih elektronskih elementov s potrebnimi induktivnostmi, kapacitivnostmi in upornostmi.
Pri kompleksnejših aplikacijah lahko podatke shranjujemo tudi na SD pomnilniške kartice, ali pa jih iz njih beremo. To je še posebej uporabno, če želimo uporabljati katerega od številnih operacijskih sistemov za ugnezdene aplikacije in/ali želimo shranjevati zvok in/ali video. Pomnilniške kartice lahko mikrokontrolerju omogočijo tudi številne nove možnosti obdelave podatkov, ki bi jih sicer lahko izvajali le na večjih računalnikih. Prav tako so dobrodošle za shranjevanje grafik, ko jih potrebujemo za lepši prikaz na LCD zaslonu.
Razvojno okolje
Podobno, kot za tradicionalne Microchipove mikrokontrolerje PIC8, PIC16 in PIC32, imamo tudi za SAM ustrezno razvojno okolje, ki se od MPLAB X v dobršni meri razlikuje, saj temelji na Visual Studiu podjetja Microsoft in ne na IBMovem odprtokodnem Eclipsu, ki ga poganja zgolj javanski stroj. Vseeno ne moremo trditi, da je delo v Atmel Studiu bistveno drugačno od dela v MPLAB X, se pa vseeno moramo privaditi na nov razpored funkcijskih tipk in drugačno razporeditev oken in podoken, ki je veliko bolj domačna programerju, vajenem programiranja v Microsoftovem Visual Studiu.
Atmel Studio lahko namestimo ne glede na to, ali imamo pri roki razvojno ploščo; a jo v primeru, da je ta z računalnikom povezana preko USB priključka in vgrajenega programatorja (EDBG). Razvojno okolje takoj zazna in ponudi dodatne možnosti za nalaganje programske kode in razhroščevanje. Je pa res, da moramo za računalnike, na katerih ni dostopen Internet, izbrati daljšo namestitveno datoteko in ne samo program za namestitev iz spleta, ki zahteva stalno povezavo v internet.
Namestitev Atmel Studia in priloženega Atmel Sofware Frameworka (ASF, slov. Atmelov okvir za programsko opremo) je enostavna, saj je popolnoma avtomatizirana in nam ni potrebno predhodno nameščati kakršnihkoli verig programskih orodij ali gonilnikov. Pomembno je le, da imamo ob namestitvi skrbniške pravice. Tudi programiranje mikrokontrolerjev na podprtih razvojnih ploščah poteka hitro in skoraj neopazno, kar je dobra lastnost uporabe hitrega JTAG vmesnika za programiranje, preko katerega navadni ali ugnezdeni programator v ciljni mikrokontroler preneseta programsko kodo.
Po drugi strani potrebujemo spletno povezavo za dostop do Atmel Studio SDK in referenčne dokumentacije za razvoj ugnezdene programske opreme. Obenem je na Microchipovih spletnih strežnikov dostopna tudi dokumentacija primerov; kar je nekoliko drugače, kot smo vajeni pri MPLAB in MPLAB X, ker lahko vso dokumentacijo za PIC mikrokontrolerje prenesemo s spleta v nekaj strnjenih datotekah. K sreči lahko vsaj vso referenčno dokumentacijo vseh primerov prenesemo v eni strnjeni datoteki (*.ZIP).
Zbirka primerov v ASF
V ASF ne manjka programskih primerov za katerokoli od podprtih razvojnih plošč, ki so nazorni in enostavni za namestitev in uporabo. Za razvojno ploščo ATSAMV71 najdemo 127 primerov, od katerih jih je nekaj tudi za dodatne module, kot sta modula WiFi, WILC1000 in WILC3000, ki ju lahko dokupimo posebej, medtem ko je za enostavnejšo razvojno ploščo ATSAME70 primerov le 95, saj imamo nekoliko manj možnosti za namestitev dodatnih modulov, oziroma moramo sami prispajkati ustrezne vtičnice.
Večina primerov se nanaša na točno določeno funkcionalnost preizkusnih plošč, denimo dostop do SDRAM, nekoliko manj pa je takih, ki povezujejo več funkcionalnosti, kot je delovanje v različnih vlogah na USB vodilu. Programska koda primerov je dobro dokumentirana, najdemo pa tudi spletne povezave na datoteke s podrobnejšimi razlagami (ki jih lahko prenesemo tudi v že omenjeni strnjeni *.ZIP datoteki) in na dodatno programsko opremo.
Denimo, za preizkus primera HID (human interface device), oziroma vmesniška naprava za interakcijo s človekom, kot je na primer računalniška miška, potrebujemo tudi ustrezen standardni program za PC za klicanje funkcij vmesnika, ki ga lahko napišemo sami, ali pa ga prenesemo iz spleta. Obenem najdemo tudi povezave na spletne strani Microchipa, iz katerih lahko prenesemo podrobnejši opise delovanja primera in aplikacije za PC.
Lotimo se še prvega demonstracijskega projekta s pomenljivim imenom Getting-Started Application, ki prikaže osnovne lastnosti jedrnih programskih knjižnic iz uporabo časovnikov ter v razvojno ploščo vgrajenih svetlečih diod in tipk. Preverimo lahko tudi, kako uporabna je sistemska konzola, preko katere s pomočjo CDC protokola, ki posnema delovanje prastarega RS232 vmesnika preko USB vmesnika, na navidezna vrata COM s hitrostjo 115200 b/s (z 8 podatkovnimi biti in enim stop bitom) prejemamo obvestila, ki jih med svojim delovanjem posreduje aplikacija v SAM.
Prepričamo se lahko tudi o pestrem funkcijskem naboru programskih knjižnic v programskem jeziku C++, ki skoraj povsem zakrijejo strojno arhitekturo SAM mikrokontrolerja. Denimo, z ukazom ioport_set_pin_level(LED0_GPIO, IOPORT_PIN_LEVEL_HIGH) prižgemo svetlečo diodo na razvojni plošči, ki je povezana neposredno z enim od vhodov-izhodov.
Vsi primeri iz ASF za razvojno ploščo ATSAMV71 delujejo odlično. Edino, kar potrebujemo za delovanje razvojne plošče, je vsaj en USB kabel s priključkoma A in micro USB, ki si ga lahko sposodimo tudi pri nekaterih pametnih telefonih različnih proizvajalcev, pri katerih prav tako služi za žično povezavo s PC.
Linux
Podobno kot pri nadaljevanki o PIC32MZ, sem se tudi tokrat lotil iskanja operacijskega sistema z vsemi funkcionalnostmi, ki bi ga bilo moč namestiti na razvojni plošči ATSAME70 in ATSAMV71; še posebej zato, ker imata obe vgrajeno vtičnico za pomnilniške kartice SD. Tako sem našel zanimivo spletno stran www.at91.com/linux4sam, ki ponuja odprtokodne različice Linuxa, prilagojene za različne Microchipove razvojne plošče s SAM mikroprocesorji, ki temeljijo na procesorskem jedru ARM Cortex-A5 z matematičnim koprocesorjem in jih namesto s kratico MCU (angl. microcontroller unit) pri Microchipu označujejo kar z MPU (angl. microprocesor unit). Čeprav imajo vgrajen majhen lastni statični RAM (denimo SAM A5D3 ga ima največ 128 kB, SAM V71 pa največ 384 kB), imajo tudi namenska 32-bitna ali 64-bitna podatkovna vodila in naslovna vodila, preko katerih omogočajo priklop velikih dinamičnih SDRAM pomnilnikov (moduli LPDDR, DDR2, LPDDR2) in hitrih zunanjih naprav. Vgrajene imajo tudi zmogljive krmilnike pomnilnika, zato nam ni treba programsko skrbeti za osveževanje zunanjega SDRAM. Procesorska zunanja vodila porabijo približno polovico zunanjih priključkov čipa; tako da je, na primer pri SAMA5D3 od 324 na voljo le 160 vhodno-izhodnih priključkov. Hkrati imajo MPUji tudi večje predpomnilnike (dvakrat 32 kB namesto dvakrat 16 kB) in lahko delujejo pri delovnem taktu do 536 MHz. Podpore za Linux4SAM za razvojni plošči ATSAME70 in ATSAMV71 zato skoraj gotovo ni pričakovati, saj skupaj z zunanjima pomnilnika premoreta za velikostni razred manj SDRAMa in hkrati poganjanje Linuxa tudi ni njun namen.
Razvojne plošče ATSAMA5Dx z MPUji lahko kupimo na spletni strani www.microchipdirect.com in so v cenovnem razredu razvojne plošče ATSAMV71. Primerne so predvsem za tiste, ki želijo graditi vgrajene aplikacije v okviru klasičnega operacijskega sistema, a obenem obdržati čim več lastnosti klasičnega mikrokontrolerja.
Kljub tem je za prave razvijalce strojne opreme dostikrat veliko pomembneje, kako bodo z izbrano razvojno ploščo do potankosti preizkusili zmogljivosti izbranega mikrokontrolerja z lastno programsko opremo in ustreznimi programskimi knjižnicami. Vsekakor so pri realnih aplikacijah pomembni predvsem poraba energije, stabilnost in zanesljivost delovanja v ciljnem delovnem okolju, kar zahteva veliko natančnega načrtovanja in testiranja.
Pomemben dejavnik pri omenjenih namestitvah Linuxa je tudi prikazovalnik, saj ga moramo pri razvojnih ploščah ATSAME70 in ATSAMV71 in večini ATSAMA5Dx razvojnih plošč dokupiti. Vendar ločljivosti tovrstnih zaslonov LCD (npr. 480 x 360 pik) niso ravno impresivne.
Zato tistim, ki si želijo predvsem poganjati Linux na ekstravagantno majhnem računalničku predlagam naj si raje omislijo kar Raspberry Pi 3, s katerim lahko povežejo tudi sodoben monitor, obenem pa mu ne manjka priključkov za enostavno krmiljenje. Res pa je, da imajo Microchipovi MPUji veliko več vgrajenih perifernih enot, ki so zmogljivejše in kompleksnejše in katerih nabor je zelo podoben naboru perifernih enot SAM V71.
Prihodnjič
Atmel Studio podpira tako 8-bitne, 16-bitne, kot 32-bitne mikrokontrolerje, ki so jih razvili v Atmelu, ki je zdaj del Microchipa. ASF je zato bogata zbirka primerov njihove uporabe, pri čemer je veliko primerov prirejenih za delovanje v različnih družinah mikrokontrolerjev, podobno kot pri PIC mikrokontrolerjih.
Prihodnjič se bomo lotili podrobnejšega raziskovanja razvojne plošče ATSAMV71 Xplained Ultra, ki na eni tiskanini združuje ne samo SAMV71 mikrokontroler, temveč veliko zunanjih perifernih enot, s katerimi lahko dobro preverimo svoje dizajne svoje ugnezdene programske opreme. Krmilili bomo vhodno-izhodne priključke, pri čemer bomo razvojni plošči dodali še nekaj več svetlečih diod, nastavili uro realnega časa, spoznali, kako beremo podatke s kartice SD, …