Jinsi na kwa nini kusoma hifadhidata ikiwa vidhibiti vidogo ndio hobby yako

Jinsi na kwa nini kusoma hifadhidata ikiwa vidhibiti vidogo ndio hobby yako

Microelectronics ni hobby ya mtindo katika miaka ya hivi karibuni shukrani kwa Arduino ya kichawi. Lakini hapa ni tatizo: kwa maslahi ya kutosha, unaweza haraka kukua DigitalWrite (), lakini nini cha kufanya baadaye si wazi kabisa. Watengenezaji wa Arduino wameweka juhudi nyingi katika kupunguza kizuizi cha kuingia kwenye mfumo wao wa ikolojia, lakini nje yake bado kuna msitu mweusi wa mzunguko mkali ambao hauwezekani kufikiwa na amateur.

Kwa mfano, hifadhidata. Inaonekana wana kila kitu, ichukue na uitumie. Lakini waandishi wao kwa uwazi hawajiwekei kazi ya kutangaza vidhibiti vidogo; Mara nyingine inaonekanakwamba wanatumia vibaya maneno na vifupisho visivyoeleweka kwa makusudi wakati wa kuelezea mambo rahisi ili kuwachanganya wasiojua iwezekanavyo. Lakini sio kila kitu ni mbaya sana, ikiwa inataka, jeneza hufungua.

Katika makala haya nitashiriki uzoefu wa mtaalamu wa masuala ya kibinadamu akiwasiliana na hifadhidata kwa madhumuni ya hobby. Maandishi yanalenga amateurs ambao wamekua kutoka kwa suruali ya Arduino; inachukua uelewa fulani wa kanuni za uendeshaji wa vidhibiti vidogo.

Nitaanza na jadi

Kumulika LED kwenye Arduino

Na mara moja nambari:

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

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

"Hii ni nini? - Msomaji wa kisasa atauliza. - Kwa nini unaandika kitu kwenye rejista ya pembejeo ya PINB? Ni kwa ajili ya kusoma tu!” Kweli, Nyaraka za Arduino, kama nakala nyingi za kielimu kwenye Mtandao, inasema kuwa rejista hii ni ya kusoma tu. Nilijiwazia hivyo mpaka nilipoisoma tena karatasi ya data kwa Atmega328p, ikitayarisha nakala hii. Na kuna:

Jinsi na kwa nini kusoma hifadhidata ikiwa vidhibiti vidogo ndio hobby yako

Huu ni utendakazi mpya, haukuwa kwenye Atmega8, sio kila mtu anajua kuuhusu au haujatajwa kwa sababu za utangamano wa nyuma. Lakini inafaa kabisa kwa kuonyesha wazo kwamba hifadhidata zinafaa kusoma ili kutumia uwezo wote wa chip, pamoja na zile zinazojulikana kidogo. Na hii sio sababu pekee.

Kwa nini tena kusoma hifadhidata?

Kawaida, wahandisi wa Arduino, wakiwa wamecheza vya kutosha na LEDs na AnalogWrites, huanza kuunganisha kila aina ya moduli na chips kwenye ubao, ambayo tayari kuna maktaba yaliyoandikwa. Hivi karibuni au baadaye, maktaba inaonekana ambayo haifanyi kazi inavyopaswa. Kisha mwanadada huyo anaanza kuichuna ili kuirekebisha, halafu...

Na kitu kisichoeleweka kabisa kinatokea hapo, kwa hivyo lazima uende kwa Google, usome mafunzo mengi, utoe sehemu za nambari inayofaa ya mtu na hatimaye ufikie lengo lako. Hii inatoa hisia yenye nguvu ya kufanikiwa, lakini kwa kweli mchakato huo ni kama kuanzisha upya gurudumu kwa kubadilisha pikipiki. Aidha, uelewa wa jinsi baiskeli hii inavyofanya kazi hauzidi kuongezeka. Najua, kwa sababu nilifanya hivi mwenyewe kwa muda mrefu sana.

Ikiwa badala ya shughuli hii ya kusisimua ningetumia siku kadhaa kusoma hati za Atmega328, ningeokoa muda mwingi. Baada ya yote, hii ni microcontroller rahisi.

