Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi

Mikroelektroonika on viimaste aastate moes hobi tĂ€nu imeliselle Arduino'le. Kuid on probleem: piisava huvi korral kasvada DigitalWrite() eemaldumise osas on kiire, aga mis edasi teha – pole tĂ€iesti selge. Arduino arendajad on palju pingutanud, et vĂ€hendada sisenemispiiri oma ökosĂŒsteemi, kuid selle piiridest jĂ€tkuvalt loksub karm elektroonika, mis on kergesti kĂ€ttevĂ”itlejale kĂ€ttesaamatu.

NĂ€iteks andmelehed. Nagu oleks neis kĂ”ik olemas, vĂ”ta ja kasuta. Kuid nende autorid ei sea endale selgelt eesmĂ€rki populariseerida mikrokontrollereid; mĂ”nikord tundub, et nad kuritarvitavad arusaamatute terminite ja akronĂŒĂŒmide kasutamist, et segadusse ajada uudishimu. Kuid mitte kĂ”ik ei ole nii halb, kui soovida, avaneb larkit.

Selles artiklis jagan kogemust humanitaariga andmelehtedega hobitegevuse eesmĂ€rgil. Tekst on mĂ”eldud neile, kes on ĂŒletanud Arduino algtaseme, eeldades vĂ€hemalt mingit arusaama mikrokontrollerite tööpĂ”himĂ”tetest.

Alustan traditsioonilisest

LED-i vilgutamisest Arduinoga

Ja kohe kood:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

„Mis see on? – KĂŒsib kogenud lugeja. – Miks kirjutad midagi PINB siseregistrisse? See on ju ainult lugemiseks!“ TĂ”epoolest, Arduino dokumentatsioon, nagu enamik veebis olevaid Ă”ppeartikleid, vĂ€idab, et see register on ainult lugemiseks. Ma ise arvasin samuti nii, kuni lugesin uuesti andmelehte Atmega328p jaoks, valmistades seda artiklit. Ja seal:

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi

See on suhteliselt uus funktsioon, seda polnud Atmega8-l, paljud ei tea temast vĂ”i ei maini seda tagurpidi ĂŒhilduvuse kaalutlustel. Kuid ĂŒsna tĂ”hus mĂ”te on demonstreerida, et andmelehti tasub lugeda, et kasutada kiibi kĂ”iki vĂ”imalusi, sealhulgas vĂ€he teada olevaid. Ja see ei ole ainus pĂ”hjus.

Miks veel lugeda andmelehti

Tavaliselt, kui Arduinod kasutajad on mĂ€nginud LED-ide ja AnalogWrite'idega, hakkavad nad plaatidele ĂŒhendama erinevaid mooduleid ja kiipe, mille jaoks on juba olemas kirjutatud raamatukogud. Varsti vĂ”i hiljem ilmub raamatukogu, mis ei tööta nii, nagu peaks. Siis hakkab entusiast seda torkima, et parandada, ja seal


Seal toimub midagi tĂ€iesti arusaamatut, seega peab Google'is ringi otsima, lugema lugematuid Ă”petusi, kohandama kellelegi sobivat koodi ja lĂ”puks saavutama oma. See annab vĂ”imsa saavutuse tunde, kuid tegelikult meenutab protsess mootorratta tagasipööramist uue jalgratta leiutamist. Samas ei suurene arusaamine, kuidas see jalgratas töötab. Tean, et olen sellega ĂŒsna pikalt tegelenud.

Kui ma oleksin selle pĂ”neva tegevuse asemel paar pĂ€eva veetnud Atmega328 dokumentatsiooni Ă”ppides, oleksin tohutult aega kokku hoitud. LĂ”ppude lĂ”puks on see ĂŒsna lihtne mikrokontroller.

Seega tuleb andmelehti lugeda vĂ€hemalt selleks, et aru saada, kuidas mikrokontroller ĂŒldiselt töötab ja mida ta oskab teha. Ja veel:

  • et kontrollida ja optimeerida teiste teeke. Need on sageli kirjutatud sarnaste entusiastide poolt, kes leiutavad jalgratast; vĂ”i vastupidi, autorid teevad nendesse tahtlikult liialdatud kaitse rumalate vastu. Las see ole kolm korda rohkem ja aeglasem, aga vĂ€hemalt töötab kindlalt;

  • et kasutada projektis kiipe, mille kohta keegi pole teeki kirjutanud;

  • et lihtsustada enda ĂŒlesande ĂŒleviimist ĂŒhe mikrokontrolleri seeriast teise;

  • et lĂ”puks optimeerida oma vana koodi, mis ei mahtunud kuidagi Arduinosse;

  • et Ă”ppida juhtima mistahes kiipi otse selle registrite kaudu, ilma et peaksin vaeva nĂ€gema oma teekide struktuuri uurimisega, kui neid ĂŒldse on.

