Nola eta zergatik irakurri fitxa teknikoak mikrokontrolagailuak zure zaletasuna badira

Nola eta zergatik irakurri fitxa teknikoak mikrokontrolagailuak zure zaletasuna badira

Mikroelektronika azken urteotan modan dagoen zaletasuna da Arduino magikoari esker. Baina hona hemen arazoa: interes nahikoa izanez gero, DigitalWrite(()) azkar gainditu dezakezu, baina gero zer egin ez dago guztiz argi. Arduinoko garatzaileek ahalegin handia egin dute beren ekosisteman sartzeko oztopoa jaisteko, baina hortik kanpo dago oraindik afizionatuarentzat eskuraezina den zirkuitu gogorreko baso ilun bat.

Adibidez, fitxa teknikoak. Badirudi denetarik dutela, hartu eta erabili. Baina haien egileek argi eta garbi ez diote beren buruari mikrokontrolagailuak ezagutarazteko zeregina ezartzen; Batzuetan badirudiGauza sinpleak deskribatzerakoan termino eta laburdura ulergaitzak nahita abusatzen dituztela, hasi gabekoak ahalik eta gehien nahasteko. Baina dena ez da hain txarra; nahi izanez gero, kutxa irekitzen da.

Artikulu honetan zaletasun helburuetarako fitxa teknikoekin komunikatzen ari den giza zientzietako espezialista baten esperientzia partekatuko dut. Testua Arduino praketatik hazi diren afizionatuentzat da; mikrokontrolagailuen funtzionamendu-printzipioak nolabait ulertzea suposatzen du.

Tradizionalarekin hasiko naiz

LED bat keinu egiten ari da Arduino-n

Eta berehala kodea:

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

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

"Zer da hau? – Irakurle sofistikatu batek galdetuko du. – Zergatik idazten ari zara zerbait PINB sarrera erregistroan? Irakurtzeko bakarrik da!" Benetan, Arduinoren dokumentazioa, Interneteko hezkuntza-artikulu gehienek bezala, erregistro hau irakurtzeko soilik dela dio. Nik hala pentsatu nuen berriro irakurri arte fitxa teknikoa Atmega328p-ri, artikulu hau prestatzen. Eta hor:

Nola eta zergatik irakurri fitxa teknikoak mikrokontrolagailuak zure zaletasuna badira

Funtzionalitate nahiko berria da, ez zegoen Atmega8-n, denek ez dakite edo ez dute aipatzen atzerako bateragarritasun arrazoiengatik. Baina nahiko egokia da fitxa teknikoak irakurtzea merezi duela frogatzeko, txiparen gaitasun guztiak erabiltzeko, ezezagunak barne. Eta hori ez da arrazoi bakarra.

Zergatik irakurri bestela fitxa teknikoak?

Normalean, Arduinoko ingeniariak, LEDekin eta AnalogWrites-ekin nahikoa jokatuta, mota guztietako moduluak eta txipak konektatzen hasten dira plakara, eta horretarako jada idatzitako liburutegiak daude. Lehenago edo beranduago, behar bezala funtzionatzen ez duen liburutegi bat agertzen da. Orduan, afizionatua konpontzen hasten da, eta gero...

Eta guztiz ulertezina gertatzen da bertan, beraz, Googlera joan, tutorial ugari irakurri, norbaiten kode egoki baten zatiak atera eta azkenean zure helburua lortu behar duzu. Horrek lorpen-sentsazio indartsua ematen du, baina errealitatean prozesua motozikleta alderantzizko ingeniaritza eginez gurpila berrasmatzea bezalakoa da. Gainera, bizikleta honek nola funtzionatzen duen ulertzea ez da handitzen. Badakit, nik neuk egin nuelako denbora luzez.

Jarduera zirraragarri honen ordez Atmega328 dokumentazioa aztertzen egun pare bat eman izan banu, denbora asko aurreztuko nuke. Azken finean, hau mikrokontrolagailu nahiko sinplea da.

