Kuinka ja miksi luet tietolomakkeita, jos mikro-ohjaimet ovat harrastuksesi

Kuinka ja miksi luet tietolomakkeita, jos mikro-ohjaimet ovat harrastuksesi

Mikroelektroniikka on viime vuosien muodikas harrastus maagisen Arduinon ansiosta. Mutta tässä on ongelma: riittävällä kiinnostuksella voit nopeasti kasvaa DigitalWrite(:n) ulkopuolelle, mutta mitä tehdä seuraavaksi, ei ole täysin selvää. Arduino-kehittäjät ovat tehneet paljon vaivaa alentaakseen ekosysteemiinsä pääsyn estettä, mutta sen ulkopuolella on edelleen kovien piirien synkkä metsä, johon amatööri ei pääse käsiksi.

Esimerkiksi tietolomakkeet. Näyttää siltä, ​​​​että heillä on kaikki, ota se ja käytä sitä. Mutta niiden kirjoittajat eivät selvästikään aseta itselleen tehtäväksi mikro-ohjainten popularisointia; Joskus näyttää siltäettä he käyttävät tarkoituksella väärin käsittämättömiä termejä ja lyhenteitä kuvaillessaan yksinkertaisia ​​asioita hämmentääkseen tietämättömiä mahdollisimman paljon. Mutta kaikki ei ole niin huonosti; haluttaessa arkku aukeaa.

Tässä artikkelissa jaan humanistisen asiantuntijan kokemuksen, joka kommunikoi tietolehtien avulla harrastustarkoituksiin. Teksti on tarkoitettu Arduino-housuista kasvaneille amatööreille, ja siinä oletetaan jonkin verran ymmärrystä mikro-ohjainten toimintaperiaatteista.

Aloitan perinteisestä

LED-valo vilkkuu Arduinossa

Ja heti koodi:

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

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

"Mikä tämä on? – Hienostunut lukija kysyy. – Miksi kirjoitat jotain PINB-syöttörekisteriin? Se on vain lukemista varten!" Todella, Arduinon dokumentaatio, kuten useimmat Internetin opetusartikkelit, toteaa, että tämä rekisteri on vain luku -tilassa. Niin ajattelin itsekin, kunnes luin sen uudelleen Tiedotteen Atmega328p:lle ja valmistelee tätä artikkelia. Ja siellä:

Kuinka ja miksi luet tietolomakkeita, jos mikro-ohjaimet ovat harrastuksesi

Tämä on suhteellisen uusi toiminto, sitä ei ollut Atmega8:ssa, kaikki eivät tiedä siitä tai sitä ei mainita taaksepäin yhteensopivuuden vuoksi. Mutta se on varsin sopiva havainnollistamaan ajatusta, että tietolomakkeet kannattaa lukea, jotta voidaan käyttää kaikkia sirun ominaisuuksia, myös vähän tunnettuja. Eikä tämä ole ainoa syy.

Miksi muuten pitäisi lukea tietolomakkeita?

Yleensä Arduino-insinöörit, pelattuaan tarpeeksi LEDeillä ja AnalogWritesilla, alkavat liittää kaikenlaisia ​​moduuleja ja siruja levyyn, joille on jo kirjoitettuja kirjastoja. Ennemmin tai myöhemmin ilmestyy kirjasto, joka ei toimi niin kuin sen pitäisi. Sitten amatööri alkaa etsiä sitä korjatakseen sen, ja sitten...

Ja siellä tapahtuu jotain täysin käsittämätöntä, joten sinun täytyy mennä Googleen, lukea lukuisia opetusohjelmia, vetää osia jonkun sopivasta koodista ja lopulta saavuttaa tavoitteesi. Tämä antaa voimakkaan tunteen saavutuksesta, mutta todellisuudessa prosessi on kuin pyörän keksiminen uudelleen kääntämällä moottoripyörä. Lisäksi ymmärrys tämän pyörän toiminnasta ei kasva. Tiedän, koska tein tätä itse melko pitkään.

Jos tämän jännittävän toiminnan sijaan olisin viettänyt pari päivää Atmega328:n dokumentaatiota tutkiessani, olisin säästänyt valtavasti aikaa. Loppujen lopuksi tämä on melko yksinkertainen mikro-ohjain.