Miks kirjutada registritesse otse, kui on olemas HAL ja LL?

SÔnastik
HAL, kĂ”rge abstraktsioonitaseme kiht – mikrokontrolleri juhtimise teek kĂ”rgel abstraktsioonitasemel. Kui on vaja kasutada SPI1 liidest, seadista ja lĂŒlita lihtsalt SPI1 sisse, muretsemata selle ĂŒle, millised registrid mille eest vastutavad.
LL, madala taseme API – teek, mis sisaldab makrosid vĂ”i struktuure registrite aadressidega, vĂ”imaldades neile nime kaudu juurde pÀÀseda. DDRx, PORTx, PINx Atmega puhul – see on LL.

Arutelud teemal 'HAL, LL vÔi registrid' toimuvad regulaarselt kommentaarides Habr's. Ilma astralse teadlikkuse pretendeerimata jagan lihtsalt oma hobikogemusi ja mÔtteid.

PĂ€rast suhteliselt tuttavaks saamist Atmega ja STM32 imeliste omaduste kohta lugemist ostsin ma pool tosinat erinevat plaati – nii Discovery, kui ka "Sinised Tabletid" ja isegi lihtsalt kiipe oma projektide jaoks. Need on viimased kaks aastat karbis tolmu kogunud. Vahepeal ĂŒtlesin endale: „kĂ”ik, alates sellest nĂ€dalavahetusest hakkan STM-i Ă”ppima”, kĂ€ivitasin CubeMX, genereerisin SPI seadistuse, vaatasin selle tulemusena tekkinud tekstimassi, mis oli rikkalikult kaunistatud STM-i kopiraitiga, ja otsustasin, et see on kuidagi liiga palju.

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi

Muidugi on vĂ”imalik aru saada, mida CubeMX siin kirjutas. Aga samas on selge, et kĂ”ikide vĂ€ljendite meeldejĂ€tmine, et neid hiljem kĂ€sitsi kirjutada, on ebareaalne. Ja kui ma juhuslikult unustan KĂŒbide seadetes mingi linnukese panna, siis on see Ă€ra keeramine tĂ€iesti teine asi.

Kaks aastat on möödas ja ma ikka imetlen ST MCU Finder igasuguseid maitsvaid, kuid minu arusaamiseks kÀtte saamata kiipe ja juhuslikult sattusin ma suurepÀrase artikli, kuigi see kÀsitleb STM8-d. Ja mainimine teemas mÔistsin, et kogu selle aja olin justkui avatud ukse taga: STM-i registrid on sama moodi nagu igal muul mikroprotsessoril ja nende kasutamiseks pole Cube kohustuslik. Aga kuidas, nii sai ju teha...?

HAL ja konkreetselt STM32CubeMX on tööriist professionaalsetele inseneridele, kes teevad tihedalt tööd STM32 kiipidega. Peamine eelis on kĂ”rge abstraktsioonitase, vĂ”imalus kiiresti migreeruda ĂŒhe mikroprotsessorilt teisele ning isegi ĂŒhe tuumalt teisele, jÀÀdes siiski STM32 pere raamesse. Huvilised seisavad selliste probleemidega harva silmitsi – meie mikroprotsessorite valik on tavaliselt piiratud AliExpressi valikuga ja me rĂ€ndame tihemini radikaalselt erinevate kiipide vahel – liikudes Atmega pealt STM-ile, STM-ilt ESP-le vĂ”i sellele, mis uue projektiga hiina sĂ”brad meile toovad. HAL siin ei aita, ja selle Ă”ppimine vĂ”tab omajagu aega.

JĂ€rele jÀÀb LL – kuid sealt registriteni on pool sammu. Isiklikult leian, et oma makrode kirjutamine registri aadressidega on kasulik: uurin hoolikamalt andmelehte, mĂ”tlen, mida mul tulevikus vaja vĂ”ib minna, ja mis kindlasti ei, struktureerin oma programme paremini ning ĂŒldiselt aitab see meeldejĂ€tmisele.

