Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on sinu hobi

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on sinu hobi

Mikroelektroonika on tänu maagilisele Arduinole viimaste aastate moes hobi. Kuid siin on probleem: piisava huvi korral saate DigitalWrite()-st kiiresti välja kasvada, kuid mida edasi teha, pole päris selge. Arduino arendajad on näinud palju vaeva, et vähendada oma ökosüsteemi sisenemise barjääri, kuid väljaspool seda on endiselt karmide vooluringide tume mets, mis on amatöörile kättesaamatu.

Näiteks andmelehed. Tundub, et neil on kõik olemas, võtke ja kasutage. Kuid selgelt ei sea nende autorid endale ülesandeks mikrokontrollereid populariseerida; Mõnikord tundubet nad kuritarvitavad lihtsate asjade kirjeldamisel teadlikult arusaamatuid termineid ja lühendeid, et asjatundmatut võimalikult segadusse ajada. Kuid kõik pole nii hull, soovi korral kirst avaneb.

Selles artiklis jagan humanitaarspetsialisti kogemusi, kes suhtlevad hobieesmärkidel andmelehtedega. Tekst on mõeldud Arduino pükstest üles kasvanud amatööridele, eeldab mõningast arusaamist mikrokontrollerite tööpõhimõtetest.

Alustan traditsioonilisest

LED-tule vilkumine Arduinol

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 te midagi PINB sisendregistrisse kirjutate? See on ainult lugemiseks!” Tõesti, Arduino dokumentatsioon, nagu enamik Internetis leiduvaid harivaid artikleid, väidab, et see register on kirjutuskaitstud. Ma ise arvasin nii, kuni selle uuesti läbi lugesin andmeleht Atmega328p-le, valmistades ette seda artiklit. Ja seal:

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on sinu hobi

See on suhteliselt uus funktsioon, seda Atmega8-l polnud, kõik ei tea sellest või ei mainita tagasiühilduvuse tõttu. Kuid see on üsna sobiv idee demonstreerimiseks, et andmelehti tasub lugeda, et kasutada kiibi kõiki võimalusi, sealhulgas vähetuntud. Ja see pole ainus põhjus.

Miks muidu lugeda andmelehti?

Tavaliselt hakkavad Arduino insenerid, olles piisavalt LED-ide ja AnalogWritesidega mänginud, plaadiga ühendama kõikvõimalikke mooduleid ja kiipe, mille jaoks on juba kirjalikud teegid. Varem või hiljem ilmub raamatukogu, mis ei tööta nii nagu peaks. Siis hakkab amatöör seda näppima, et seda parandada, ja siis...

Ja seal juhtub midagi täiesti arusaamatut, nii et peate minema Google'isse, lugema palju õpetusi, tõmbama välja kellegi sobiva koodi osad ja lõpuks saavutama oma eesmärgi. See annab võimsa saavutustunde, kuid tegelikult on protsess nagu ratta taasleiutamine mootorratta pöördprojekteerimise teel. Pealegi ei suurene arusaam selle ratta tööpõhimõtetest. Ma tean, sest ma tegin seda ise üsna pikka aega.

Kui selle põneva tegevuse asemel oleksin paar päeva Atmega328 dokumentatsiooni uurinud, oleksin säästnud tohutult aega. Lõppude lõpuks on see üsna lihtne mikrokontroller.

Seega peate lugema andmelehti vähemalt selleks, et kujutada ette, kuidas mikrokontroller üldiselt töötab ja mida see suudab. Ja edasi:

  • teiste inimeste raamatukogude kontrollimiseks ja optimeerimiseks. Neid kirjutavad sageli samad amatöörid, kes leiutavad ratta uuesti; või vastupidi, autorid teevad need meelega ülemäära lollikindlaks. Olgu see kolm korda suurem ja aeglasem, kuid see toimib kindlasti;

  • osata kasutada kiipe projektis, mille jaoks pole keegi raamatukogu kirjutanud;

  • et endal oleks lihtsam ühelt MK-liinilt teisele migreeruda;

  • et lõpuks optimeerida oma vana kood, mis Arduinosse ei mahtunud;

  • õppida, kuidas juhtida mis tahes kiipi otse selle registrite kaudu, ilma et peaksite nägema vaeva selle raamatukogude struktuuri uurimisega, kui neid on.