Siksi sinun on luettava tietolomakkeet ainakin kuvitellaksesi kuinka mikro-ohjain yleensä toimii ja mitä se voi tehdä. Ja kauemmas:

  • tarkistaa ja optimoida muiden ihmisten kirjastoja. Ne ovat usein kirjoittaneet samat amatöörit, jotka keksivät pyörän uudelleen; tai päinvastoin, kirjoittajat tekevät niistä tarkoituksella liian idioottivarmoja. Olkoon se kolme kertaa suurempi ja hitaampi, mutta se toimii varmasti;

  • osaa käyttää siruja projektissa, jolle kukaan ei ole kirjoittanut kirjastoa;

  • helpottaaksesi siirtymistä MK-linjasta toiseen;

  • optimoida vihdoin vanha koodisi, joka ei mahtunut Arduinoon;

  • oppia hallitsemaan mitä tahansa sirua suoraan sen rekistereiden kautta ilman, että sinun tarvitsee tutkia sen mahdollisten kirjastojen rakennetta.

Miksi kirjoittaa suoraan rekistereihin, kun on HAL ja LL?

sanasto
HAL, korkea abstraktiokerros – kirjasto korkean abstraktiotason mikro-ohjaimen ohjaamiseen. Jos sinun on käytettävä SPI1-liitäntää, voit yksinkertaisesti määrittää ja ottaa SPI1:n käyttöön ajattelematta, mitkä rekisterit ovat vastuussa mistäkin.
LL, Low Level API – kirjasto, joka sisältää makroja tai rakenteita rekisteriosoitteineen, jotta voit käyttää niitä nimellä. DDRx, PORTx, PINx Atmegassa ovat LL.

Habrén kommenteissa esiintyy säännöllisesti kiistoja aiheesta "HAL, LL tai rekisterit". Väittämättä pääsyä astraalitietoon, jaan vain amatöörikokemukseni ja ajatukseni.

Enemmän tai vähemmän selvitettyä Atmegasta ja luettuani artikkeleita STM32:n ihmeellisyydestä, ostin puoli tusinaa erilaista levyä - Discovery, ja Blue Pills ja jopa pelkkiä siruja kotitekoisille tuotteilleni. He kaikki keräsivät pölyä laatikkoon kahden vuoden ajan. Joskus sanoin itselleni: "Siinä se on, tästä viikonlopusta alkaen hallitsen STM:n", käynnisti CubeMX:n, loi asetukset SPI:lle, katsoin tuloksena olevaa tekstiseinämää, joka oli runsaasti STM-tekijänoikeuksilla maustettu, ja päätin, että tämä oli jotenkin liian paljon.

Kuinka ja miksi luet tietolomakkeita, jos mikro-ohjaimet ovat harrastuksesi

Tietenkin voit selvittää, mitä CubeMX kirjoitti täällä. Mutta samalla on selvää, että on epärealistista muistaa kaikki sanat ja kirjoittaa ne sitten käsin. Ja tämän virheenkorjaus, jos unohdan vahingossa valita ruudun kuutiossa, se on täysin kunnossa.

Kaksi vuotta on kulunut, nuolen edelleen huuliani ST MCU Finder kaikenlaisille maukkaita, mutta ymmärrykseni ulkopuolella, sirut, ja törmäsin vahingossa upea artikkeli, vaikkakin STM8:sta. JA yhtäkkiä Tajusin, että koko tämän ajan olin koputtanut avoimeen oveen: STM:n rekisterit on järjestetty samalla tavalla kuin minkä tahansa muun MK:n rekisterit, eikä Kuutiota tarvitse niiden kanssa työskennellä. Oliko se edes mahdollista..?

HAL ja erityisesti STM32CubeMX on työkalu ammattiinsinööreille, jotka työskentelevät tiiviisti STM32-sirujen kanssa. Pääominaisuus on korkea abstraktiotaso, kyky siirtyä nopeasti yhdestä MCU:sta toiseen ja jopa ytimestä toiseen, pysyen samalla STM32-linjan sisällä. Harrastajat törmäävät harvoin tällaisiin ongelmiin - mikro-ohjaimien valintamme rajoittuu pääsääntöisesti AliExpress-valikoimaan, ja siirrymme usein radikaalisti erilaisten sirujen välillä - siirrymme Atmegasta STM:ään, STM:stä ESP:hen tai mitä tahansa uutta kiinalaisten ystävämme kanssa. heittää meille. HAL ei auta tässä, ja sen opiskelu vie paljon aikaa.

LL jää - mutta siitä rekistereihin on puoli askelta. Henkilökohtaisesti pidän makrojeni kirjoittamista rekisteriosoitteilla hyödyllisenä: tutkin tietolomaketta tarkemmin, mietin mitä tarvitsen tulevaisuudessa ja mitä en varmasti, jäsentän ohjelmiani paremmin ja ylipäätään voittaminen auttaa muistamaan .