Horrela, fitxa teknikoak irakurri behar dituzu gutxienez mikrokontrolagailuak orokorrean nola funtzionatzen duen eta zer egin dezakeen imajinatzeko. Eta aurrerago:

  • besteen liburutegiak egiaztatzeko eta optimizatzeko. Gurpila berrasmatzen duten afizionatu berberek idatzi ohi dituzte; edo, aitzitik, egileek nahita gehiegizko ergelkeriak egiten dituzte. Hiru aldiz handiagoa eta motelagoa izan dadila, baina zalantzarik gabe funtzionatuko du;

  • inork liburutegirik idatzi ez duen proiektu batean txipak erabili ahal izatea;

  • MK linea batetik bestera migratzea errazteko;

  • azkenik, zure kode zaharra optimizatzeko, Arduino-n sartzen ez zena;

  • edozein txip zuzenean bere erregistroen bidez kontrolatzen ikasteko, bere liburutegien egitura aztertzeaz arduratu gabe, halakorik balego.

Zergatik idatzi zuzenean erregistroetara HAL eta LL daudenean?

glosario
HAL, High Abstraction Layer – abstrakzio maila handiko mikrokontrolagailu bat kontrolatzeko liburutegia. SPI1 interfazea erabili behar baduzu, SPI1 konfiguratu eta gaitu besterik ez duzu egin behar erregistroen arduradunak zeintzuk diren pentsatu gabe.
LL, Low Level API – Erregistro helbideak dituzten makroak edo egiturak dituen liburutegia, izenez sartzeko aukera ematen duena. DDRx, PORTx, PINx Atmega-n LL dira.

"HAL, LL edo erregistroak" gaiari buruzko eztabaidak aldizka gertatzen dira Habré-ri buruzko iruzkinetan. Ezagutza astralerako sarbidea aldarrikatu gabe, nire afizionatuen esperientzia eta pentsamenduak partekatuko ditut.

Atmega gutxi-asko asmatu eta STM32-ren zoragarriari buruzko artikuluak irakurrita, dozena erdi taula ezberdin erosi nituen - Discovery eta Blue Pills, eta etxeko produktuetarako patata frijituak ere bai. Denek bi urtez kaxa batean bildu zuten hautsa. Batzuetan esaten nion neure buruari: "horixe da, asteburu honetatik aurrera STM menperatzen ari naiz", CubeMX abiarazi, SPIrako konfigurazio bat sortu, sortutako testu horma begiratu, STM egile-eskubideekin ederki zaporetua, eta nolabait ere hori zela erabaki nuen. asko.

Nola eta zergatik irakurri fitxa teknikoak mikrokontrolagailuak zure zaletasuna badira

Jakina, hemen CubeMX-ek idatzitakoa jakin dezakezu. Baina, aldi berean, argi dago hitz guztiak gogoratzea eta gero eskuz idaztea ez dela errealista. Eta hau arazketa egiteko, nahi gabe Kuboko lauki bat markatzea ahazten badut, guztiz ondo dago.

Bi urte pasa dira, oraindik ezpainak miazkatzen ari naiz ST MCU bilatzailea mota guztietako zaporetsuetarako, baina nire ulermenetik haratago, patata frijituak, eta ustekabean topatu ziren artikulu zoragarria, STM8ri buruz bada ere. ETA bat-batean Konturatu nintzen denbora honetan guztian ate zabalik joka ibili nintzela: STMko erregistroak beste edozein MKren antzera daude antolatuta, eta Cube ez da beharrezkoa haiekin lan egiteko. Posible al zen ere?...

HAL eta zehazki STM32CubeMX STM32 txipekin lan egiten duten ingeniari profesionalentzako tresna bat da. Ezaugarri nagusia abstrakzio maila altua da, MCU batetik bestera eta baita nukleo batetik bestera azkar migratzeko gaitasuna, STM32 linearen barruan geratzen den bitartean. Zaleek oso gutxitan aurkitzen dituzte horrelako arazoak - gure mikrokontrolagailuen aukeraketa, oro har, AliExpress sortara mugatzen da, eta askotan txip arras desberdinen artean migratzen dugu - Atmega-tik STM-ra, STM-tik ESP-era edo edozein gauza berria gure txinatar lagunak. bota guri. HALek ez du hemen lagunduko, eta hori aztertzeak denbora asko jango du.

LL geratzen da - baina bertatik erregistroetara pauso erdi bat dago. Pertsonalki, nire makroak erregistro-helbideekin idaztea erabilgarria iruditzen zait: arreta handiagoz aztertzen dut fitxa teknikoa, pentsatzen dut zer beharko dudan eta zalantzarik gabe zer ez dudan, hobeto egituratzen ditut nire programak eta, oro har, gainditzeak memorizatzen laguntzen du. .

