Kako i zašto čitati tablice podataka ako su vam mikrokontroleri hobi

Kako i zašto čitati tablice podataka ako su vam mikrokontroleri hobi

Mikroelektronika je modni hobi posljednjih godina zahvaljujući čarobnom Arduinu. Ali evo problema: uz dovoljno interesovanja, možete brzo prerasti DigitalWrite(), ali nije sasvim jasno šta dalje. Arduino programeri su uložili mnogo truda da smanje barijeru za ulazak u svoj ekosistem, ali izvan njega još uvijek postoji mračna šuma grubih kola koja je nedostupna amaterima.

Na primjer, listovi sa podacima. Čini se da imaju sve, uzmite i koristite. Ali njihovi autori očigledno sebi ne postavljaju zadatak popularizacije mikrokontrolera; Ponekad čini seda namjerno zloupotrebljavaju nerazumljive termine i skraćenice kada opisuju jednostavne stvari kako bi što više zbunili neupućene. Ali nije sve tako loše, po želji se kovčeg otvara.

U ovom članku ću podijeliti iskustvo stručnjaka za humanističke nauke koji komunicira s tablicama podataka u svrhu hobija. Tekst je namijenjen amaterima koji su odrasli iz Arduino pantalona, ​​pretpostavlja razumijevanje principa rada mikrokontrolera.

Počeću sa tradicionalnim

Treperi LED na Arduinu

I odmah kod:

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

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

"Šta je ovo? – pitaće sofisticirani čitalac. – Zašto nešto upisujete u PINB ulazni registar? To je samo za čitanje!” stvarno, Arduino dokumentacija, kao i većina obrazovnih članaka na internetu, navodi da je ovaj registar samo za čitanje. I sam sam tako mislio dok ga nisam ponovo pročitao list sa podacima na Atmega328p, pripremajući ovaj članak. A tu:

Kako i zašto čitati tablice podataka ako su vam mikrokontroleri hobi

Ovo je relativno nova funkcionalnost, nije bila na Atmega8, ne znaju svi za nju ili se ne spominje iz razloga kompatibilnosti unatrag. Ali je sasvim prikladan za demonstriranje ideje da je vrijedno čitati tablice podataka kako bi se iskoristile sve mogućnosti čipa, uključujući i one malo poznate. I to nije jedini razlog.

Zašto inače čitati tablice sa podacima?

Obično, Arduino inženjeri, nakon što su se dovoljno poigrali sa LED diodama i AnalogWrites, počinju da povezuju sve vrste modula i čipova na ploču, za koje već postoje napisane biblioteke. Prije ili kasnije, pojavi se biblioteka koja ne radi kako bi trebala. Onda amater krene da ga pipa da ga popravi, a onda...

I tu se događa nešto potpuno neshvatljivo, pa morate otići na Google, pročitati brojne tutorijale, izvući dijelove nečijeg odgovarajućeg koda i konačno postići svoj cilj. Ovo daje snažan osjećaj postignuća, ali u stvarnosti proces je poput ponovnog izuma točka obrnutim inženjeringom motocikla. Štoviše, razumijevanje kako ovaj bicikl funkcionira ne raste. Znam, jer sam to sam radio dosta dugo.

Da sam umjesto ove uzbudljive aktivnosti proveo nekoliko dana proučavajući Atmega328 dokumentaciju, uštedio bih ogromnu količinu vremena. Na kraju krajeva, ovo je prilično jednostavan mikrokontroler.

Dakle, morate pročitati tablice podataka barem da biste zamislili kako mikrokontroler općenito radi i šta može učiniti. I dalje:

  • provjeriti i optimizirati tuđe biblioteke. Često ih pišu isti amateri koji ponovo izmišljaju točak; ili, naprotiv, autori ih namjerno čine pretjerano sigurnim. Neka bude tri puta veća i sporija, ali će sigurno raditi;

  • da mogu koristiti čipove u projektu za koji niko nije napisao biblioteku;

  • da sebi olakšate prelazak sa jedne MK linije na drugu;

  • da konačno optimizirate svoj stari kod, koji se nije uklapao u Arduino;

  • da nauči kako da kontroliše bilo koji čip direktno kroz njegove registre, bez zamaranja proučavanjem strukture njegovih biblioteka, ako ih ima.

Zašto pisati direktno u registre kada postoje HAL i LL?

Rečnik
HAL, sloj visoke apstrakcije – biblioteka za upravljanje mikrokontrolerom sa visokim nivoom apstrakcije. Ako trebate koristiti SPI1 sučelje, jednostavno konfigurirate i omogućite SPI1 bez razmišljanja o tome koji su registri odgovorni za šta.
LL, API niskog nivoa – biblioteka koja sadrži makroe ili strukture sa adresama registra, što vam omogućava da im pristupite po imenu. DDRx, PORTx, PINx na Atmegi su LL.