Lisäksi suositussa STM32F103:ssa on vivahde - sille on kaksi yhteensopimatonta LL-versiota, yksi STM:n virkamies, toinen Leaf Labsista, jota käytetään STM32duino-projektissa. Jos kirjoitat avoimen lähdekoodin kirjastoa (ja minulla oli täsmälleen sellainen tehtävä), sinun on joko tehtävä kaksi versiota tai päästävä suoraan rekistereihin.

Lopuksi LL:n poistaminen mielestäni helpottaa siirtymistä, varsinkin jos suunnittelet sitä projektin alusta lähtien. Liioiteltu esimerkki: kirjoitetaan Arduino blink Atmel Studioon ilman LL:tä:

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

Jotta tämä koodi vilkkuu LED-valoa kiinalaisella kortilla, jossa on STM8 (ST Visual Desktopista), riittää, että vaihdat siinä kaksi osoitetta:

#define DDR_B 0x5007
#define OUT_B 0x5005

Kyllä, käytän ominaisuutta kytkeä LED tietylle levylle, se vilkkuu hyvin hitaasti, mutta se tapahtuu!

Millaisia ​​tietolomakkeita on olemassa?

Artikkeleissa ja foorumeilla, sekä venäjäksi että englanniksi, "tietolomakkeet" tarkoittavat mitä tahansa sirujen teknistä dokumentaatiota, ja teen samoin tässä tekstissä. Muodollisesti ne ovat vain yksi tällaisista asiakirjoista:

Datalehdet – Suorituskykyominaisuudet, taktiset ja tekniset ominaisuudet. Pakollinen kaikille elektronisille komponenteille. Taustatietoa on hyödyllistä pitää käden ulottuvilla, mutta siinä ei ole paljoa mietittävää luettavaa. Yksinkertaisemmat sirut rajoittuvat kuitenkin usein tietolehteen, jotta ei tuottaisi tarpeettomia asiakirjoja; tässä tapauksessa Viitekäsikirja sisältyy tähän.

Viitekäsikirja – itse ohjeet, terve yli 1000 sivun kirja. Kaiken sirulle ahdetun työ kuvataan yksityiskohtaisesti. Pääasiakirja mikro-ohjaimen hallitsemiseksi. Toisin kuin lomakkeessa, ohjeet on kirjoitettu monenlaisille MK:ille; ne sisältävät paljon tietoa oheislaitteista, joita ei ole saatavana kyseisessä mallissasi.

Ohjelmointikäsikirja tai Ohjesarjan käsikirja – ohjeet yksilöllisille mikro-ohjaimen komentoille. Suunniteltu niille, jotka ohjelmoivat Assembly-kielellä. Kääntäjät käyttävät sitä aktiivisesti optimoidakseen koodia, joten emme yleensä tarvitse sitä. Mutta täältä katsominen on hyödyllistä yleisen ymmärtämisen, joidenkin tiettyjen komentojen, kuten keskeytyksestä poistumisen, sekä debuggerin aktiivisen käytön kannalta.

Sovellushuomautus – hyödyllisiä vinkkejä tiettyjen ongelmien ratkaisemiseen, usein koodiesimerkkien kera.

Errata Sheet – kuvaus epätyypillisestä sirukäyttäytymisestä ja mahdollisista kiertovaihtoehdoista.

Mitä datalehdissä lukee

Suoraan kohteeseen Datalehdet saatamme tarvita seuraavat osiot:

Laitteen yhteenveto – tietolomakkeen ensimmäisellä sivulla kuvataan lyhyesti laitetta. Erittäin hyödyllinen tilanteissa, kun löysit sirun jostain (näit sen kaupassa, juotoit sen, törmäsit mainintaan) ja haluat ymmärtää, mikä se on.

Yleinen kuvaus – tarkempi kuvaus linjan sirujen ominaisuuksista.

Pinouts – pinout-kaaviot kaikille mahdollisille sirupakkauksille (mikä tappi on missä jalassa).

Nastan kuvaus – kuvaus kunkin tapin tarkoituksesta ja ominaisuuksista.

muisti Kartta – osoitekartan muistiin tuskin tarvitsemme, mutta joskus se sisältää myös rekisterilohkoosoitteiden taulukon.

Rekisteröidy kartta – rekisterilohkojen osoitetaulukko sijaitsee pääsääntöisesti tietolomakkeessa ja sisään Viite Manuaali – vain vuoroja (osoitteen siirrot).