Lisaks on populaarse STM32F103-ga probleem, et selle jaoks on olemas kaks ĂŒksteisega kokkusobimatut LL versiooni, ĂŒks ametlik STM-i poolt, teine – Leaf Labs’ilt, mida kasutatakse STM32duino projektis. Kui kirjutada avatud lĂ€htekoodiga teek (ja mul oli just selline ĂŒlesanne), tuleb kas teha kaks versiooni vĂ”i pöörduda otse registrite poole.

LĂ”puks muudab LL loobumine minu arvates migratsiooni lihtsamaks, eriti kui arvestada sellega projekti algusest peale. ÄÀrmuslik nĂ€ide: kirjutame Arduinole mĂ”eldud vilkumise Atmel Studios ilma LL-ta:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Kuna see kood peab vilkuma STM8 (ST Visual Desktop) Hiina plaadil, piisab kahe aadressi muutmisest:

#define DDR_B 0x5007
#define OUT_B 0x5005

Jah, kasutan konkreetse plaadi LED-ĂŒhenduse omadust, vilkuma hakkab see vĂ€ga aeglaselt, aga siiski vilgub!

Millised on andmelehed

Artiklid ja foorumid, nii venekeelsed kui ka ingliskeelsed, mĂ”istavad 'andmelehtedena' igasugust tehnilist dokumentatsiooni kiipide kohta, nii et teen seda ka sellel tekstil. Formaalselt on need vaid ĂŒks sellise dokumentatsiooni tĂŒĂŒp:

Datasheet – tehnilised omadused (TTO), mis on iga elektroonilise komponendi jaoks kohustuslikud. Abiks olev info, mida tasub kĂ€epĂ€rast hoida, kuid sĂŒvenemiseks ei leia seal tavaliselt midagi huvitavat. Siiski, lihtsamad kiibid piirduvad sageli ainult andmelehega, et mitte luua liigseid dokumente; sel juhul Reference Manual taotletakse samuti siia.

Reference Manual – tegelikult kasutusjuhend, mahukas raamatuleht, kus on ĂŒle 1000 lehe. Detailselt kirjeldatakse kĂ”ike, mis kiibi sisse mahub. Peamine dokument mikrokontrolleri omandamiseks. Erinevalt datasheet, kirjutatakse juhiseid laia tootevaliku kohta, kus on palju teavet perifeeria kohta, mida teie konkreetses mudelis ei ole.

Programming Manual vĂ”i Instruction Set Manual – juhend mikrokontrolleri unikaalsete kĂ€skude kohta. MĂ”eldud neile, kes programmeerivad Assembly keeles. Kompilaatorite autorid kasutavad seda aktiivselt koodi optimeerimiseks, seega ei ole meile ĂŒldjuhul vajalik. Siiski on kasulik siia vaadata ĂŒldise arusaamiseks, mĂ”ne spetsiifilise kĂ€su tĂŒĂŒpide jaoks, nagu katkendest vĂ€ljumine, samuti aktiivselt silumist kasutades.

Application Note – kasulikud nĂ”uanded konkreetsete probleemide lahendamiseks, sageli koodinĂ€idetega.

Errata Sheet – kirjeldus kiibi ebatĂŒĂŒpilisest kĂ€itumisest koos variantidega, kuidas seda vĂ€ltida, kui need on olemas.

Mida leida andmelehtedest

Otse Datasheet vÔime vajada selliseid jaotisi:

Device Summary – andmelehe esimene leht rÀÀgib lĂŒhidalt seadme kohta. VĂ€ga kasulik, kui oleme kuskil chiibi leidnud (nĂ€inud poes, vĂ€lja lĂ”iganud, kohtunud mainimisega) ja soovime aru saada, mis see on.

General Description – ĂŒksikasjalik kirjeldus kiipide funktsioonidest.

Pinouts – jalamĂ€rgid kĂ”ikide kiibi vĂ”imalike korpuste jaoks (millisel pinnal milline pin).

Pin Description – iga pinni eesmĂ€rgi ja funktsioonide kirjeldus.

Memory Map – mĂ€luaadresside kaart, mis meil tĂ”enĂ€oliselt ei ole vajalik, kuid mĂ”nikord sisaldab see ka registriblokside aadresside tabelit.

Register Map – registriblokside aadresside tabel on tavaliselt just andmelehtedes, kuid Ref Manual – ainult nihked (address offsets).