Kwa hivyo, unahitaji kusoma hifadhidata angalau ili kufikiria jinsi microcontroller inafanya kazi kwa ujumla na nini inaweza kufanya. Na zaidi:

  • kuangalia na kuboresha maktaba za watu wengine. Mara nyingi huandikwa na amateurs sawa ambao huanzisha tena gurudumu; au, kinyume chake, waandishi kwa makusudi wanawafanya wapumbavu kupita kiasi. Wacha iwe kubwa mara tatu na polepole, lakini hakika itafanya kazi;

  • kuwa na uwezo wa kutumia chips katika mradi ambao hakuna mtu ameandika maktaba;

  • ili iwe rahisi kwako kuhama kutoka mstari mmoja wa MK hadi mwingine;

  • hatimaye kuboresha nambari yako ya zamani, ambayo haikuingia kwenye Arduino;

  • kujifunza jinsi ya kudhibiti chip yoyote moja kwa moja kupitia rejista zake, bila kujisumbua na kusoma muundo wa maktaba yake, ikiwa ipo.

Kwa nini uandike kwa rejista moja kwa moja wakati kuna HAL na LL?

Kamusi
HAL, Tabaka la Juu la Kuondoa - maktaba ya kudhibiti kidhibiti kidogo na kiwango cha juu cha uondoaji. Ikiwa unahitaji kutumia kiolesura cha SPI1, unasanidi tu na kuwezesha SPI1 bila kufikiria ni rejista zipi zinawajibika kwa nini.
LL, API ya Kiwango cha Chini - maktaba iliyo na macros au miundo iliyo na anwani za rejista, hukuruhusu kuzipata kwa jina. DDRx, PORTx, PINx kwenye Atmega ni LL.

Mizozo juu ya mada "HAL, LL au rejista" hutokea mara kwa mara kwenye maoni kuhusu Habre. Bila kudai ufikiaji wa maarifa ya astral, nitashiriki tu uzoefu wangu wa amateur na mawazo.

Baada ya kufikiria zaidi au chini ya Atmega na kusoma nakala kuhusu uzuri wa STM32, nilinunua bodi nusu dazeni tofauti - Ugunduzi, na Vidonge vya Bluu, na hata chips tu za bidhaa zangu za nyumbani. Wote walikusanya vumbi kwenye sanduku kwa miaka miwili. Wakati mwingine nilijiambia: "ndio hivyo, kuanzia wikendi hii ninaijua STM," ilizindua CubeMX, ikatengeneza usanidi wa SPI, ikatazama ukuta uliotokana na maandishi, uliotiwa ladha ya hakimiliki za STM, na nikaamua kuwa hii pia ni kwa njia fulani. sana.

Jinsi na kwa nini kusoma hifadhidata ikiwa vidhibiti vidogo ndio hobby yako

Bila shaka, unaweza kujua nini CubeMX aliandika hapa. Lakini wakati huo huo ni wazi kwamba kukumbuka maneno yote na kisha kuandika kwa mkono sio kweli. Na ili kutatua hii, ikiwa nitasahau kwa bahati mbaya kuangalia kisanduku kwenye Mchemraba, ni sawa kabisa.

Miaka miwili imepita, bado nalamba midomo yangu Mpataji wa ST MCU kwa kila aina ya kitamu, lakini zaidi ya ufahamu wangu, chips, na ajali zilikuja makala ya ajabu, ingawa kuhusu STM8. NA ghafla Niligundua kuwa wakati huu wote nilikuwa nikigonga mlango wazi: rejista za STM zimepangwa kwa njia sawa na za MK nyingine yoyote, na Cube sio lazima kufanya kazi nao. Iliwezekana hata? ..

HAL na haswa STM32CubeMX ni zana ya wahandisi wataalamu wanaofanya kazi kwa karibu na chip za STM32. Kipengele kikuu ni kiwango cha juu cha uondoaji, uwezo wa kuhamia haraka kutoka kwa MCU moja hadi nyingine na hata kutoka kwa msingi mmoja hadi mwingine, wakati unabaki ndani ya mstari wa STM32. Hobbyists mara chache hukutana na shida kama hizo - chaguo letu la vidhibiti vidogo, kama sheria, ni mdogo kwa urval wa AliExpress, na mara nyingi tunahama kati ya chipsi tofauti kabisa - tunahama kutoka Atmega hadi STM, kutoka STM hadi ESP, au kitu chochote kipya marafiki wetu wa China. kutupa kwetu. HAL haitasaidia hapa, na kuisoma kutakula muda mwingi.

LL inabaki - lakini kutoka kwake hadi kwa rejista kuna hatua ya nusu. Binafsi, ninaona kuandika macros yangu na anwani za rejista kuwa muhimu: Ninasoma hifadhidata kwa uangalifu zaidi, nadhani ni nini nitahitaji katika siku zijazo na kile ambacho hakika sitaki, ninapanga mipango yangu vizuri, na kwa ujumla, kushinda husaidia kukariri.