Miks kirjutada otse registritesse, kui on HAL ja LL?

Sõnastik
HAL, kõrge abstraktsiooniga kiht – raamatukogu kõrge abstraktsioonitasemega mikrokontrolleri juhtimiseks. Kui teil on vaja kasutada SPI1 liidest, siis lihtsalt konfigureerige ja lubage SPI1, mõtlemata sellele, millised registrid mille eest vastutavad.
LL, madala taseme API – registri aadressidega makrosid või struktuure sisaldav teek, mis võimaldab neile nime järgi juurde pääseda. Atmega DDRx, PORTx, PINx on LL.

Habré kommentaarides esineb regulaarselt vaidlusi teemal “HAL, LL või registrid”. Astraalteadmistele ligipääsu pretendeerimata jagan lihtsalt oma amatöörkogemust ja mõtteid.

Olles Atmega enam-vähem selgeks saanud ja lugenud artikleid STM32 imelisusest, ostsin pool tosinat erinevat tahvlit - Discovery ja Blue Pills ning isegi omatehtud toodete jaoks lihtsalt krõpse. Kõik nad kogusid kaks aastat tolmu kasti. Mõnikord ütlesin endale: "See on kõik, ma õpin sel nädalavahetusel STM-i," käivitas CubeMX, genereeris SPI seadistuse, vaatas saadud tekstiseina, mis oli rikkalikult maitsestatud STM-i autoriõigustega ja otsustas, et see on kuidagi liiga palju. .

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on sinu hobi

Muidugi saate aru, mida CubeMX siin kirjutas. Aga samas on selge, et kogu sõnastuse meeldejätmine ja seejärel käsitsi kirjutamine on ebareaalne. Ja selle silumiseks, kui ma kogemata unustan kuubis mõne ruudu märkida, on see täiesti hea.

Kaks aastat on möödas, lakun endiselt huuli ST MCU otsija igasuguste maitsvate, aga minu arusaamist mööda krõpsude ja kogemata sattusin imeline artikkel, kuigi STM8 kohta. JA äkki Sain aru, et olen kogu selle aja lahtisele uksele koputanud: STM-i registrid on paigutatud samamoodi nagu iga teise MK omad ja Kuubik pole nendega töötamiseks vajalik. Kas see oli üldse võimalik? ..

HAL ja täpsemalt STM32CubeMX on tööriist professionaalsetele inseneridele, kes teevad tihedat koostööd STM32 kiipidega. Peamine omadus on kõrge abstraktsioonitase, võimalus kiiresti migreeruda ühelt MCU-lt teisele ja isegi ühest tuumast teise, jäädes samal ajal STM32 liini piiresse. Harrastajad puutuvad selliste probleemidega harva kokku – meie mikrokontrollerite valik piirdub reeglina AliExpressi sortimendiga ja me liigume sageli radikaalselt erinevate kiipide vahel – liigume Atmegalt STM-ile, STM-ilt ESP-le või mis iganes uuele asjale, mida meie Hiina sõbrad pakuvad. viska meie poole. HAL siin ei aita ja selle õppimine sööb palju aega.

LL jääb alles - aga sellest registriteni on pool sammu. Isiklikult pean oma makrode kirjutamist registri aadressidega kasulikuks: uurin andmelehte hoolikamalt, mõtlen, mida mul tulevikus vaja läheb ja mida kindlasti mitte, struktureerin oma programme paremini ja üldiselt aitab ületamine meelde jätta. .

Lisaks on populaarsel STM32F103-l nüanss - selle jaoks on kaks mitteühilduvat LL-versiooni, üks ametnik STM-ist, teine ​​Leaf Labsist, mida kasutatakse STM32duino projektis. Kui kirjutate avatud lähtekoodiga teeki (ja mul oli täpselt selline ülesanne), peate kas tegema kaks versiooni või pääsema registritele otse juurde.