Sähköiset ominaisuudet – tässä osiossa olemme ensisijaisesti kiinnostuneita absoluuttiset maksimiarvosanat, jossa luetellaan enimmäiskuormitukset sirua kohti. Toisin kuin tuhoutumaton Atmega328p, useimmat MK:t eivät salli sinun liittää vakavia kuormia nastoihin, mikä tulee epämiellyttäväksi yllätykseksi arduinisteille.

Pakkaustiedot – piirustuksia käytettävissä olevista koteloista, joista on hyötyä tauluja suunniteltaessa.

Viitekäsikirja rakenteellisesti koostuu osioista, jotka on omistettu tietyille niiden otsikossa mainituille oheislaitteille. Jokainen luku voidaan jakaa kolmeen osaan:

Yleiskatsaus, esittely, Ominaisuudet – yleiskatsaus oheislaitteiden ominaisuuksiin;

Toiminnallinen kuvaus, Käyttöohje tai yksinkertaisesti osion päälohko - yksityiskohtainen tekstikuvaus oheislaitteen periaatteista ja sen käytöstä;

Rekisterit – valvontarekisterien kuvaus. Yksinkertaisissa tapauksissa, kuten GPIO tai SPI, tämä saattaa riittää oheislaitteiden käytön aloittamiseen, mutta usein joudut silti lukemaan edelliset osat.

Kuinka lukea tietolomakkeita

Tietolomakkeet, tottumuksesta, pelottavat sinua määrällään ja käsittämättömien sanojen runsaudella. Itse asiassa kaikki ei ole niin pelottavaa, jos tiedät muutaman elämän hakkerin.

Asettaa hyvä PDF-lukija. Tekniset lomakkeet on kirjoitettu loistavan paperiohjeiden perinteen mukaisesti, ne on hienoja tulostaa, lisätä muovisilla kirjanmerkeillä ja ommella. Hypertekstiä niissä havaitaan pieninä määrinä. Onneksi ainakin dokumentin rakenne on suunniteltu kirjanmerkeillä, joten sopiva lukija, jossa on helppo navigoida, on erittäin tarpeellinen.

Tietolomake ei ole Stroustrupin oppikirja; se sisältää kaikkea ei tarvitse lukea. Jos käytit edellistä neuvoa, etsi vain haluamasi osio kirjanmerkkipalkista.

Varsinkin tietolomakkeet Viiteoppaat, voi kuvata ei tietyn sirun ominaisuuksia, vaan koko linja. Tämä tarkoittaa, että puolet tai jopa kaksi kolmasosaa tiedoista ei liity siruisi. Ennen kuin opit TIM7-rekistereitä, kirjaudu sisään Yleinen kuvaus, Onko sinulla se?

Tietää Englanti tarpeeksi varten perustaso. Tietolomakkeet koostuvat puolet termeistä, joita keskiverto äidinkielenään puhuja ei tunne, ja puolet yksinkertaisia ​​yhdistäviä rakenteita. On myös erinomaisia ​​kiinalaisia ​​​​tietolomakkeita kiinan englanniksi, jossa puolet on myös termejä ja toinen puoli on satunnaisia ​​sanoja.

Jos tapaat tuntematon sana, älä yritä kääntää sitä käyttämällä englanti-venäjä-sanakirjaa. Jos olet hämmentynyt hystereesi, silloin käännös "hystereesi" ei lämmitä sinua. Käytä Googlea, Stack Overflow:ta, Wikipediaa, foorumeita, joissa vaadittu käsite on selitetty yksinkertaisin sanoin esimerkein.

Paras tapa ymmärtää lukemasi on tarkista toiminnassa. Pidä siis käsilläsi debug board, johon olet tutustumassa, tai vielä parempi kaksi, siltä varalta, että olet silti ymmärtänyt jotain väärin ja näkisit taikasavun.

On hyvä tapa pitää tietotaulukkosi käden ulottuvilla lukea jonkun opetusohjelmaa tai opiskelemaan jonkun toisen kirjastoa. On täysin mahdollista, että löydät siitä optimaalisemman ratkaisun ongelmaasi. Ja päinvastoin - jos et ymmärrä tietolomakkeesta, kuinka rekisteri todella toimii, googlaa se: todennäköisesti joku on jo kuvaillut kaiken yksinkertaisin sanoin tai jättänyt selkeän koodin GitHubiin.

sanasto

Hyödyllisiä sanoja ja symboleja, joiden avulla voit nopeasti tottua tietolomakkeisiin. Parin viime päivän aikana muistiin jääneet lisäykset ja korjaukset ovat tervetulleita.