Kwa kuongeza, kuna nuance na STM32F103 maarufu - kuna matoleo mawili ya LL yasiyolingana kwa ajili yake, afisa mmoja kutoka STM, wa pili kutoka kwa Leaf Labs, kutumika katika mradi wa STM32duino. Ikiwa utaandika maktaba ya chanzo-wazi (na nilikuwa na haswa kazi kama hiyo), lazima utengeneze matoleo mawili, au ufikie rejista moja kwa moja.

Hatimaye, kuondoa LL, kwa maoni yangu, hurahisisha uhamiaji, hasa ikiwa unapanga juu yake tangu mwanzo wa mradi. Mfano uliokithiri: wacha tuandike Arduino blink kwenye Studio ya Atmel bila 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++);
    } 
}

Ili nambari hii iweze kupepesa LED kwenye ubao wa Kichina na STM8 (kutoka ST Visual Desktop), inatosha kubadilisha anwani mbili ndani yake:

#define DDR_B 0x5007
#define OUT_B 0x5005

Ndiyo, ninatumia kipengele cha kuunganisha LED kwenye ubao maalum, itapunguza polepole sana, lakini itatokea!

Kuna aina gani za hifadhidata?

Katika makala na kwenye vikao, Kirusi na Kiingereza, "datasheets" inamaanisha nyaraka zozote za kiufundi za chips, na mimi hufanya vivyo hivyo katika maandishi haya. Hapo awali, ni aina moja tu ya hati kama hizi:

Datasheet - Tabia za utendaji, sifa za kiufundi na za kiufundi. Lazima kwa sehemu yoyote ya elektroniki. Habari ya usuli ni muhimu kuwa nayo, lakini hakuna mengi ya kusoma ndani yake kwa uangalifu. Hata hivyo, chips rahisi mara nyingi ni mdogo kwa database ili si kuzalisha nyaraka zisizohitajika; kwa kesi hii Mwongozo wa Marejeleo imejumuishwa hapa.

Mwongozo wa Marejeleo - maagizo yenyewe, kitabu cha afya cha kurasa 1000+. Kazi ya kila kitu ambacho kimejaa ndani ya chip imeelezewa kwa undani. Hati kuu ya kusimamia microcontroller. Tofauti karatasi ya data, maagizo yameandikwa kwa anuwai ya MK; yana habari nyingi kuhusu vifaa vya pembeni ambavyo hazipatikani katika muundo wako maalum.

Mwongozo wa Programu au Mwongozo wa Kuweka Maagizo - maagizo ya maagizo ya kipekee ya kidhibiti kidogo. Imeundwa kwa ajili ya wale wanaopanga katika lugha ya Bunge. Waandishi wa mkusanyaji huitumia kikamilifu ili kuboresha msimbo, kwa hivyo kwa ujumla hatutahitaji. Lakini kuangalia hapa ni muhimu kwa uelewa wa jumla, kwa amri fulani maalum kama vile kutoka kwa usumbufu, na pia kwa kutumia kikamilifu kitatuzi.

Ujumbe wa Maombi - vidokezo muhimu vya kutatua shida maalum, mara nyingi kwa mifano ya nambari.

Karatasi ya Errata - maelezo ya kesi za tabia isiyo ya kawaida ya chip na chaguzi za kurekebisha, ikiwa zipo.

Ni nini kwenye hifadhidata

Moja kwa moja kwa Datasheet tunaweza kuhitaji sehemu zifuatazo:

Muhtasari wa Kifaa - ukurasa wa kwanza wa hifadhidata unaelezea kwa ufupi kifaa. Muhimu sana katika hali wakati ulipata chip mahali fulani (uliiona kwenye duka, ikauzwa, ilipata kutaja) na unataka kuelewa ni nini.

General Maelezo - maelezo ya kina zaidi ya uwezo wa chips kutoka kwa mstari.

Pinouts - michoro ya pinout kwa vifurushi vyote vinavyowezekana vya chip (pini gani iko kwenye mguu gani).

Maelezo ya Pini - maelezo ya madhumuni na uwezo wa kila pini.

Ramani ya Kumbukumbu - hatuna uwezekano wa kuhitaji ramani ya anwani kwenye kumbukumbu, lakini wakati mwingine pia inajumuisha meza ya anwani za kuzuia rejista.

Ramani ya usajili - Jedwali la anwani za vizuizi vya rejista, kama sheria, iko kwenye hifadhidata, na ndani Mwongozo wa Marejeleo - mabadiliko tu (kukabiliana na anwani).