Horrez gain, ñabardura bat dago STM32F103 ezagunarekin - bi LL bertsio bateraezin daude horretarako, STM-ko ofizial bat, Leaf Labs-eko bigarrena, STM32duino proiektuan erabiltzen dena. Kode irekiko liburutegi bat idazten baduzu (eta nik zehazki halako zeregin bat), bi bertsio egin behar dituzu, edo erregistroetara zuzenean sartu.

Azkenik, LL ezabatzeak, nire ustez, migrazioa errazten du, batez ere proiektuaren hasieratik planifikatzen baduzu. Adibide gehiegizkoa: idatz dezagun Arduino blink Atmel Studio-n LL gabe:

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

Kode honek STM8-rekin (ST Visual Desktop-ekoa) duen plaka txinatar baten LEDa keinu egin dezan, nahikoa da bertan bi helbide aldatzea:

#define DDR_B 0x5007
#define OUT_B 0x5005

Bai, LED-a plaka zehatz batean konektatzeko funtzio bat erabiltzen dut, oso poliki keinu egingo du, baina gertatuko da!

Zein motatako fitxak daude?

Artikuluetan eta foroetan, errusieraz zein ingelesez, "datasheets"-ek txipetarako edozein dokumentazio tekniko esan nahi du, eta gauza bera egiten dut testu honetan. Formalki, horrelako dokumentazio mota bat besterik ez dira:

Fitxa teknikoa – Errendimenduaren ezaugarriak, ezaugarri taktikoak eta teknikoak. Nahitaezkoa edozein osagai elektronikotarako. Aurrekarien informazioa eskura edukitzeko erabilgarria da, baina ez dago ondo irakurtzeko gauza handirik. Hala ere, txip sinpleagoak datu-orri batera mugatzen dira sarritan, beharrezkoak ez diren dokumentuak ez sortzeko; kasu honetan Erreferentzia Eskuliburua sartzen da hemen.

Erreferentzia Eskuliburua – argibideak beraiek, 1000 orrialde baino gehiagoko liburu osasuntsua. Txipan sartuta dagoen guztiaren lana zehatz-mehatz deskribatzen da. Mikrokontroladorea menperatzeko dokumentu nagusia. Ez bezala Fitxa, argibideak MK sorta zabal baterako idatzita daude; zure eredu zehatzean falta diren periferikoei buruzko informazio asko dute.

Programazio Eskuliburua edo Argibide multzoen eskuliburua – Mikrokontrolagailuaren komando berezietarako argibideak. Batzar hizkuntzan programatzen dutenentzat diseinatua. Konpiladoreen egileek aktiboki erabiltzen dute kodea optimizatzeko, beraz, kasu orokorrean ez dugu beharko. Baina hemen begiratzea erabilgarria da ulermen orokor baterako, komando zehatz batzuetarako, hala nola etenaldi batetik irteteko, baita araztailea aktiboki erabiltzeko ere.

Aplikazio Oharra – arazo zehatzak konpontzeko aholku erabilgarriak, askotan kode-adibideekin.

Errata Fitxa – Txiparen portaera ez-estandarra duten kasuen deskribapena konponbide-aukerekin, halakorik badago.

Fitxategietan dagoena

Zuzenean Fitxa teknikoa atal hauek beharko genituzke:

Gailuaren laburpena – Fitxategiko lehen orrialdeak laburki deskribatzen du gailua. Oso erabilgarria nonbait txip bat aurkitu duzun egoeretan (denda batean ikusi, soldatu, aipamen bat topatu) eta zer den ulertu nahi duzun egoeretan.

Description General – lineako txipen gaitasunen deskribapen zehatzagoa.

Pinoutak – Txip pakete posible guztietarako pinout diagramak (zein pin dago zein hankatan).

Pinaren deskribapena – Pin bakoitzaren xedearen eta gaitasunen deskribapena.

Memoriaren mapa – Nekez behar dugu memorian helbide-maparik, baina batzuetan erregistro-blokeen helbideen taula ere barne hartzen du.

Erregistratu Mapa – erregistro-blokeen helbideen taula, oro har, datu-orrian kokatzen da, eta bertan Erref eskuliburua - txandak bakarrik (helbideen desplazamenduak).