Lõpuks lihtsustab LL-i kõrvaldamine minu arvates migratsiooni, eriti kui plaanite seda juba projekti algusest peale. Liialdatud näide: kirjutame Atmel Studios ilma LL-ita Arduino blink:

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

Selleks, et see kood vilguks STM8-ga Hiina tahvlil LED-i (ST Visual Desktopist), piisab kahe aadressi muutmisest selles:

#define DDR_B 0x5007
#define OUT_B 0x5005

Jah, ma kasutan LED-i ühendamise funktsiooni konkreetsel plaadil, see vilgub väga aeglaselt, kuid see juhtub!

Mis tüüpi andmelehti on olemas?

Artiklites ja foorumites, nii vene kui ka inglise keeles, tähendavad "andmelehed" kiipide tehnilist dokumentatsiooni ja ma teen sama selles tekstis. Formaalselt on need vaid üks selliste dokumentide tüüp:

Teabelehe – jõudlusnäitajad, taktikalised ja tehnilised omadused. Kohustuslik mis tahes elektroonilise komponendi jaoks. Taustainfot on kasulik käepärast hoida, aga mõtlikult pole sealt palju lugeda. Lihtsamad kiibid piirduvad aga sageli andmelehega, et mitte toota tarbetuid dokumente; sel juhul Teatmik on siia lisatud.

Teatmik – juhised ise, terve 1000+ leheküljeline raamat. Täpsemalt kirjeldatakse kõige selle tööd, mis kiibile topitakse. Peamine dokument mikrokontrolleri valdamiseks. Erinevalt andmeleht, juhised on kirjutatud paljude MK-de jaoks; need sisaldavad palju teavet välisseadmete kohta, mida teie konkreetses mudelis pole.

Programmeerimisjuhend või Kasutusjuhend – juhised unikaalsete mikrokontrolleri käskude jaoks. Mõeldud neile, kes programmeerivad assembly keeles. Kompilaatorite autorid kasutavad seda aktiivselt koodi optimeerimiseks, nii et üldiselt pole meil seda vaja. Kuid siit vaatamine on kasulik üldise mõistmise, teatud konkreetsete käskude (nt katkestusest väljumise) jaoks, aga ka siluri aktiivseks kasutamiseks.

Rakenduse märkus – kasulikke näpunäiteid konkreetsete probleemide lahendamiseks, sageli koos koodinäidetega.

Vigade leht – kiibi ebastandardse käitumise juhtumite kirjeldus koos lahendusvõimalustega, kui need on olemas.

Mis on andmelehtedel

Otse Teabelehe meil võib olla vaja järgmisi jaotisi:

Seadme kokkuvõte – andmelehe esimesel lehel kirjeldatakse lühidalt seadet. Väga kasulik olukordades, kui leidsid kuskilt kiibi (nägisid seda poes, jootsin, tulid mainimisele) ja tahad aru saada, millega on tegu.

Üldine kirjeldus – liinilt pärit kiipide võimaluste täpsem kirjeldus.

Pinouts – kõigi võimalike kiibipakkide väljatõmbeskeemid (milline tihvt millise jala küljes on).

PIN-koodi kirjeldus – iga tihvti eesmärgi ja võimaluste kirjeldus.

Mälu kaart – meil pole tõenäoliselt aadressikaarti mälus vaja, kuid mõnikord sisaldab see ka registriplokkide aadresside tabelit.

Registreeri kaart – registriplokkide aadresside tabel asub reeglina andmelehel ja sees Ref Manual – ainult vahetused (aadressi nihked).

Elektrilised omadused – see jaotis huvitab meid eelkõige absoluutsed maksimumhinnangud, kus on loetletud maksimaalsed koormused kiibi kohta. Erinevalt hävimatust Atmega328p-st ei võimalda enamik MK-sid tihvtidega tõsiseid koormusi ühendada, mis muutub arduinistide jaoks ebameeldivaks üllatuseks.

Pakendi teave - saadaolevate korpuste joonised, mis on kasulikud plaatide kujundamisel.

Teatmik koosneb ülesehituselt osadest, mis on pühendatud nende pealkirjas märgitud konkreetsetele välisseadmetele. Iga peatüki võib jagada kolmeks osaks:

Ülevaade, Sissejuhatus, FUNKTSIOONID – ülevaade välisseadmete võimalustest;

Töökirjeldus, Kasutusjuhend või lihtsalt jaotise põhiplokk - välisseadme põhimõtete ja selle kasutamise üksikasjalik tekstikirjeldus;

Registrid – kontrolliregistrite kirjeldus. Lihtsatel juhtudel, nagu GPIO või SPI, võib sellest täiesti piisata, et hakata välisseadmeid kasutama, kuid sageli tuleb siiski eelnevad osad läbi lugeda.

Kuidas andmelehti lugeda

Andmelehed hirmutavad teid harjumusest oma mahu ja arusaamatute sõnade rohkusega. Tegelikult pole kõik nii hirmutav, kui tead mõnda eluhäkki.

Komplekt hea PDF-lugeja. Andmelehed on kirjutatud paberjuhiste kuulsusrikka traditsiooni järgi, neid on suurepärane printida, plastikust järjehoidjatega sisestada ja õmmelda. Hüperteksti nendes täheldatakse jälgedes. Õnneks on vähemalt dokumendi struktuur kujundatud järjehoidjatega, seega on sobiv hõlpsasti navigeeritav lugeja väga vajalik.

Andmeleht ei ole Stroustrupi õpik; see sisaldab pole vaja kõike lugeda. Kui kasutasite eelmist nõuannet, leidke järjehoidjaribalt soovitud jaotis.

Andmelehed, eriti Teatmeteosed, suudab kirjeldada mitte konkreetse kiibi võimalusi, vaid kogu rida. See tähendab, et pool või isegi kaks kolmandikku teabest ei ole teie kiibi jaoks asjakohane. Enne TIM7 registrite uurimist registreeruge Üldine kirjeldus, kas sul on see olemas?

Teada Inglise piisav selleks algtase. Andmelehed koosnevad pooled terminitest, mis on keskmisele emakeelekõnelejale võõrad, ja pooled lihtsatest ühendavatest struktuuridest. Samuti on suurepärased hiina inglisekeelsed andmelehed, kus pooled on samuti terminid ja teine ​​pool on juhuslik sõnade komplekt.

Kui kohtute võõras sõna, ärge proovige seda inglise-vene sõnaraamatu abil tõlkida. Kui olete segaduses hüsterees, siis tõlge “hüsterees” ei tee sind soojaks. Kasutage Google'it, Stack Overflow't, Wikipediat, foorumeid, kus on vajalik kontseptsioon selgitatud lihtsate sõnadega koos näidetega.

Parim viis loetu mõistmiseks on kontrollige tegevuses. Seetõttu hoidke käepärast silumisplaat, millega tutvute, või veel parem kaks, juhuks, kui saite ikkagi millestki valesti aru ja nägite võlusuitsu.

Hea harjumus on hoida oma andmelehte alati käepärast kellegi õpetuse lugemine või kellegi teise raamatukogu uurimine. On täiesti võimalik, et leiate sellest oma probleemile optimaalsema lahenduse. Ja vastupidi – kui te ei saa andmelehest aru, kuidas register tegelikult töötab, googeldage seda: tõenäoliselt on keegi juba kõike lihtsate sõnadega kirjeldanud või GitHubi selge koodi jätnud.

Sõnastik

Mõned kasulikud sõnad ja sümbolid, mis aitavad teil andmelehtedega kiiresti harjuda. Mis paaril viimasel päeval meelde jäi, täiendused ja parandused on teretulnud.