Umeme Tabia - katika sehemu hii tunavutiwa sana makadirio ya juu kabisa, ikiorodhesha kiwango cha juu cha mizigo kwa kila chip. Tofauti na Atmega328p isiyoweza kuharibika, MK nyingi hazikuruhusu kuunganisha mizigo mikubwa kwenye pini, ambayo inakuwa mshangao usio na furaha kwa Arduinists.

Habari ya Ufungaji - michoro ya kesi zinazopatikana, muhimu wakati wa kuunda bodi zako.

Mwongozo wa Marejeleo kimuundo lina sehemu zinazotolewa kwa viambajengo maalum vilivyoonyeshwa katika mada yao. Kila sura inaweza kugawanywa katika sehemu tatu:

Mapitio, kuanzishwa, Vipengele - muhtasari wa uwezo wa pembeni;

Kazi Description, Mwongozo wa Matumizi au tu kizuizi kikuu cha sehemu - maelezo ya kina ya maandishi ya kanuni za kifaa cha pembeni na jinsi ya kuitumia;

Msajili - maelezo ya rejista za udhibiti. Katika hali rahisi kama vile GPIO au SPI, hii inaweza kutosha kabisa kuanza kutumia vifaa vya pembeni, lakini mara nyingi bado lazima usome sehemu zilizopita.

Jinsi ya kusoma daftari

Datasheets, kutokana na mazoea, hukutisha kwa wingi wao na wingi wa maneno yasiyoeleweka. Kwa kweli, kila kitu sio cha kutisha sana ikiwa unajua hacks chache za maisha.

Weka msomaji mzuri wa PDF. Karatasi za data zimeandikwa katika mila tukufu ya maagizo ya karatasi; ni nzuri kuchapisha, kuingiza na alamisho za plastiki na kushona. Hypertext ndani yao huzingatiwa kwa kiasi cha kufuatilia. Kwa bahati nzuri, angalau muundo wa hati umeundwa na alama za alama, hivyo msomaji anayefaa na urambazaji rahisi ni muhimu sana.

Hifadhidata sio kitabu cha maandishi cha Stroustrup; inayo hakuna haja ya kusoma kila kitu. Ikiwa ulitumia ushauri uliopita, pata tu sehemu inayotakiwa kwenye bar ya alamisho.

Datasheets, hasa Miongozo ya Marejeleo, inaweza kuelezea uwezo wa sio chip maalum, lakini mstari mzima. Hii ina maana kwamba nusu, au hata theluthi mbili ya maelezo hayafai kwa chip yako. Kabla ya kusoma rejista za TIM7, ingia General Maelezo, je unayo?

Jua Kiingereza kutosha kwa ngazi ya msingi. Laha za data zinajumuisha nusu ya maneno ambayo hayajulikani kwa mzungumzaji mzawa wa wastani, na nusu ya miundo rahisi ya kuunganisha. Pia kuna hifadhidata bora za Kichina katika Kiingereza cha Kichina, ambapo nusu pia ni masharti, na nusu ya pili ni seti ya maneno ya nasibu.

Ukikutana neno lisilojulikana, usijaribu kutafsiri kwa kutumia kamusi ya Kiingereza-Kirusi. Ikiwa umechanganyikiwa hysteresis, basi tafsiri "hysteresis" haitakufanya joto. Tumia Google, Stack Overflow, Wikipedia, vikao, ambapo dhana inayohitajika itakuwa kuelezewa kwa maneno rahisi na mifano.

Njia bora ya kuelewa kile unachosoma ni angalia kwa vitendo. Kwa hivyo, weka ubao wa utatuzi ambao unajijulisha nao, au bora zaidi mbili, ikiwa bado haujaelewa kitu na kuona moshi wa kichawi.

Ni tabia nzuri kuweka hifadhidata yako wakati unapo kusoma mafunzo ya mtu au kusoma maktaba ya mtu mwingine. Inawezekana kabisa kwamba utapata suluhisho bora zaidi kwa shida yako ndani yake. Na kinyume chake - ikiwa huwezi kuelewa kutoka kwa hifadhidata jinsi rejista inavyofanya kazi, google: uwezekano mkubwa, mtu tayari ameelezea kila kitu kwa maneno rahisi au ameacha msimbo wazi kwenye GitHub.

Kamusi

Baadhi ya maneno na alama muhimu za kukusaidia kuzoea hifadhidata kwa haraka. Nilichokumbuka katika siku chache zilizopita, nyongeza na masahihisho yanakaribishwa.

Umeme
VDC, Kweli - "plus", chakula
Aya, Vee - "minus", ardhi
sasa - sasa
voltage - voltage
kuzama mkondo - fanya kazi kama "ardhi" kwa mzigo wa nje
kwa chanzo cha sasa - nguvu mzigo wa nje
pini ya juu ya kuzama/chanzo - pini na "uvumilivu" ulioongezeka wa kupakia