Elektrikoa Ezaugarriak – atal honetan interesatzen zaigu batik bat balorazio maximo absolutuak, txip bakoitzeko gehienezko kargak zerrendatuz. Atmega328p suntsiezinak ez bezala, MK gehienek ez dizute uzten karga larriak pinetara konektatzen, eta hori sorpresa desatsegina bihurtzen da arduinoentzat.

Paketeari buruzko informazioa – Eskuragarri dauden kasuen marrazkiak, zure taulak diseinatzerakoan erabilgarriak.

Erreferentzia Eskuliburua egituraz bere izenburuan adierazitako periferiko zehatzei eskainitako atalez osatuta dago. Kapitulu bakoitza hiru zatitan bana daiteke:

Orokorra, Sarrera, Ezaugarriak – gaitasun periferikoen ikuspegi orokorra;

Funtzionala deskribapena, Erabilera gida edo, besterik gabe, atalaren bloke nagusia - gailu periferikoaren printzipioen eta hura erabiltzeko moduaren testu deskribapen zehatza;

erroldak – Kontrol-erregistroen deskribapena. GPIO edo SPI kasu sinpleetan, nahikoa izan daiteke periferikoak erabiltzen hasteko, baina askotan aurreko zatiak irakurri behar izaten dituzu.

Nola irakurri fitxa teknikoak

Fitxa teknikoek, ohituraz, beldurra ematen dizute beren bolumenarekin eta hitz ulertezinen ugaritasunarekin. Izan ere, dena ez da hain beldurgarria bizitzako hack batzuk ezagutzen badituzu.

instalatu PDF irakurgailu ona. Fitxak paperezko argibideen tradizio loriatsuan idatzita daude; bikainak dira inprimatzeko, plastikozko laster-markekin txertatzeko eta josteko. Haietan hipertestua aztarna kantitateetan ikusten da. Zorionez, dokumentuaren egitura gutxienez laster-markekin diseinatuta dago, beraz, nabigazio erraza duen irakurle egoki bat oso beharrezkoa da.

Fitxa ez da Stroustrupen testu-liburua; bertan dauka ez dago dena irakurri beharrik. Aurreko aholkua erabili baduzu, bilatu nahi duzun atala laster-marken barran.

Fitxak, batez ere Erreferentzia eskuliburuak, ez txip zehatz baten gaitasunak deskriba ditzake, baina lerro osoa. Horrek esan nahi du informazioaren erdiak edo bi herenek ez dutela zure txiparekin erlazionatuta. TIM7 erregistroak aztertu aurretik, egiaztatu Description General, daukazu?

Jakiteko English nahikoa oinarrizko maila. Fitxa teknikoak batez besteko hiztunarentzat ezezagunak diren terminoez osatuta daude erdiak, eta lotura-egitura soilez erdiak. Txinako ingelesezko fitxa bikainak ere badaude, non erdiak ere terminoak diren, eta bigarren erdia ausazko hitz multzo bat diren.

Topatzen bazara hitz ezezaguna, ez saiatu ingelesa-errusiera hiztegia erabiliz itzultzen. Nahastuta bazaude histeresi, orduan "histeresia" itzulpenak ez zaitu beroago egingo. Erabili Google, Stack Overflow, Wikipedia, foroak, non beharrezkoa den kontzeptua izango den hitz errazez azalduta adibideekin.

Irakurtzen duzuna ulertzeko modurik onena da egiaztatu ekintzan. Hori dela eta, eduki ezazu eskura ezagutzen ari zaren arazketa-taula, edo hobeto esanda, bi, oraindik zerbait gaizki ulertu eta ke magiko bat ikusi baduzu.

Ohitura ona da datu-orria eskura edukitzea norbaiten tutoriala irakurtzea edo beste norbaiten liburutegia ikasten. Baliteke bertan zure arazoari irtenbide optimoa aurkitzea. Eta alderantziz: datu-orritik ezin baduzu ulertu erregistroak benetan nola funtzionatzen duen, bilatu Googlen: ziurrenik, norbaitek hitz errazekin deskribatu du jada edo kode garbi utzi du GitHub-en.

glosario

Zenbait hitz eta ikur erabilgarriak datu-orrietara azkar ohitzen laguntzeko. Azken bi egunetan gogoratu dudana, gehiketak eta zuzenketak ongi etorriak dira.