Electrical Characteristics – selles osas huvitavad meid eelkĂ”ige absolute maximum ratings, mis loetlevad maksimaalsed koormused kiibile. Erinevalt purunematust Atmega328p-st, ei luba enamik mikrokontrollereid pinatele tĂ”siseid koormusi, mis on arduino-kasutajatele ebameeldiv ĂŒllatus.

Package Information – saadaval olevate korpuste joonised, mis on kasulikud oma kaartide projekteerimisel.

Reference Manual koosneb struktuurselt osadest, mis on pĂŒhendatud konkreetsetele periferiakomplektidele, nagu on nende pĂ€ises mĂ€rgitud. Iga peatĂŒkk on tinglikult jagatav kolmeks osaks:

Overview, Sissejuhatus, Features – periferiakomplekti funktsioonide ĂŒlevaade;

Functional Description, Usage Guide vĂ”i lihtsalt sektsiooni peamine plokk – pĂ”hjalik tekstiline kirjeldus periferiakomplekti tööpĂ”himĂ”tetest ja kasutamisviisidest;

Registers – juhtimisregistrite kirjeldus. Lihtsate juhtumite, nagu GPIO vĂ”i SPI puhul, vĂ”ib sellest piisata, et periferiat alustada, kuid sageli tuleb siiski lugeda ka varasemaid osi.

Kuidas lugeda andmelehti

Andmelehed vÔivad esialgu hirmutada oma mahukuse ja arusaamatute sÔnade rohkusest. Tegelikult pole kÔik nii hirmus, kui teada mÔned nÀpunÀited.

Installige hea PDF-lugeja. Andmelehed on kirjutatud pitseerimisnĂ”uete traditsioone jĂ€lgides, neid on tore vĂ€lja printida, plastikutega joonistada ja kokku Ă”mmelda. HĂŒpteksti leidub neis jĂ€lje kogustes. Õnneks on dokumendi struktuur vĂ€hemalt jagatud jaotistega, seega on hea lugeja, millel on mugav navigeerimine, vĂ€ga vajalik.

Andmeleht – mitte Stroustrupi Ă”pik, seal ei pea kĂ”ike jĂ€rjest lugema. Kui kasutasite eelnevat nĂ”uannet – leidke lihtsalt vajalik jaotis jĂ€rjehoidjate paneelilt.

Andmelehed, eriti Reference Manuals, vÔivad kirjeldada mitte konkreetse kiibi vÔimalusi, vaid kogu seeriat. See, et tÀhendab, et pool vÔi isegi kaks kolmandikku teabest ei puutu teie kiibitöötlusse. Enne TIM7 registrite uurimist kontrollige, General Description, kas see on teie jaoks olemas.

Teadma ingliskeelt piisavalt baastasemel. Andmelehed koosnevad poolest keerukatest terminidest, mis pole tavalisele keelekÔnelejale tuttavad, ja poolest lihtsatest sidusstruktuuridest. Ka on suurepÀraseid Hiina andmelehti hiina inglise keeles, kus pool on samuti terminid ja teine pool on juhuslik sÔnastik.

Kui kohtate tundmatut sÔna, Àrge proovige seda tÔlkida inglise-vene sÔnaraamatuga. Kui teil on segadus histeresis, siis tÔlge "histeresis" teid ei aita. Kasutage Google'i, Stack Overflow't, Vikipeediat, foorumeid, kus vajaliku mÔiste selgitatakse lihtsate sÔnadega koos nÀidistega.

Parim viis loetut mĂ”ista on kontrollida praktikas. SeetĂ”ttu hoidke kĂ€epĂ€rast arendusplaati, millega olete tuttav, vĂ”i veel parem, kahte – juhuks, kui te ei mĂ”ista midagi ja nĂ€ete seda maagilist suitsu.

On kasulik hoida andmeleht kĂ€epĂ€rast, kui te loete kellegi Ă”petust vĂ”i uurite kellegi teise teeki. On tĂ€iesti vĂ”imalik, et leiate sealt oma ĂŒlesandeks optimaalsema lahenduse. Ja vastupidi – kui andmelehe pĂ”hjal ei suuda te kuidagi aru saada, kuidas register töötab, otsige see Google'ist: tĂ”enĂ€oliselt on keegi juba kĂ”ik selgeks teinud lihtsate sĂ”nadega vĂ”i jĂ€tnud GitHub'i selgelt arusaadava koodi.

SÔnastik

MÔned kasulikud sÔnad ja tÀhised, mis aitavad teil andmelehtedega kiiremini harjuda. KÔik, mis tuli meelde viimase paari pÀeva jooksul, tÀiustused ja parandused on teretulnud.