IO
H, Juu - kwenye pini ya Vcc
L, Chini - kwenye pini ya Vss
Impedance ya Juu, Hi-Z, yaliyo - hakuna kitu kwenye pini, "upinzani wa juu", ni karibu hauonekani kwa ulimwengu wa nje.
dhaifu kuvuta juu, dhaifu kuvuta chini – kipingamizi kilichojengewa ndani cha kuvuta/kuvuta chini, takriban sawa na 50 kOhm (angalia hifadhidata). Inatumika, kwa mfano, kuzuia pini ya pembejeo kutoka kwenye hewa, na kusababisha kengele za uongo. Dhaifu - kwa sababu ni rahisi "kumkatiza".
kusukuma kuvuta - modi ya pato ya pini, ambayo inabadilisha kati High ΠΈ Chini - Pato la kawaida kutoka Arduino.
fungua bomba - uteuzi wa modi ya pato ambayo pini inaweza kuwa ama ChiniAu Uzuiaji wa Juu/Kuelea. Kwa kuongeza, karibu kila wakati hii sio "halisi" ya kukimbia wazi; kuna diode za kinga, vipinga, na nini. Hili ni jina la hali ya ardhini/hakuna.
bomba la kweli la wazi - lakini hii ni kukimbia kwa kweli wazi: pini inaongoza moja kwa moja kwenye ardhi ikiwa imefunguliwa, au inabaki katika limbo ikiwa imefungwa. Hii ina maana kwamba, ikiwa ni lazima, voltage kubwa kuliko Vcc inaweza kupitishwa kwa njia hiyo, lakini kiwango cha juu bado kinatajwa katika hifadhidata katika sehemu hiyo. Ukadiriaji wa Juu Kabisa/Votage.

Interfaces
katika mfululizo - imeunganishwa katika mfululizo
kwa mnyororo - kusanya chips kwenye mnyororo kwa kutumia unganisho la serial, na kuongeza idadi ya matokeo.
kuhama - kuhama, kwa kawaida huashiria mabadiliko kidogo. Kwa mtiririko huo, kuhama ΠΈ kuhama - Pokea na usambaze data kidogo kidogo.
latch – lachi inayofunika bafa huku biti zikihamishwa kupitia hiyo. Wakati uhamisho ukamilika, valve inafungua na bits huanza kufanya kazi.
kuingia ndani - Fanya uhamishaji wa hatua kwa hatua, hamisha bits zote kwenye sehemu zinazofaa.
bafa mara mbili, rejista ya kivuli, rejista ya kupakia mapema - uteuzi wa historia, wakati rejista lazima iweze kukubali data mpya, lakini ishikilie hadi wakati fulani. Kwa mfano, kwa PWM kufanya kazi kwa usahihi, vigezo vyake (mzunguko wa wajibu, mzunguko) haipaswi kubadilika hadi mwisho wa mzunguko wa sasa, lakini vigezo vipya vinaweza tayari kuhamishwa. Ipasavyo, zile za sasa zimehifadhiwa rejista ya kivuli, na mpya huanguka ndani rejista ya kupakia mapema, ikiandikwa kwa rejista ya chip inayolingana.

Kila aina ya mambo
prescaler - kiboreshaji cha frequency
kuweka kidogo - Weka kidogo hadi 1
kufuta/kuweka upya kidogo - weka upya kidogo hadi 0 (upya Kipengele cha data cha STM)

Nini kifuatacho

Kwa ujumla, sehemu ya vitendo ilipangwa hapa na onyesho la miradi mitatu kwenye STM32 na STM8, iliyoundwa mahsusi kwa nakala hii kwa kutumia hifadhidata, na balbu za mwanga, SPI, vipima muda, PWM na kukatizwa:

Jinsi na kwa nini kusoma hifadhidata ikiwa vidhibiti vidogo ndio hobby yako

Lakini kuna maandishi mengi, hivyo miradi inatumwa kwa sehemu ya pili.

Ustadi wa kusoma hifadhidata utakusaidia kwa hobby yako, lakini hakuna uwezekano wa kuchukua nafasi ya mawasiliano ya moja kwa moja na wapenzi wenzako kwenye vikao na gumzo. Kwa kusudi hili, bado unahitaji kuboresha Kiingereza chako kwanza kabisa. Kwa hivyo, wale waliomaliza kusoma watapata tuzo maalum: masomo mawili ya bure huko Skyeng na malipo ya kwanza kwa kutumia nambari. HABR2.

Chanzo: mapenzi.com

Kuongeza maoni