Avtor: dr. Simon Vavpotič
2018_267_43
Napredek pri razvoju A/D pretvornikov tipa sigma-delta je omogočil vzorčenje počasnih signalov pri zelo visokih ločljivostih, ki dosegajo celo 32-bitov. To omogoča ne le izjemno kakovostno snemanje nizkofrekvenčnih signalov, ki zaznamujejo naravne pojave, notranje delovanje elektronskih naprav in delovanje v človeškega telesa, temveč tudi njihovo natančno analizo. Natančni A/D pretvornik lahko z nekaj truda izdelamo tudi doma.
Ta vsebina je samo za naročnike
V svetu elektronike je veliko različnih vrst A/D pretvornikov, od katerih je večina integrirana v mikrokontrolerje, saj tako ne zavzemajo dodatnega prostorna na tiskaninah. Vendar njihova ločljivost, med 8 in 12 biti, ne zadošča za natančne meritve, za katere še vedno potrebujemo zunanje A/D pretvornike. Največjo natančnost in točnost danes omogočajo A/D pretvorniki, ki delujejo po principu sigma-delta. Nekateri imajo že vgrajena tudi vezja, ki zagotavljajo stabilne referenčne napetosti pa tudi vezja za preverjanje pravilnosti, natančnosti in točnosti njihovega delovanja ter kalibracijo.
V preteklem nadaljevanju smo nekoliko podrobneje spoznali zmogljive A/D pretvornike proizvajalcev Texas Instruments in Analog Devices, ki sta med glavnimi proizvajalci tovrstnih čipov na svetu. Novejši in zmogljivejši A/D pretvorniki so vgrajeni v majhne čipe v ohišjih TSSOP, ki jih s težavo ročno spajkamo. Najprej smo spoznali zgradbi 32-bitnih A/D pretvornikov, ADS1263 podjetja Texas Instruments (TI) in AD7177-2 podjetja Analog Devices, nato pa smo na osnovi z veliko preprostejšim ADS1252 naredili A/D pretvornik na doma narejeni tiskanini, ki je bil nekoliko hitrejši, vendar tudi manj natančen. Preizkusili smo tudi najzmogljivejši A/D pretvornik ADS1263, ki se ga bomo tokrat lotili še nekoliko podrobneje. Namesto njega lahko uporabimo tudi cenejši, električno združljiv ADS1262, ki pa je brez dodatnega 24-bitnega A/D pretvornika za kalibracijo.
Morda uvodoma omenimo še to, da ProtoCentralove tiskanine z ADS1262 v Slovenijo ni mogoče naročiti. Obenem na spletu, kot kaže, ni alternativ, s katerimi bi se lahko izognili ročnemu spajkanju. Po drugi strani za ADS1263 že izdelana tiskanina sploh ni na voljo. Za tiste, ki se želijo izogniti ročnemu spajkanju tako ostaja edina možnost nakup dragega razvojnega kompleta ADS1262 Evaluation Board podjetja TI. Zato se bomo izdelave prototipnega vezja lotili v celoti.
Priročna osnova: PIC32MZ Starter Kit
PIC32MZ2048ECH144 na PIC32MZ EC Starter kitu je zaradi svoje zmogljivosti kot nalašč za preizkus novega TI A/D pretvornika ADS1263, vendar ga v nasprotju s PIC32MX270F256B ne moremo enostavno prispajkati na domačo tiskanino. Potrebujemo vsaj ustrezno vmesniško tiskanino, ali pa industrijsko izdelano tiskano vezje. Zato smo za osnovo uporabili kar Microchip prototipno razvojno ploščo PIC32MZ Embedded Connectivity (EC) Starter Kit, ki je zaprašena počivala na omari. Priporočamo jo tudi vsem tistim, ki si želijo spoznati tega Microchipovega »mikrokontrolerskega paradnega konja« brez spajkanja. Stane okoli 94 €. Potolažiti moramo tudi ostale bralce in povedati, da smo že v preteklem nadaljevanju predstavili tudi vezje, s katerim lahko ADS1263 povežemo s PIC32MX270F256B (deluje pri 40 MHz ali 50 MHz in ima 64 kB RAM ter 256 kB EEPROM-a), ki je več kot primeren za ročno spajkanje.
Prednosti PIC32MZ2048ECH144 za naš projekt so predvsem nekajkrat višji notranji delovni takt (200 MHz), 512 kB RAM in opcijska Ethernet povezava. Razvojna plošča PIC32MZ Starter Kit je sicer odlična tudi za začetnike, saj že vsebuje programator in razhroščevalnik za PIC32MZ2048ECH144, tako zunanji programator ni potreben. Ima tudi podnožje za hčerinsko tiskano vezje z analognim delom Ethernet vmesnika, ki zmore podatke prenašati s hitrostima 10 in 100 megabitov na sekundo, ki ga moramo kupiti posebej.
Napajanje
ADS1263 vsebuje notranji 2,5 V stabilizator, a je za natančnosti pomembna tudi stabilnost zunanjega napetostnega vira. Za najvišje natančnosti ne moremo uporabiti napajanja preko USB, ampak potrebujemo stabilnejši napetostni vir. Zelo pomembna je tudi visoka stabilnost analogne mase (priključka AVSS in AVDD), kar lahko zagotovimo le s sorazmerno širokimi povezavami na tiskanimi. Proizvajalec predlaga celo uporabo celotnih plasti tiskanega vezja za AVSS in AVDD pri 4- ali večplastnih tiskanih vezjih, s čemer znatno zmanjšamo presluhe med posameznimi analognimi vhodi.
Zelo uporabna je tudi možnost simetričnega napajanja analognega dela A/D pretvornika, kar nam omogoča opustitev izmenične prilagoditve z uporabo kondenzatorjev. S tem lahko signale merimo natančneje in brez frekvenčnih omejitev zaradi vhodnega kondenzatorja. Pri podjetju TI priporočajo uporabo namenskega napajalnika s simetričnima izhodoma -2,5 V in +2,5 V in maso (glej sliko 4). Pri signalih s samo pozitivnimi vrednostmi lahko namesto tega uporabimo tudi stabilni 5 V vir napetosti. Zelo pomembna je tudi masa, saj slaba ozemljitev bistveno vpliva na natančnost meritev pri ločljivostih nad 20 biti. Pri uporabi simetričnega analognega napajanja, negativni analogni napajalni priključek (AVSS) vežemo na -2,5 V (oz. drugo negativno napetost do te vrednosti), pozitivni analogni priključek (AVDD) pa na 2,5 V (oz. drugo pozitivno napetost do te vrednosti). Hkrati vstavimo še 1 µF kondenzator med maso in analogno maso in VSS. Vrednost napetosti AVSS mora biti vedno nižja od AVDD.
Posebno napajanje (DVDD) moramo zagotoviti tudi digitalnemu delu A/D pretvornika. Tu imamo na voljo območje od 2,7 V do 5,25 V, kar je ugodno za prilagoditev skoraj katerem koli mikrokontrolerju. Dovolj je, da digitalno napajanje vežemo na isto napetost, kot jo ima mikrokontroler, obenem pa na maso mikrokontrolerja povežemo tudi digitalno maso (DVSS).
Mikrokontrolerja z ADS1263
Naslednji korak je povezava ADS1263 in PIC32MZ EC Starter Kit preko prilagoditvenega vezja iz 168 na 132 priključkov in I/O Expansion boarda, ki omogoča enostaven dostop do vhodov-izhodov PIC32MZ2048ECx144 ( x = {različica H je brez kriptografskega modula, različica M pa ta modul vključuje} ). Čeprav sta razširitveni mesti J10 in J11 na I/O Expansion boardu originalno brez vtičnice, je na to mesto več kot preprosto prispajkati konektor speedy s 60 kontakti. Ker pa tega nisem imel pri roki, sem uporabil enovrstične kontaktne letvice, ki sem jih vzporedno prispajkal na J10 in nato nanje priključil tri nekoliko predelane vtiče speedy z desetimi priključki. Kljub temu je bolje, da se namesto tega odpravimo v trgovino z elektronskimi komponentami. Prav tako velja za razširitveno mesto J10, kjer bi prav tako lahko uporabili vtičnico speedy s 60 priključki.
Kot osnovo potrebujemo torej: PIC32MZ Embedded Connectivity (EC) Starter Kit (Microchip koda: DM320006, stane okoli 57 €), PIC32MZ EC Adaptor Board (AC320006) za povezavo z Starter Kit I/O Expansion Boardom in Starter Kit I/O Expansion Board (DM320002), preko katerega lahko PIC32MZ2048ECH144 povežemo z lastnimi prototipnimi aplikacijami. Opcijsko si lahko za lažji prenos podatkov preko Ethernet povezave omislimo še hčerinsko kartico LAN8720A PHY Daughter Board (AC320004-3), lahko pa namesto tega že v začetku izberemo nekoliko dražji Starter Kit, ki ima to funkcionalnost že vsebuje.
Prototipno vezje in spajkanje ADS1263
Po povezavi PIC32MZ Starter Kita in Starter Kit I/O Expansion Boarda smo pripravljeni na naslednji korak, v katerem bomo izdelali razširitveno hčerinsko vezje z ADS1263 in za njegovo delovanje potrebnimi diskretnimi elementi. Slednjih ni veliko (glej shemo), zato pa ročno spajkanje ADS1263 ni ravno enostavno. Pri izdelavi prototipnega vezja si pomagamo s kupljeno vmesniško tiskanino proizvajalca ARIES z 28 priključki, s pomočjo katere čip v ohišju TSSOP prilagodimo ohišju DIP-28 (razmik med priključki 2,54 mm), ki omogoča enostavno ročno spajkanje. Razmik priključkov pri ADS1263 je le 0,65 mm, zato se moramo spajkanja lotiti pod povečevalnim steklom. Čeprav imamo več možnosti, se zdi še najenostavneje čip najprej prilepiti s sekundnim lepilom, s čemer zagotovimo pravilno naleganje njegovih priključkov na pocinkane kontakte vmesniške tiskanine in preprečimo njegovo premikanje med spajkanjem. Nato se lotimo mukotrpnega spajkanja pod povečevalnim steklom s spajkalnikom s konico premera vsega 0,4 mm. Tovrstni spajkalniki lahko stanejo tudi 200 € in več, a k sreči pri spletnih trgovcih najdemo tudi cenejše rešitve brez regulatorja temperature, pri čemer lahko slednjega izdelamo tudi iz zatemnilnega stikala za luč (še najbolje takega, ki ga pritrdimo neposredno na električni kabel).
Vseeno si veliko spodrsljajev pri spajkanju ADS1263 ne smemo privoščiti. Predvsem je potrebno paziti, da ne ukrivimo priključkov in da se cin ne razlije preko več priključkov. Čiščenje prostora med priključki zaradi majhnega razmika ni enostavno. Vsekakor je po koncu spajkanja priključkov smiselno za vsak primer tudi električno preveriti spoje, preden čip priključimo na električno napajanje. Čip je tudi elektrostatično občutljiv. Zato se moramo pred spajkanjem razelektriti. Proizvajalec še posebej opozarja, da lahko ob nepazljivosti analogni del čipa poškodujemo in s tem zmanjšamo njegovo točnost.
Izdelava tiskanine z ADS1263
Doma moramo narediti razširitveno vezje z dvovrstičnim vtičem speedy s 60 prikljujčki. Za osnovo lahko uporabimo dve majhni, enostranski prototipni tiskani (ki jih lahko v Sloveniji kupimo npr. Conrad Electronics), ki ju medsebojno povežemo z vijaki, ali pa uporabimo dvostransko preizkusno tiskanino, saj moramo vtič pritrditi z druge strani kot elektronske komponente. Sam sem se odločil za prvo možnost, pri kateri so žične povezave v sendviču med obema tiskaninama.
Električna shema je sicer dokaj preprosta. Proizvajalec za večino digitalnih vhodov in izhodov priporoča zaporedno vezavo 50-ohmskih uporov, s katerimi zmanjšamo preprečimo pojav neželenih motilnih impulzov na podatkovnih linijah med hitrim prenosom podatkov.
Spajkanje komponent na prototipno tiskanino je sicer enostavno. Morda opozorimo, da ima ARLESovo vmesniško tiskano vezje (oz TSSOP na DIP-28) sorazmerno dolge priključke, ki jih je smiselno nekoliko skrajšati, da zmanjšamo potreben razmik med tiskaninama.
Kako začeti?
ADS1263 je pametni, visokozmogljivi A/D pretvornik, ki omogoča uporabo več načinov komunikacije. Enostavni način namenjen hitremu zajemanju digitaliziranih vrednosti napetosti, je podoben tistemu, ki ga poznamo pri preprostem ADS1252, medtem ko kompleksnejši način omogoča tudi izvajanje ukazov, s katerimi lahko čip resetiramo, ustavimo ali zaženemo A/D pretvorbo v kateremkoli od vgrajenih A/D pretvornikov, beremo podatke A/D pretvorb v prvem ali drugem A/D pretvorniku, izvedemo samodejni kalibraciji predojačanja (gain) in prednapetosti (offset) ter beremo ali zapisujemo v notranje registre ADS1263.
PIC32 je zaradi svoje zmogljivosti odličen vmesni člen med ADS1263 in PC. Da bi se izognili takojšnjemu razvoju kompleksne vgrajene programske opreme za PIC32MZ2048ECx144, lahko iz spletne strani [1] iz rubrike Downloads prenesemo datoteko PIC32MZ EC Starter Kit firmware v2.9.1 – alpha.zip. Iz iste spletne strani lahko tisti, ki so se odločili ADS1263 povezati z enostavnejšima PIC32MX270F256B ali PIC32MX250F128B prav tako prenesejo ustrezni ugnezdeni programski opremi (PIC32MX250F128B firmware v2.9.1 – all subversions ali PIC32MX270F256B firmware v2.9.1 – all subversions). V datoteki ZIP najdemo že izdelano vgrajeno programsko opremo, s katero lahko preko vmesnika USB dostopamo do vseh potrebnih funkcionalnosti PIC32MZ2048ECx144 kar iz Visual Basica.NET.
Programiranje
Enostavno programiranje v Microsoft Visual Basic.NET se razlikuje glede na izbrani mikrokontroler v tem, da imajo registri notranjih funkcijski enot (npr. SPI) drugačne naslove, uporabljeni pa so tudi drugi priključki mikrokontrolerja. Zato je potrebno primer za PIC32MZ nekoliko predelati po specifikaciji za posamezni mikrokontroler.
Iz spletne strani [1] prenesemo še programsko knjižnico LIB_PCUSBProjects v7.0.NET4x64.dll z ukazi za neposredno krmiljenje funkcionalnih enot mikrokontrolerja.
PIC32MZ2048ECx144 ima kar veliko logičnih vrat z logičnimi priključki, pri čemer so v našem primeru uporabljena vrata D, E in G. Omenimo še vrata H, pri katerih so priključki RH0, RH1 in RH2 povezani z LEDicami, ki lahko pridejo prav pri razvoju ugnezdene programske opreme, v Visual Basic.NET pa lahko z njimi preverimo pravilnost namestitve prej omenjenih splošne vgrajene programske opreme in programske knjižnice. Zato je zelo pomembno na začetku vzpostaviti pravilno delovanje (vhodi, izhodi, prednastavljene vrednosti) omenjenih logičnih vrat, tako da delujejo kot digitalni vhodi ali izhodi ter imajo hkrati želeno začetno vrednost (več v primeru programske kode na že omenjeni spletni strani).
Na električni shemi (glej sliko) vidimo, da smo za komunikacijo z ADS1263 rezervirali priključek RG6, na katerega se ob programskem vklopu enote SPI2 veže vhod 2SCK (taktni vhod), ki pripada vmesniku za zaporedno komunikacijo, SPI2. Zdaj mu moramo s pomočjo enote PPS dodeliti še ostale priključke, pri čemer želimo, da bi vsi pripadali priključki J10 na Starter Kit I/O Expansion Boardu, saj je tako najenostavneje izdelati prototipno vezje. Izbiro priključkov na električni shemi (glej shemo) moramo zdaj izvesti še v programski kodi. Z ukazom PIC.MemWrite(RPD7R, 6) izhod SDO2 vežemo na priključek RPD7, z ukazom PIC.MemWrite(SDI2R, 6) pa vhod SDI2 pa na priključek RPE5. Ostale krmilne signale ADS1263 smo pripeljali iz vrat E, kot sledi: START = RE4, RESET = RE6, ~CS = RE3, ~DRDY = RE2.
Zdaj moramo pravilno nastaviti delovanje enote za prekinitve in enote SPI2 pri PIC32MZ2048ECx144, kar izvedemo z naslednjim zaporedjem ukazov, glej program 1.
Natančnejši opis delovanja vmesnika SPI pri PIC32 je v reviji Svet Elektronike 232.
V prvem koraku inicializacije postavimo ~CS in START na visoki vrednosti, s čemer ADS1263 odklopimo od vodila SPI in preprečimo samodejno izvajanje A/D pretvorb. Nato izvedemo reset, s katerim ponastavimo vrednosti notranjih registrov in stanje vmesnika SPI. Po preteku kakih 200 ms lahko začnemo izvajati ukaze za branje in vpis vrednosti registrov, če vrednost ~CS ponovno postavimo na logično 0, s čemer omogočimo komunikacijo preko SPI. Med testiranjem vezja lahko pravilnost komunikacije preko SPI preverimo tako, da z ukazom RREG preberemo vrednost registra 0, v katerem je fiksna identifikacijska koda čipa, ki jo sestavljata 3-bitna osnovna različica čipa (ADS1263 ima vrednost 1) in revizijska različica. Prav tako enostaven je izpis vsebine vseh registrov. Ukaz RREG namreč sestavljata 2 bajta: koda ukaza s številko registra, od katerega naprej želimo izvesti branje registrov, in število registrov, ki jih želimo prebrati. ADS1263 ima 27 registrov, ADS1262 pa 21. Ker podatki pri SPI potujejo v obe smeri, moramo pri pisanju omenjenih dveh bajtov podatkov iz vmesnika SPI2 prebrati tudi dva nepomembna bajta. Nato moramo pred branjem vrednosti vsakega od registrov, vpisati prazen podatek (vrednost 0), da lahko preberemo njegovo vrednost. Ob koncu branja signal ~CS vrnemo v visoko stanje, s čemer resetiramo vmesnik SPI ADS1263, ne glede na to, ali je bil zadnji ukaz zaključen, oziroma so bile prebrane vse vrednosti.
Morda je prav, da na tem mestu omenimo še možnost, da krmilnih signalov ~CS in RESET ne uporabljamo. V tem primeru nimamo možnosti enostavne ponastavitve komunikacijskega protokola, če gre pri komunikaciji s ADS1263 kaj narobe. Kljub temu imamo že ob inicializaciji možnost izbire načina delovanja, pri katerem se vmesnik SPI samodejno ponastavi, če se vrednost signala 2SCK ne spremeni več kot 1 ms. Tako lahko prihranimo digitalne priključke.
Multiplekserji
ADS1263 ima štiri multiplekserje: po dva za glavni, 32-bitni, A/D pretvornik in po dva za pomožni, 24-bitni A/D pretvornik. Glavni multiplekser vsakega A/D pretvornika omogoča izbiro pozitivnega in negativnega vhodnega kanala, pomožni multiplekser pa izbiro pozitivne in negativne referenčne napetosti. Stabilnost referenčne napetosti je pri natančnih meritvah izredno pomembna, saj brez nje ne moremo zagotoviti točnosti A/D pretvorb na vhodnih kanalih. Sicer velja omeniti tudi, da je vhodnih kanalov 10, dodatno pa je na voljo še priključek AINCOM, ki ga prav tako lahko sprogramiramo kot vhodni kanal, ali pa ga uporabimo za nastavitev napetostnega odmika (VBIAS). Ko uporabljamo simetrično napajanje analognega dela (-2,5 V in 2,5 V), lahko ta priključek povežemo na maso, s čemer omogočimo točnejše meritve.
Z multiplekserji sta povezana tudi notranji merilnik temperature čipa, ki ga lahko s pridom izkoristimo za zagotavljanje večje točnosti meritev glede na temperaturne pogoje, in testni D/A pretvornik, s katerim lahko ustvarimo različne pozitivne in negativne referenčne napetosti, ki jih uporabimo za kalibracijo A/D pretvornika.
Po drugi strani, »analogni vhodi« niso samo analogni, vsakega lahko programiramo tudi kot digitalni vhod ali izhod. Ta funkcionalnost omogoča, da neuporabljene analogne vhode uporabimo za prenos podatkov ali signalizacijo. Nekatere lahko uporabimo tudi kot analogne izhode, preko katerih lahko na izhod pripeljemo tudi napetost iz D/A pretvornika.
Testiranje in uporaba A/D pretvorbe
Notranje registre smo že omenili (natančen opis je na voljo v podatkovnih polah, ki jih najdemo, če v spletni iskalnik vnesemo geslo »ADS1263 datasheet«), zdaj se moramo lotiti preverjanja kakovosti delovanja.
V ADS1263 je za namene testiranja kakovosti A/D pretvorbe vgrajen tudi referenčni D/A pretvornik, s katerim lahko znotraj čipa ustvarimo različne referenčne napetosti, s katerimi preverimo prisotnost šuma pri različnih pogojih merjena signalov. Praviloma morajo izmerjene vrednosti z A/D pretvornikom dokaj ustrezati, pri čemer mora biti izmerjena vrednost po času konstantna na čim več bitov, saj s tem preverjamo točnost A/D pretvorbe.
Ker pa doseganje točnosti na 20 bitov ali več ni ravno enostavno, bolj za šalo kot za res, omenimo še možnost, da »migetajočih« zadnjih 16 bitov slabo pretvorjenega signala koristno uporabimo kot kakovosten generator naključnih vrednosti. A to spada na področje kriptografije, ki presega obseg tega članka…
V resnici je pomembneje, da so izmerjene vrednosti čim bolj točne, kar lahko zagotovimo le s kakovostno narejenim električnim vezjem, v katerem ni električnih motenj. Proizvajalec navaja, da naj bi bilo pri pretvorbi z najnižjo hitrostjo 2,5 sps (vzorca na sekundo) mogoče doseči točnost do 26 bitov, medtem ko pri višjih hitrostih točnost hitro pada.
Poglejmo še, kako v Visual Basic.NET izvedemo zajem pretvorjene vrednosti v PC. V prvem koraku začnemo prenos s postavitvijo bita ~CS na nizko vrednost, nato ADS1263 pošljemo ukaz za branje podatkovnega registra A/D pretvornika 1 (šestnajstiška koda 12). Pri tem upoštevamo tudi, da bomo morali zaradi dvosmernosti prenosa podatkov preko SPI prebrati prazen bajt, glej program 2.
Sledi branje statusnega bajta, pri katerem moramo zaradi dvosmernosti prenosa podatkov preko SPI najprej poslati prazen bajt in šele nato lahko iz sprejemnega izravnalnika preberemo status, glej program 3.
Naslednji korak je branje 32-bitne pretvorjene vrednosti, ki jo izvedemo v zanki in na koncu sestavimo. Vsekakor tudi tu pred vsakim branjem najprej pošljemo prazen bajt, glej program 4.
Sledi še branje kode za odkrivanje in popravo napak, CRC, glej program 5.
Kot vidimo, v primeru vsakokrat prebrani podatek tudi pravilno sestavimo in izpišemo na zaslon. Vsekakor pa ne gre pozabiti, da je potrebno predhodno zagnati tudi nepretrgano A/D pretvorbo, kar lahko storimo s posebnim ukazom (koda 8 za A/D pretvornik 1, koda šestnajstiška koda C za A/D pretvornik 2). Celoten primer je na voljo na spletni strani [1].
Prihodnjič
Tokrat smo spoznali funkcionalnosti ADS1263 tudi iz programerskega stališča, naučili smo se ga tudi prispajkati v doma narejeno električno vezje. Prihodnjič se v zadnjem delu članka lotimo še izdelave kompleksnejše ugnezdene programske opreme, s katero bomo lahko hitro zajemali podatke v PC, v katerem jih bomo obdelovali v realnem času s pomočjo kompleksnih programskih orodij. Preverjali bomo tudi možnosti za čim natančnejše pretvorbe pri čim višjih hitrostih vzorčenja.
Viri:
program 1
PIC.MemWrite(IEC4_CLR, &H1C00) ' onempgoči prekinitve SPI2 PIC.MemWrite(SPI2CON, 0) ' ustavi delovanje SPI2 PIC.MemWrite(IFS1_CLR, &H1C00) ' izbriši prekinitvene zastavice SPI2 PIC.MemWrite(IPC9_CLR, &HF) PIC.MemWrite(SPI2BRG, 10) ' nastavi frekvenco prenosa podatkov PIC.MemWrite(SPI2STAT, &H40) ' izbriši prekoračitve PIC.MemWrite(SPI2CON2, &H300) ' nastavi delovanja uokvirjanja PIC.MemWrite(SPI2CON, &H08027) ' nastavi osnovno delovanje in omogoči SPI2
program 2
PIC.MemWrite(PORTE_CLR, &H8) ' CS = 0 PIC.MemWrite(SPI2BUF, &H12) ' pošlji ukaz za branje podatkovnega registra A/D 1 PIC.MemRead(SPI2BUF) ' prazno branje
program 3
PIC.MemWrite(SPI2BUF, 0) ' prazno pisanje ListBox1.Items.Add("Status = " + Hex(PIC.MemRead(SPI2BUF))) ' preberi status
program 4
x = 0 For n = 1 To 3 PIC.MemWrite(SPI2BUF, 0) ' prazno pisanje x = x Or PIC.MemRead(SPI2BUF) ' beri del izmerjene vrednosti (beremo po 8 bitov) x <<= 8 Next PIC.MemWrite(SPI2BUF, 0) ' prazno pisanje x = x Or PIC.MemRead(SPI2BUF) '
program 5
ListBox1.Items.Add("ADC1 = " + Hex(x) + ", " + CStr(x)) PIC.MemWrite(SPI2BUF, 0) ' prazno pisanje ListBox1.Items.Add("CRC = " + Hex(PIC.MemRead(SPI2BUF))) PIC.MemWrite(PORTE_SET, &H8) ' CS = 1