Sporovi na temu “HAL, LL ili registri” redovno se javljaju u komentarima na Habréu. Bez traženja pristupa astralnom znanju, jednostavno ću podijeliti svoje amatersko iskustvo i razmišljanja.

Manje-više shvativši Atmegu i pročitavši članke o čudesnosti STM32, kupio sam pola tuceta različitih ploča - Discovery, i Blue Pills, pa čak i samo čips za svoje domaće proizvode. Svi su skupljali prašinu u kutiji dvije godine. Ponekad sam sebi rekao: "to je to, od ovog vikenda savladavam STM", pokrenuo CubeMX, generirao postavku za SPI, pogledao rezultujući zid teksta, velikodušno začinjen STM autorskim pravima, i odlučio da je to nekako previše mnogo.

Kako i zašto čitati tablice podataka ako su vam mikrokontroleri hobi

Naravno, možete shvatiti šta je CubeMX napisao ovdje. Ali u isto vrijeme je jasno da je zapamtiti sve riječi, a zatim ih napisati rukom, nerealno. A da ovo otklonim, ako slučajno zaboravim označiti okvir u kocki, to je sasvim u redu.

Prošle su dvije godine, još uvijek oblizujem usne ST MCU Finder za sve vrste ukusnih, ali izvan mog razumijevanja, čipsa i slučajno naišao divan članak, iako o STM8. I odjednom Shvatio sam da sam sve ovo vreme kucao na otvorena vrata: registri STM-a su raspoređeni na isti način kao i kod bilo kog drugog MK-a, a Kocka nije potrebna za rad sa njima. Da li je to uopšte bilo moguće?..

HAL i posebno STM32CubeMX je alat za profesionalne inženjere koji blisko sarađuju sa STM32 čipovima. Glavna karakteristika je visok nivo apstrakcije, mogućnost brzog prelaska sa jednog MCU na drugi, pa čak i sa jednog jezgra na drugo, dok ostaje unutar STM32 linije. Hobisti se rijetko susreću s takvim problemima - naš izbor mikrokontrolera, u pravilu, ograničen je na AliExpress asortiman, a mi često prelazimo između radikalno različitih čipova - prelazimo sa Atmega na STM, sa STM na ESP, ili bilo šta novo od naših kineskih prijatelja baci na nas. HAL tu neće pomoći, a proučavanje će pojesti dosta vremena.

LL ostaje - ali od njega do registara ima pola koraka. Lično, smatram da je pisanje svojih makroa sa adresama registra korisnim: pažljivije proučavam tablicu sa podacima, razmišljam šta će mi trebati u budućnosti, a šta sigurno neću, bolje strukturiram svoje programe i općenito, savladavanje pomaže u pamćenju.

Osim toga, postoji nijansa kod popularnog STM32F103 - postoje dvije nekompatibilne LL verzije za njega, jedna službena iz STM-a, druga iz Leaf Labs-a, koja se koristi u projektu STM32duino. Ako pišete biblioteku otvorenog koda (a ja sam imao upravo to takav zadatak), morate napraviti dvije verzije ili direktno pristupiti registrima.

Konačno, eliminacija LL-a, po mom mišljenju, pojednostavljuje migraciju, posebno ako to planirate od samog početka projekta. Preuveličan primjer: napišimo Arduino blink u Atmel Studiju bez 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++);
    } 
}

Da bi ovaj kod treperio LED diodom na kineskoj ploči sa STM8 (sa ST Visual Desktopa), dovoljno je promijeniti dvije adrese u njoj:

#define DDR_B 0x5007
#define OUT_B 0x5005

Da, koristim funkciju povezivanja LED diode na određenu ploču, treperit će vrlo sporo, ali će se dogoditi!

Koje vrste tablica podataka postoje?

U člancima i na forumima, i na ruskom i na engleskom, „datasheets“ označavaju bilo kakvu tehničku dokumentaciju za čipove, a ja to isto radim u ovom tekstu. Formalno, oni su samo jedna vrsta takve dokumentacije:

Datasheet – Karakteristike performansi, taktičko-tehničke karakteristike. Obavezno za bilo koju elektronsku komponentu. Pozadinske informacije su korisne za držanje pri ruci, ali u njima nema mnogo toga za pažljivo čitanje. Međutim, jednostavniji čipovi su često ograničeni na tablicu podataka kako ne bi proizveli nepotrebne dokumente; u ovom slučaju Referentni priručnik je uključeno ovdje.

Referentni priručnik – sama uputstva, zdrava knjiga od 1000+ stranica. Detaljno je opisan rad svega što je ugurano u čip. Glavni dokument za savladavanje mikrokontrolera. Za razliku od datasheet, upute su napisane za širok raspon MK-ova; sadrže mnogo informacija o periferijama koje nisu dostupne u vašem konkretnom modelu.