elekter
VDC, Tõsi - "pluss", toit
Vss, Vee - "miinus", maa
praegune - praegune
pinge - Pinge
voolu uputama – töötada väliskoormuse "maapinnana".
voolu hankimiseks - välise koormuse võimsus
kõrge valamu/allika tihvt – tihvt, millel on suurendatud koormustaluvus

IO
H, kõrge – Vcc tihvtil
L, madal – Vss-tihvtil
Kõrge takistus, Tere-Z, ujuv – tihvtil pole midagi, “suur takistus”, see on välismaailmale praktiliselt nähtamatu.
nõrk tõmbamine, nõrk alla tõmbamine – sisseehitatud üles-/allatõmbetakisti, mis vastab ligikaudu 50 kOhmile (vt andmelehte). Seda kasutatakse näiteks selleks, et vältida sisendviigu õhus rippumist, põhjustades valehäireid. nõrk - sest teda on lihtne "katkestada".
suru tõmme – kontakti väljundrežiim, mille vahel lülitub Suur и Madal - tavaline VÄLJUND Arduinost.
avatud äravool – väljundrežiimi tähistus, milles kontakt võib olla ükskõik kumb MadalVõi Kõrge takistus/ujuv. Pealegi pole see peaaegu alati "tõeline" avatud äravool; seal on kaitsedioodid, takistid ja mis muud. See on lihtsalt maapealse/mitteva režiimi tähistus.
tõeline avatud äravool - kuid see on tõeline lahtine äravool: tihvt viib otse maapinnale, kui see on avatud, või jääb teadmata, kui see on suletud. See tähendab, et vajadusel saab sealt läbi lasta Vcc-st suuremat pinget, kuid maksimum on siiski märgitud andmelehel jaotises Absoluutsed maksimaalsed nimiväärtused/pinge.

Liidesed
järjestikku – ühendatud järjestikku
aheldada – ühendage kiibid jadaühenduse abil ketti, suurendades väljundite arvu.
suunata – nihe, tähistab tavaliselt natuke nihet. vastavalt sisse nihkuma и välja nihutama – saada ja edastada andmeid bittide kaupa.
riiv – riiv, mis katab puhvri, kui bitte nihutatakse läbi selle. Kui ülekanne on lõppenud, avaneb klapp ja bitid hakkavad tööle.
sisse panema – teostada biti haaval ülekanne, nihutada kõik bitid õigetesse kohtadesse.
topeltpuhver, varjuregister, eellaadimise register – ajaloo tähistused, mil register peab suutma uusi andmeid vastu võtta, kuid neid kuni teatud hetkeni hoidma. Näiteks selleks, et PWM töötaks õigesti, ei tohiks selle parameetrid (töötsükkel, sagedus) muutuda enne, kui praegune tsükkel on lõppenud, kuid uusi parameetreid saab juba üle kanda. Vastavalt hoitakse praeguseid juures varjuregister, ja sinna satuvad uued eellaadimise register, kirjutades vastavasse kiibiregistrisse.

Igasuguseid asju
eelskaalaja – sageduse eelskaalaja
natuke sättida – seadke bitt väärtusele 1
natuke tühjendada/lähtestada - lähtestage bitt 0-le (reset - STM-i andmelehe funktsioon)

mis edasi

Üldiselt oli siin kavandatud praktiline osa kolme STM32 ja STM8 projekti demonstreerimisega, mis on spetsiaalselt selle artikli jaoks tehtud andmelehtede abil koos lambipirnide, SPI, taimerite, PWM ja katkestustega:

Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on sinu hobi

Aga teksti on palju, nii et projektid saadetakse teise osasse.

Andmelehtede lugemise oskus aitab teid teie hobiga tegelemisel, kuid tõenäoliselt ei asenda see reaalajas suhtlust kaashobistidega foorumites ja vestlustes. Selleks tuleb ikkagi ennekõike oma inglise keelt parandada. Seetõttu saavad lugemise lõpetajad eriauhinna: kaks tasuta õppetundi Skyengis esimese sissemaksega koodi abil HABR2.

Allikas: www.habr.com

Lisa kommentaar