Электричество
Vcc, vdd - "plus", ruoka
Vss, Vee - "miinus", maa
nykyinen – nykyinen
jännite - Jännite
upottaa virtaa – toimii "maahana" ulkoiselle kuormitukselle
virran lähteeseen – teho ulkoinen kuorma
korkea pesuallas/lähdetappi – tappi, jolla on suurempi kuormitustoleranssi

IO
H, korkea – Vcc-nastassa
L, matala – Vss-nastassa
Korkea impedanssi, Hei-Z, kelluva - tapissa ei ole mitään, "korkea vastus", se on käytännössä näkymätön ulkomaailmalle.
heikko veto, heikko alasveto – sisäänrakennettu ylös-/alasvetovastus, joka vastaa noin 50 kOhm (katso tietolehteä). Sitä käytetään esimerkiksi estämään tulonastan roikkuminen ilmassa aiheuttaen vääriä hälytyksiä. Heikko - koska hänet on helppo "keskeyttää".
työnnä vedä – pin-lähtötila, jossa se vaihtaa Korkea и Matala - tavallinen OUTPUT Arduinosta.
avoin viemäri – lähtötilan merkintä, jossa nasta voi olla jompikumpi MatalaTai Korkea impedanssi / kelluva. Lisäksi lähes aina tämä ei ole "oikea" avoin viemäri; siellä on suojadiodeja, vastuksia ja mitä muuta. Tämä on yksinkertaisesti maadoitus/ei mitään -tilan merkintä.
todellinen avoin viemäri - mutta tämä on todellinen avoin viemäri: tappi johtaa suoraan maahan, jos se on auki, tai pysyy epävarmassa, jos se on kiinni. Tämä tarkoittaa, että sen läpi voidaan tarvittaessa kuljettaa Vcc:tä suurempi jännite, mutta maksimi on silti määritelty tietolomakkeessa kohdassa Absoluuttiset maksiminimellisarvot/jännite.

Liitännät
sarjassa – kytketty sarjaan
ketjuttaa – koota sirut ketjuksi sarjaliitännän avulla, mikä lisää lähtöjen määrää.
siirtää – shift, tarkoittaa yleensä hieman siirtymää. Vastaavasti, siirtymään sisään и siirtymään pois – vastaanottaa ja lähettää dataa bitti kerrallaan.
salpa – salpa, joka peittää puskurin, kun bittejä siirretään sen läpi. Kun siirto on valmis, venttiili avautuu ja terät alkavat toimia.
kellotaamaan – suorita bitti bitiltä siirto, siirrä kaikki bitit oikeisiin paikkoihin.
kaksinkertainen puskuri, varjorekisteri, esilatausrekisteri – historialliset merkinnät, jolloin rekisterin on voitava ottaa vastaan ​​uusia tietoja, mutta säilyttää ne tiettyyn pisteeseen asti. Esimerkiksi, jotta PWM toimisi oikein, sen parametrien (toimintajakso, taajuus) ei pitäisi muuttua ennen kuin nykyinen jakso päättyy, mutta uusia parametreja voidaan jo siirtää. Tämän mukaisesti nykyiset säilytetään varjorekisteri, ja uudet putoavat esilatausrekisterikirjoitetaan vastaavaan sirurekisteriin.

Kaikenlaisia ​​asioita
esiskaalaaja – taajuuden esiskaalaaja
asettaa hieman – aseta bitti arvoon 1
tyhjentää/nollata hieman – palauta bitti 0:aan (nollata – STM-tietolehtiominaisuus)

Mitä seuraavaksi

Yleisesti ottaen tähän suunniteltiin käytännön osa, jossa esiteltiin kolme STM32- ja STM8-projektia, jotka on tehty erityisesti tätä artikkelia varten käyttämällä datalehtiä, hehkulamppujen, SPI:n, ajastimien, PWM:n ja keskeytysten avulla:

Kuinka ja miksi luet tietolomakkeita, jos mikro-ohjaimet ovat harrastuksesi

Mutta tekstiä on paljon, joten projektit lähetetään toiseen osaan.

Tietolehtien lukutaito auttaa sinua harrastuksessasi, mutta se ei todennäköisesti korvaa live-kommunikaatiota muiden harrastajien kanssa foorumeilla ja chateissa. Tätä tarkoitusta varten sinun on vielä ensin parannettava englantia. Siksi ne, jotka lopettivat lukemisen, saavat erikoispalkinnon: kaksi ilmaista oppituntia Skyengissä ensimmäisellä maksulla koodilla HABR2.

Lähde: will.com

Lisää kommentti