Priručnik za programiranje ili Uputstvo za set instrukcija – uputstva za jedinstvene komande mikrokontrolera. Dizajniran za one koji programiraju na asemblerskom jeziku. Autori kompajlera ga aktivno koriste za optimizaciju koda, tako da nam u opštem slučaju neće trebati. Ali gledanje ovdje je korisno za opće razumijevanje, za neke specifične komande kao što je izlazak iz prekida, kao i za aktivno korištenje debuggera.

Napomena o aplikaciji – korisni savjeti za rješavanje specifičnih problema, često s primjerima koda.

Errata Sheet – opis slučajeva nestandardnog ponašanja čipa sa opcijama za zaobilaženje, ako ih ima.

Šta je u podacima

Direktno do Datasheet možda će nam trebati sljedeće sekcije:

Sažetak uređaja – prva stranica lista sa podacima ukratko opisuje uređaj. Vrlo korisno u situacijama kada ste negdje pronašli čip (vidjeli ga u radnji, zalemili, naišli na pominjanje) i želite razumjeti o čemu se radi.

Opći opis – detaljniji opis mogućnosti čipova iz linije.

Pinouts – pinout dijagrami za sve moguće pakete čipova (koji pin se nalazi na kojoj nozi).

Opis pin – opis namjene i mogućnosti svake igle.

Mapa memorije – malo je vjerovatno da će nam trebati mapa adresa u memoriji, ali ponekad uključuje i tablicu adresa blokova registara.

Registrirajte se Karta – tabela adresa blokova registara se po pravilu nalazi u podatkovnom listu i u Ref Manual – samo smjene (pomaci adrese).

Električne karakteristike – u ovoj rubrici nas prvenstveno zanima apsolutne maksimalne ocjene, navodeći maksimalno opterećenje po čipu. Za razliku od neuništivog Atmega328p, većina MK-ova ne dozvoljava vam da povežete ozbiljna opterećenja na pinove, što postaje neugodno iznenađenje za Arduiniste.

Informacije o paketu – crteži dostupnih kućišta, korisni pri dizajniranju vaših ploča.

Referentni priručnik strukturno se sastoji od sekcija posvećenih određenim perifernim uređajima navedenim u njihovom naslovu. Svako poglavlje se može podijeliti u tri dijela:

pregled, Uvod, Značajke – pregled perifernih mogućnosti;

Opis funkcije, Vodič za upotrebu ili jednostavno glavni blok odjeljka - detaljan tekstualni opis principa perifernog uređaja i kako ga koristiti;

Registri – opis kontrolnih registara. U jednostavnim slučajevima kao što su GPIO ili SPI, ovo može biti sasvim dovoljno da počnete koristiti periferne uređaje, ali često ipak morate pročitati prethodne dijelove.

Kako čitati tablice sa podacima

Liste podataka, iz navike, plaše vas svojom količinom i obiljem nerazumljivih riječi. Zapravo, nije sve tako strašno ako znate nekoliko životnih hakova.

Ustanovite dobar čitač PDF-a. Podaci su napisani u slavnoj tradiciji papirnih uputstava; odlični su za štampanje, umetanje plastičnim obeleživačima i šivanje. Hipertekst se u njima opaža u tragovima. Na sreću, barem je struktura dokumenta dizajnirana sa obeleživačima, tako da je odgovarajući čitač sa lakom navigacijom veoma potreban.

Datasheet nije Stroustrupov udžbenik; sadrži nema potrebe čitati sve. Ako ste koristili prethodni savjet, samo pronađite željeni odjeljak na traci sa oznakama.

Datasheets, posebno Referentni priručnici, može opisati mogućnosti ne određenog čipa, već cijelu liniju. To znači da polovina ili čak dvije trećine informacija nije vezano za vaš čip. Prije proučavanja TIM7 registra, provjerite Opći opis, imaš li ga?

Znaj engleski dovoljno za osnovni nivo. Liste podataka se sastoje polovinu od pojmova nepoznatih prosječnom izvornom govorniku, a pola od jednostavnih povezujućih struktura. Postoje i odlične kineske tablice podataka na kineskom engleskom, gdje su polovina također pojmovi, a druga polovina nasumični skup riječi.

Ako se sretnete nepoznata riječ, ne pokušavajte da ga prevedete pomoću englesko-ruskog rječnika. Ako ste zbunjeni histereza, onda vas prijevod "histereza" neće učiniti toplijim. Koristite Google, Stack Overflow, Wikipedia, forume, gdje će biti traženi koncept objasnjeno jednostavnim rijecima sa primjerima.