elektrizitatea
VCC, Egia – “plus”, janaria
vss, Vee – “minus”, lurra
egungo – egungoa
Tentsioa - Tentsioa
korrontea hondoratzeko – kanpoko kargarako “lur” gisa lan egin
korrontea iturri - Potentzia kanpoko karga
konketa/iturburu altua – kargatzeko "tolerantzia" handitu duen pina

IO
H, altua – Vcc pinean
L, baxua – Vss pinean
Inpedantzia handia, Kaixo-Z, flotagarria – ez dago ezer pinean, “erresistentzia handia”, ia ikusezina da kanpoko munduarentzat.
tira ahula, tira ahula behera – pull-up/pull-down erresistentzia integratua, gutxi gorabehera 50 kOhm-en baliokidea (ikus fitxa teknikoa). Erabiltzen da, adibidez, sarrerako pina airean zintzilik ez dadin, alarma faltsuak eraginez. ahula - erraza delako hura “eten” egitea.
bultzaka tira – pin irteera modua, zeinean artean aldatzen den High и Behe- – Arduinoren IRTEERA erregularra.
hustubide irekia – Pina izan daitekeen irteera moduaren izendapena Behe-Edo Inpedantzia handia / Flotatzailea. Gainera, ia beti hau ez da "benetako" drainatze irekia; babes-diodoak, erresistentzia eta bestelakoak daude. Hau beheko/none modurako izendapena besterik ez da.
benetako hustubide irekia - baina hau benetako hustubide irekia da: pinak zuzenean lurrera eramaten du irekita badago, edo linboan geratzen da itxita badago. Horrek esan nahi du, beharrezkoa bada, Vcc baino tentsio handiagoa igaro daitekeela bertatik, baina gehienez ere ataleko fitxan zehazten da. Balorazioak/Tentsio maximo absolutuak.

Interfazeak
seriean - seriean konektatuta
kateatu – txipak kate batean muntatu serieko konexioa erabiliz, irteera kopurua handituz.
mugitzeko – shift, normalean pixka bat shift adierazten du. Hurrenez hurren, aldatzeko и kanpora aldatzeko – datuak bitz bit jaso eta transmititzea.
latch – Buffer-a estaltzen duen itxitura, bitak bertatik pasatzen diren bitartean. Transferentzia amaitzean, balbula irekitzen da eta bitak funtzionatzen hasten dira.
erlojua sartzeko – egin bitz-bit transferentzia, mugitu bit guztiak leku egokietara.
buffer bikoitza, itzalen erregistroa, aurrekarga erregistroa – historiako izendapenak, erregistroak datu berriak onartzeko gai izan behar duenean, baina noizbait arte eutsi. Esate baterako, PWM-ak behar bezala funtziona dezan, bere parametroak (lan-zikloa, maiztasuna) ez dira aldatu behar uneko zikloa amaitu arte, baina parametro berriak transferitu daitezke jada. Horren arabera, gaur egungoak mantendu egiten dira itzalen erregistroa, eta berriak erortzen dira aurrekarga erregistroa, dagokion txip-erregistroan idatzita.

Era guztietako gauzak
aurreeskalatzailea – maiztasun-preeskalatzailea
pixka bat ezartzeko - ezarri bit 1ean
pixka bat garbitu/berrezarri - berrezarri bit 0ra (berrezarri - STM datu-orriaren funtzioa)

Zer da hurrengoa

Oro har, zati praktiko bat planifikatu zen hemen STM32 eta STM8ri buruzko hiru proiekturen erakustaldiarekin, artikulu honetarako espresuki eginiko fitxa teknikoak erabiliz, bonbillak, SPI, tenporizadoreak, PWM eta etenekin:

Nola eta zergatik irakurri fitxa teknikoak mikrokontrolagailuak zure zaletasuna badira

Baina testu asko dago, beraz, proiektuak bigarren zatira bidaltzen dira.

Fitxak irakurtzeko trebetasunak zure zaletasunarekin lagunduko dizu, baina nekez ordezkatuko du zuzeneko komunikazioa foro eta txatetako zaletuekin. Horretarako, oraindik ere ingelesa hobetu behar duzu lehenik eta behin. Beraz, irakurtzen amaitu dutenek sari berezi bat jasoko dute: doako bi ikasgai Skyeng-en lehen ordainketarekin kodea erabiliz. HABR2.

Iturria: www.habr.com

Gehitu iruzkin berria