Elektritsiteet
Vcc, Vdd – "pluss", toide
Vss, Vee – "miinus", maa
current – vool
voltage – pinged
to sink current – töötama "maa" all vĂ€list koormust
to source current – toitma vĂ€list koormust
high sink/source pin – pin, millel on suurenenud "tolerantsus" koormuse suhtes

IO
H, High – pinil Vcc
L, Low – pinil Vss
High Impedance, Hi-Z, floating – pinil ei ole midagi, "kĂ”rge takistus", see on tegelikult vĂ€lismaailmale nĂ€htamatu.
weak pull up, weak pull down – sisse ehitatud tĂ”mbav/push-pull takistus, umbes 50 kΩ (vt andmelehte). Kasutatakse nĂ€iteks, et sisendpin ei rippuks Ă”hus, pĂ”hjustades valehĂ€ireid. Weak – sest seda on lihtne "ĂŒles murda".
push pull – vĂ€ljundreĆŸiim pinil, kus see vaheldub High ja Madal – tavaline VÄLJUND Arduino'ga.
avatud Ă€ravool – tĂ€histab vĂ€ljundi reĆŸiimi, kus pin vĂ”ib olla kas Madal, vĂ”i KĂ”rge takistus / Ujuv. Siiski pole see peaaegu kunagi "pĂ€ris" avatud Ă€ravool, seal on kaitse dioodid, takistid ja muud asjad. See on lihtsalt reĆŸiimi tĂ€histus maa / mitte midagi.
pĂ€ris avatud Ă€ravool – aga see on juba pĂ€ris avatud Ă€ravool: pin juhib otseselt maapinda, kui see on avatud, vĂ”i on ujuvas olekus, kui see on suletud. See tĂ€hendab, et selle kaudu saab vajadusel saata pinget ĂŒle Vcc, kuid maksimaalne vÀÀrtus on siiski mÀÀratud andmelehel osas Absoluutsed maksimaalsed hinnangud / Pinge.

Liidesed
jĂ€rjestikku – ĂŒhendatud jĂ€rjestikku
ahelasse – ĂŒhendades kiibid ahelasse jĂ€rjestikku, suurendades vĂ€ljundite arvu.
sift – nihked, tavaliselt tĂ€histab bitnihke. Vastavalt, sift sisse ja sift vĂ€lja – andmete vastuvĂ”tmine ja edastamine bititi.
lukk – lĂŒkand, mis katab puhverserveri, kuni bitid on edastatud. Kui edastus on lĂ”ppenud, avatakse lĂŒkand, bitid hakkavad töötama.
kella sisse – teha bititi edastus, nihutada kĂ”ik bitid vajalikesse kohtadesse.
topeltpuhver, vari register, eelregistreerimisregister – tĂ€histab olukorda, kus register peab olema suuteline vĂ”tma uusi andmeid, kuid hoidma neid kuni teatud hetkeni. NĂ€iteks, et PWM-i korras töötamiseks ei tohiks tema parameetrid (tĂ€htaeg, sagedus) muutuda, kuni praegune tsĂŒkkel on lĂ”ppenud, kuid uued parameetrid saavad juba edastatud. Seega hoitakse praeguseid vari register, ja uued toimetatakse eelregistreerimisregister, olles kirjutatud vastavasse kiibi registrisse.

Iga asi
eeltakistus – sageduse jaotaja
seada bit – seada bit 1-ks
tĂŒhjendada / lĂ€htestada bit – lĂ€htestada bit 0-ks (ĂŒlestartimine – STM andmelehtede funktsioon)

Mis edasi

Tegelikult oli siin plaanitud praktiline osa, demonstreerides kolme projekti STM32 ja STM8, mis on spetsiaalselt selle artikli jaoks loodud andmelehtede abil, koos lampide, SPI, ajutite, PWM-i ja katkestustega:

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi

Kuid teksti lÀheb liiga palju, seetÔttu saadetakse projektid teise ossa.

Andmelehtede lugemise oskus aitab teil hobiga hakkama saada, kuid ei asenda sugugi elavat suhtlemist kolleegidega foorumites ja vestlustes. Selleks tuleb siiski kĂ”igepealt inglast keelt paremini osata. Seega neile, kes selle lĂ€bi lugesid – eriline auhind: kaks tasuta tundi Skyengis esimese makse puhul koodi HABR2.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster