Kaip ir kodėl skaityti duomenų lapus, jei mikrovaldikliai yra jūsų hobis

Kaip ir kodėl skaityti duomenų lapus, jei mikrovaldikliai yra jūsų hobis

Dėl stebuklingo Arduino mikroelektronika pastaraisiais metais yra madingas hobis. Tačiau čia yra problema: su pakankamai susidomėjimu galite greitai peržengti DigitalWrite(), bet ką daryti toliau, nėra visiškai aišku. „Arduino“ kūrėjai įdėjo daug pastangų, kad sumažintų kliūtį patekti į savo ekosistemą, tačiau už jos ribų vis dar yra tamsus atšiaurių schemų miškas, kuris yra neprieinamas mėgėjams.

Pavyzdžiui, duomenų lapai. Atrodo, kad jie turi viską, imk ir naudok. Tačiau jų autoriai aiškiai nekelia sau uždavinio populiarinti mikrovaldiklius; Kartais atrodokad aprašydami paprastus dalykus tyčia piktnaudžiauja nesuprantamais terminais ir santrumpos siekdami kuo labiau suklaidinti neišmanančius. Bet ne viskas taip blogai, jei norima, karstas atsidaro.

Šiame straipsnyje pasidalinsiu humanitarinių mokslų specialisto, bendraujančio su duomenų lapais hobio tikslais, patirtimi. Tekstas skirtas mėgėjams, išaugusiems iš Arduino kelnių, suponuoja tam tikrą supratimą apie mikrovaldiklių veikimo principus.

Pradėsiu nuo tradicinių

Mirksi šviesos diodas „Arduino“.

Ir iš karto kodas:

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

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

"Kas čia? – paklaus rafinuotas skaitytojas. – Kodėl kažką rašote į PINB įvesties registrą? Jis skirtas tik skaitymui! tikrai, Arduino dokumentacija, kaip ir daugumoje mokomųjų straipsnių internete, teigiama, kad šis registras yra tik skaitomas. Aš pats taip maniau, kol neperskaičiau duomenų lapas į Atmega328p, ruošiant šį straipsnį. Ir ten:

Kaip ir kodėl skaityti duomenų lapus, jei mikrovaldikliai yra jūsų hobis

Tai gana nauja funkcija, jos nebuvo Atmega8, ne visi apie tai žino arba nėra paminėta dėl atgalinio suderinamumo. Bet tai visai tinka pademonstruoti mintį, kad duomenų lapus verta perskaityti, norint išnaudoti visas lusto galimybes, įskaitant ir mažai žinomas. Ir tai ne vienintelė priežastis.

Kodėl dar skaityti duomenų lapus?

Paprastai Arduino inžinieriai, pakankamai pažaidę su LED ir AnalogWrites, prie plokštės pradeda jungti visokius modulius ir lustus, kuriems jau yra parašytos bibliotekos. Anksčiau ar vėliau atsiranda biblioteka, kuri neveikia taip, kaip turėtų. Tada mėgėjas ima spėlioti, kad sutvarkytų, o tada...

Ir ten atsitinka kažkas visiškai nesuprantamo, todėl jūs turite eiti į „Google“, perskaityti daugybę vadovėlių, ištraukti kieno nors tinkamo kodo dalis ir pagaliau pasiekti savo tikslą. Tai suteikia galingo pasiekimo jausmą, tačiau iš tikrųjų šis procesas yra tarsi dviračio išradimas iš naujo sukonstruojant motociklą. Be to, supratimas, kaip veikia šis dviratis, nepadidėja. Žinau, nes pats tai dariau gana ilgą laiką.

Jei vietoj šios įdomios veiklos būčiau praleidęs kelias dienas studijuodamas Atmega328 dokumentaciją, būčiau sutaupęs daug laiko. Juk tai gana paprastas mikrovaldiklis.