Najbolji način da razumete ono što čitate je provjerite u akciji. Stoga, držite pri ruci ploču za otklanjanje grešaka sa kojom se upoznajete, ili još bolje dvije, u slučaju da ste ipak nešto pogrešno shvatili i vidjeli magični dim.

Dobra je navika držati svoj list podataka pri ruci kada ste čitanje nečijeg tutorijala ili proučavanje tuđe biblioteke. Sasvim je moguće da ćete u njemu pronaći optimalnije rješenje za svoj problem. I obrnuto - ako ne možete razumjeti iz tablice kako registar zapravo funkcionira, proguglajte ga: najvjerovatnije je neko već sve opisao jednostavnim riječima ili ostavio jasan kod na GitHubu.

Rečnik

Neke korisne riječi i simboli koji će vam pomoći da se brzo naviknete na tablice sa podacima. Ono čega sam se sjetio zadnjih par dana, dopune i ispravke su dobrodošle.

Električna energija
VDC, Istinito – „plus“, hrana
Vss, vee – „minus“, zemlja
struja – struja
voltaža - voltaža
da potopi struju – rade kao “zemlja” za vanjsko opterećenje
na izvor struje – napajanje eksternog opterećenja
visoki umivaonik/izvor pin – klin sa povećanom „tolerancijom“ na opterećenje

IO
H, visoko – na Vcc pin
L, nisko – na Vss pin
Visoka impedancija, Hi-Z, plutajući – nema ničega na iglici, „visok otpor“, praktično je nevidljiv za spoljni svet.
slabo povlačenje, slabo povlačenje – ugrađeni pull-up/pull-down otpornik, približno ekvivalentan 50 kOhm (vidi tablicu). Koristi se, na primjer, da spriječi ulazni pin da visi u zraku, uzrokujući lažne alarme. Slabo - jer ga je lako "prekinuti".
push pull – pin izlazni mod, u kojem se prebacuje između visok и nizak – redovni IZLAZ iz Arduina.
otvoreni odvod – oznaka izlaznog moda u kojem pin može biti bilo koji nizak, ili Visoka impedancija/plutajući. Štoviše, gotovo uvijek ovo nije "pravi" otvoreni odvod; postoje zaštitne diode, otpornici i ostalo. Ovo je jednostavno oznaka za uzemljeni/bez režima.
pravi otvoreni odvod - ali ovo je pravi otvoreni odvod: igla vodi direktno do zemlje ako je otvorena, ili ostaje u limbu ako je zatvorena. To znači da se, ako je potrebno, kroz njega može proći napon veći od Vcc, ali je maksimum i dalje naveden u tablici podataka u odjeljku Apsolutni maksimalni nazivi/napon.

Interfejsi
u nizu – spojeni u seriju
lančati – sastaviti čipove u lanac koristeći serijsku vezu, povećavajući broj izlaza.
smjena – pomak, obično označava pomak bita. odnosno prebaciti se и da se prebaci – primanje i prijenos podataka bit po bit.
latch – rezu koja pokriva bafer dok se bitovi pomiču kroz njega. Kada je prijenos završen, ventil se otvara i bitovi počinju raditi.
ubaciti – izvršite prijenos bit po bit, pomaknite sve bitove na prava mjesta.
dupli bafer, sjeni registar, preload registar – oznake istorije, kada registar mora biti u stanju da prihvati nove podatke, ali da ih zadrži do nekog trenutka. Na primjer, da bi PWM radio ispravno, njegovi parametri (radni ciklus, frekvencija) ne bi se trebali mijenjati dok se trenutni ciklus ne završi, ali se novi parametri već mogu prenijeti. Shodno tome, trenutni se zadržavaju na sjeni registar, a novi upadaju preload registar, koji se upisuje u odgovarajući registar čipa.

Svašta
prescaler – frekvencijski predskaler
malo postaviti – postaviti bit na 1
da obrišete/resetujete malo – resetujte bit na 0 (resetovati – STM datasheet funkcija)

Šta sledi

Općenito, ovdje je planiran praktični dio sa demonstracijom tri projekta na STM32 i STM8, napravljenih posebno za ovaj članak koristeći datasheets, sa sijalicama, SPI, tajmerima, PWM-om i prekidima:

Kako i zašto čitati tablice podataka ako su vam mikrokontroleri hobi

Ali teksta ima puno, pa se projekti šalju u drugi dio.

Vještina čitanja tablica podataka pomoći će vam u vašem hobiju, ali je malo vjerovatno da će zamijeniti živu komunikaciju s kolegama hobistima na forumima i četovima. U tu svrhu još uvijek morate unaprijediti svoj engleski prije svega. Stoga će oni koji završe čitanje dobiti posebnu nagradu: dvije besplatne lekcije u Skyeng uz prvu uplatu koristeći kod HABR2.

izvor: www.habr.com

Dodajte komentar