Taigi, jums reikia bent jau perskaityti duomenų lapus, kad įsivaizduotumėte, kaip paprastai veikia mikrovaldiklis ir ką jis gali padaryti. Ir toliau:

  • patikrinti ir optimizuoti kitų žmonių bibliotekas. Jas dažnai rašo tie patys mėgėjai, kurie išradinėja dviratį; arba, priešingai, autoriai tyčia daro juos pernelyg patikimus. Tegul jis bus tris kartus didesnis ir lėtesnis, bet jis tikrai veiks;

  • mokėti naudoti mikroschemas projekte, kuriam niekas neparašė bibliotekos;

  • kad galėtumėte lengviau pereiti iš vienos MK linijos į kitą;

  • pagaliau optimizuoti savo seną kodą, kuris netilpo į Arduino;

  • išmokti valdyti bet kurį lustą tiesiogiai per jo registrus, nesivarginant tiriant jo bibliotekų, jei tokių yra, struktūros.

Kam rašyti tiesiai į registrus, kai yra HAL ir LL?

Žodynėlis
HAL, didelės abstrakcijos sluoksnis – biblioteka, skirta valdyti mikrovaldiklį su dideliu abstrakcijos lygiu. Jei reikia naudoti SPI1 sąsają, tiesiog sukonfigūruokite ir įjunkite SPI1 negalvodami, kurie registrai už ką atsakingi.
LL, žemo lygio API – biblioteka, kurioje yra makrokomandos ar struktūros su registrų adresais, leidžianti prieiti prie jų pagal pavadinimą. DDRx, PORTx, PINx ant Atmega yra LL.

Ginčai tema „HAL, LL arba registrai“ nuolat kyla komentaruose apie Habré. Nepretenduodamas į prieigą prie astralinių žinių, aš tiesiog pasidalinsiu savo mėgėjiška patirtimi ir mintimis.

Daugiau ar mažiau išsiaiškinęs Atmega ir perskaitęs straipsnius apie STM32 nuostabumą, nusipirkau pusšimtį skirtingų plokščių - ir Discovery, ir Blue Pills, ir net tik traškučius savo naminiams gaminiams. Visi jie dvejus metus rinko dulkes į dėžę. Kartais sakydavau sau: „Štai, nuo šio savaitgalio aš įvaldysiu STM“, paleido „CubeMX“, sugeneravo SPI sąranką, pažiūrėjau į gautą teksto sieną, dosniai pagardintą STM autorių teisėmis, ir nusprendžiau, kad taip yra. daug.

Kaip ir kodėl skaityti duomenų lapus, jei mikrovaldikliai yra jūsų hobis

Žinoma, galite išsiaiškinti, ką CubeMX parašė čia. Bet kartu aišku, kad prisiminti visas formuluotes ir paskui jas parašyti ranka yra nerealu. Ir norint tai derinti, jei netyčia pamirštu pažymėti langelį kube, tai visiškai gerai.

Praėjo dveji metai, tebelaižau lūpas ST MCU ieškiklis už visokius skanius, bet ne mano supratimu traškučius, ir netyčia pasitaikė nuostabus straipsnis, nors apie STM8. IR staiga Supratau, kad visą tą laiką beldžiausi į atviras duris: STM registrai išdėstyti taip pat, kaip ir bet kurio kito MK, ir Cube su jais dirbti nebūtina. Ar net buvo įmanoma?..

HAL ir konkrečiai STM32CubeMX yra įrankis profesionaliems inžinieriams, kurie glaudžiai dirba su STM32 lustais. Pagrindinis bruožas yra aukštas abstrakcijos lygis, galimybė greitai migruoti iš vieno MCU į kitą ir net iš vienos šerdies į kitą, išlaikant STM32 liniją. Mėgėjai retai susiduria su tokiomis problemomis - mūsų mikrovaldiklių pasirinkimas, kaip taisyklė, apsiriboja AliExpress asortimentu, o mes dažnai migruojame tarp kardinaliai skirtingų lustų - pereiname nuo Atmega prie STM, iš STM prie ESP ar bet kokio naujo dalyko, kurį sutinka mūsų draugai kinai. mesti į mus. HAL čia nepadės, o jo studijavimas suvalgys daug laiko.

LL lieka - bet nuo jos iki registrų yra pusė žingsnio. Asmeniškai man naudinga rašyti savo makrokomandas su registrų adresais: atidžiau studijuoju duomenų lapą, galvoju, ko man reikės ateityje, o ko tikrai ne, geriau struktūrizuoju savo programas, o apskritai įveikimas padeda įsiminti .

Be to, su populiariuoju STM32F103 yra niuansas – jam yra dvi nesuderinamos LL versijos, viena oficiali iš STM, antra iš Leaf Labs, naudojama STM32duino projekte. Jei rašote atvirojo kodo biblioteką (o aš turėjau būtent tokia užduotis), turite sukurti dvi versijas arba tiesiogiai pasiekti registrus.

Galiausiai, LL pašalinimas, mano nuomone, supaprastina migraciją, ypač jei tai planuojate nuo pat projekto pradžios. Perdėtas pavyzdys: parašykime Arduino blink „Atmel Studio“ be LL:

#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++);
    } 
}

Kad šis kodas mirksėtų šviesos diodu Kinijos plokštėje su STM8 (iš ST Visual Desktop), pakanka pakeisti du adresus:

#define DDR_B 0x5007
#define OUT_B 0x5005

Taip, aš naudoju LED prijungimo prie konkrečios plokštės funkciją, jis mirksės labai lėtai, bet taip atsitiks!

Kokių tipų duomenų lapai yra?

Straipsniuose ir forumuose, tiek rusiškai, tiek angliškai, „duomenų lapai“ reiškia bet kokią techninę lustų dokumentaciją, ir aš darau tą patį šiame tekste. Formaliai jie yra tik vienas iš tokių dokumentų tipų:

Duomenų lapas – Veiklos charakteristikos, taktinės ir techninės charakteristikos. Privaloma bet kokiam elektroniniam komponentui. Fono informaciją naudinga turėti po ranka, tačiau joje nėra daug ką apgalvotai skaityti. Tačiau paprastesni lustai dažnai apsiriboja duomenų lapu, kad nebūtų gaminami nereikalingi dokumentai; tokiu atveju Žinynas yra įtrauktas čia.

Žinynas – pačios instrukcijos, sveika 1000+ puslapių knyga. Išsamiai aprašytas visko, kas sugrūsta į lustą, darbas. Pagrindinis mikrovaldiklio įsisavinimo dokumentas. Skirtingai nei Duomenų lapas, instrukcijos parašytos įvairiems MK; jose yra daug informacijos apie išorinius įrenginius, kurių nėra jūsų konkrečiame modelyje.

Programavimo vadovas arba Instrukcijų rinkinio vadovas – unikalių mikrovaldiklio komandų instrukcijos. Sukurta tiems, kurie programuoja asamblėjos kalba. Kompiliatorių autoriai aktyviai naudoja jį kodui optimizuoti, todėl paprastai mums jo neprireiks. Tačiau žiūrėti čia naudinga norint suprasti bendrą supratimą, kai kurias konkrečias komandas, pvz., išeiti iš pertraukimo, taip pat aktyviai naudoti derinimo priemonę.

Taikymo pastaba – naudingi patarimai sprendžiant konkrečias problemas, dažnai su kodų pavyzdžiais.

Klaidų lapas – nestandartinio lusto veikimo atvejų aprašymas su sprendimo galimybėmis, jei tokių yra.

Kas yra duomenų lapuose

Tiesiogiai į Duomenų lapas mums gali prireikti šių skyrių:

Įrenginio suvestinė – pirmame duomenų lapo puslapyje trumpai aprašomas įrenginys. Labai praverčia situacijose, kai kur nors radote mikroschemą (pamačiusi parduotuvėje, užlitavus, užmačiusi paminėjimą) ir norite suprasti, kas tai yra.

Bendras aprašymas – išsamesnis lustų iš linijos galimybių aprašymas.

Pinouts – visų galimų lustų paketų smeigtukų schemos (kuris kaištis ant kurios kojos).

Smeigtuko aprašymas – kiekvieno kaiščio paskirties ir galimybių aprašymas.

atminties Žemėlapis – vargu ar mums prireiks adresų žemėlapio atmintyje, bet kartais jame yra ir registrų blokų adresų lentelė.

Registruotis Žemėlapis – registrų blokų adresų lentelė, kaip taisyklė, yra duomenų lape, o Žr. vadovą – tik pamainos (adresų kompensacijos).

Elektrinės charakteristikos – šiame skyriuje mus pirmiausia domina Absoliučiai maksimalus įvertinimas, kuriame nurodomos didžiausios lusto apkrovos. Skirtingai nei nesunaikinamas Atmega328p, dauguma MK neleidžia prie kaiščių prijungti rimtų apkrovų, o tai tampa nemalonia staigmena arduinistams.

Informacija apie pakuotę – turimų dėklų brėžiniai, naudingi kuriant savo lentas.

Žinynas struktūriškai susideda iš skyrių, skirtų konkretiems periferiniams įrenginiams, nurodytiems jų pavadinime. Kiekvieną skyrių galima suskirstyti į tris dalis:

Apžvalga, Įvadas, Savybės – periferinių galimybių apžvalga;

Funkcijų aprašymas, Naudojimo vadovas arba tiesiog pagrindinis skyriaus blokas – išsamus tekstinis periferinio įrenginio veikimo principų ir naudojimosi aprašymas;

Registrų – kontrolės registrų aprašymas. Paprastais atvejais, pvz., GPIO ar SPI, to gali pakakti norint pradėti naudoti periferinius įrenginius, tačiau dažnai vis tiek tenka perskaityti ankstesnes dalis.

Kaip skaityti duomenų lapus

Duomenų lapai iš įpročio gąsdina savo apimtimi ir nesuprantamų žodžių gausa. Tiesą sakant, viskas nėra taip baisu, jei žinote keletą gyvenimo hackų.

Nustatyti geras PDF skaitytuvas. Duomenų lapai parašyti pagal šlovingą popierinių instrukcijų tradiciją, puikiai tinka atsispausdinti, įterpti plastikinėmis žymelėmis ir siūti. Hipertekstas juose pastebimas nedideliais kiekiais. Laimei, bent jau dokumento struktūra sukurta su žymėmis, todėl tinkamas skaitytuvas su lengva naršymu yra labai reikalingas.

Duomenų lapas nėra Stroustrup vadovėlis; jame yra nereikia visko skaityti. Jei pasinaudojote ankstesniu patarimu, tiesiog raskite norimą skyrių žymių juostoje.

Duomenų lapai, ypač Nuorodų vadovai, gali apibūdinti ne konkretaus lusto galimybes, o visa linija. Tai reiškia, kad pusė ar net du trečdaliai informacijos nėra susijusi su jūsų lustu. Prieš pradėdami studijuoti TIM7 registrus, užsiregistruokite Bendras aprašymas, ar tu turi tai?

Žinoti Anglų užtenka Pagrindinis lygis. Duomenų lapus sudaro pusė terminų, nepažįstamų vidutiniam gimtakalbiui, ir pusė paprastų jungiamųjų struktūrų. Taip pat yra puikių kinų duomenų lapų kinų anglų kalba, kur pusė taip pat yra terminai, o antroji pusė yra atsitiktinis žodžių rinkinys.

Jei susitiksite nepažįstamas žodis, nebandykite jo išversti naudodami anglų-rusų žodyną. Jei esate sumišęs histerezė, tada vertimas „histerezė“ nesušildys. Naudokite Google, Stack Overflow, Wikipedia, forumus, kur bus reikalinga koncepcija paaiškinta paprastais žodžiais su pavyzdžiais.

Geriausias būdas suprasti, ką skaitote, yra patikrinkite veiksmą. Todėl laikykite po ranka derinimo lentą, su kuria susipažinote, arba dar geriau – dvi, jei vis tiek ką nors nesupratote ir pamatėte stebuklingus dūmus.

Tai geras įprotis turėti savo duomenų lapą po ranka skaitant kažkieno pamoką arba studijuoti kažkieno biblioteką. Visai gali būti, kad jame rasite optimalesnį savo problemos sprendimą. Ir atvirkščiai – jei iš duomenų lapo nesuprantate, kaip iš tikrųjų veikia registras, paieškokite „Google“: greičiausiai kažkas jau viską aprašė paprastais žodžiais arba paliko aiškų kodą „GitHub“.

Žodynėlis

Keletas naudingų žodžių ir simbolių, padėsiančių greitai priprasti prie duomenų lapų. Ką prisiminiau per pastarąsias kelias dienas, laukiami papildymai ir pataisymai.

elektra
VCC, Tiesa – „pliusas“, maistas
Vss, vee – „minusas“, žemė
dabartinis – srovė
įtampa - Įtampa
nuskandinti srovę – dirbti kaip „žemė“ išorinei apkrovai
gauti srovę - galia išorinė apkrova
aukštos kriauklės / šaltinio kaištis – kaištis su padidinta apkrovos „tolerancija“.

IO
H, aukštas – ant Vcc kaiščio
L, žemas – ant Vss kaiščio
Didelė varža, Sveiki-Z, plūduriuojantis – ant kaiščio nieko nėra, „didelis pasipriešinimas“, jis praktiškai nematomas išoriniam pasauliui.
silpnas prisitraukimas, silpnas traukimas žemyn – įmontuotas pakėlimo/nuleidimo rezistorius, maždaug atitinkantis 50 kOhm (žr. duomenų lapą). Jis naudojamas, pavyzdžiui, norint, kad įvesties kaištis nekabėtų ore ir nesukeltų klaidingų aliarmų. Silpnas - nes jį lengva „pertraukti“.
stumti traukti – kaiščio išvesties režimas, kuriame persijungia aukštas и žemas - įprastas „Arduino“ išėjimas.
atidaryti kanalizaciją – išvesties režimo, kuriame gali būti kaištis, žymėjimas žemasArba Didelė varža / plūduriuojantis. Be to, beveik visada tai nėra „tikras“ atviras nutekėjimas; yra apsauginiai diodai, rezistoriai ir dar daugiau. Tai tiesiog įžeminimo / jokio režimo žymėjimas.
tikras atviras kanalizacija - bet tai tikras atviras kanalizacija: kaištis veda tiesiai į žemę, jei jis atidarytas, arba lieka nežinioje, jei jis uždarytas. Tai reiškia, kad prireikus per jį galima praleisti didesnę nei Vcc įtampą, tačiau maksimali vis tiek nurodyta duomenų lape skyriuje Absoliuti maksimali įtampa / įtampa.

Sąsajos
nuosekliai – sujungti nuosekliai
grandine – surinkti lustus į grandinę naudojant nuoseklųjį ryšį, padidinant išėjimų skaičių.
perkelti – poslinkis, dažniausiai reiškia šiek tiek poslinkį. Atitinkamai, persijungti и pasistumti – priimti ir perduoti duomenis po bitų.
velkė – skląstis, uždengiantis buferį, kai per jį perkeliami bitai. Kai perkėlimas baigtas, vožtuvas atsidaro ir antgaliai pradeda veikti.
įsijungti – atlikti bitų perkėlimą, perkelti visus bitus į reikiamas vietas.
dvigubas buferis, šešėlių registras, išankstinio įkėlimo registras – istorijos žymėjimai, kai registras turi priimti naujus duomenis, tačiau juos išlaikyti iki tam tikro momento. Pavyzdžiui, kad PWM veiktų tinkamai, jo parametrai (darbo ciklas, dažnis) neturėtų keistis iki esamo ciklo pabaigos, tačiau jau galima perkelti naujus parametrus. Atitinkamai, dabartiniai yra laikomi šešėlių registras, ir patenka naujų išankstinio įkėlimo registras, įrašomas į atitinkamą lustų registrą.

Visokiausių dalykų
pirminis skaleris – dažnio pirminis skaleris
šiek tiek nustatyti – nustatykite bitą į 1
šiek tiek išvalyti/atstatyti – atstatyti bitą į 0 (iš naujo – STM duomenų lapo funkcija)

Kas toliau?

Apskritai čia buvo suplanuota praktinė dalis su trijų STM32 ir STM8 projektų demonstravimu, sukurtų specialiai šiam straipsniui naudojant duomenų lapus, su lemputėmis, SPI, laikmačiais, PWM ir pertraukimais:

Kaip ir kodėl skaityti duomenų lapus, jei mikrovaldikliai yra jūsų hobis

Bet teksto daug, tad projektai siunčiami į antrąją dalį.

Duomenų lapų skaitymo įgūdžiai jums padės jūsų pomėgiuose, tačiau vargu ar tai pakeis gyvą bendravimą su kitais mėgėjais forumuose ir pokalbiuose. Šiuo tikslu vis tiek pirmiausia turite patobulinti anglų kalbą. Todėl tie, kurie baigė skaityti, gaus specialų prizą: dvi nemokamas Skyeng pamokas su pirmu mokėjimu naudojant kodą HABR2.

Šaltinis: www.habr.com

Добавить комментарий