{"id":32463,"date":"2019-10-31T21:47:12","date_gmt":"2019-10-31T18:47:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi\/"},"modified":"2019-10-31T21:47:12","modified_gmt":"2019-10-31T18:47:12","slug":"kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","title":{"rendered":"Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi\" src=\"\/wp-content\/uploads\/2019\/04\/ae2537b0263d692c4f79e7b5f7bc0797.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mikroelektroonika on viimaste aastate moes hobi t\u00e4nu imeliselle Arduino'le. Kuid on probleem: piisava huvi korral kasvada DigitalWrite() eemaldumise osas on kiire, aga mis edasi teha \u2013 pole t\u00e4iesti selge. Arduino arendajad on palju pingutanud, et v\u00e4hendada sisenemispiiri oma \u00f6kos\u00fcsteemi, kuid selle piiridest j\u00e4tkuvalt loksub karm elektroonika, mis on kergesti k\u00e4ttev\u00f5itlejale k\u00e4ttesaamatu.<\/p>\n<p><\/p>\n<p>N\u00e4iteks andmelehed. Nagu oleks neis k\u00f5ik olemas, v\u00f5ta ja kasuta. Kuid nende autorid ei sea endale selgelt eesm\u00e4rki populariseerida mikrokontrollereid; m\u00f5nikord <em>tundub<\/em>, et nad kuritarvitavad arusaamatute terminite ja akron\u00fc\u00fcmide kasutamist, et segadusse ajada uudishimu. Kuid mitte k\u00f5ik ei ole nii halb, kui soovida, avaneb larkit.<\/p>\n<p><\/p>\n<p>Selles artiklis jagan kogemust humanitaariga andmelehtedega hobitegevuse eesm\u00e4rgil. Tekst on m\u00f5eldud neile, kes on \u00fcletanud Arduino algtaseme, eeldades v\u00e4hemalt mingit arusaama mikrokontrollerite t\u00f6\u00f6p\u00f5him\u00f5tetest.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Alustan traditsioonilisest<\/p>\n<p><\/p>\n<h3 id=\"migaem-svetodiodom-na-arduino\">LED-i vilgutamisest Arduinoga<\/h3>\n<p><\/p>\n<p>Ja kohe kood:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">void setup() {\nDDRB |= (1&lt;&lt;5);\n}\n\nvoid loop() {\nPINB = (1&lt;&lt;5);\nfor (volatile uint32_t k=0; k&lt;100000; k++);\n}<\/code><\/pre>\n<p><\/p>\n<p>\u201eMis see on? \u2013 K\u00fcsib kogenud lugeja. \u2013 Miks kirjutad midagi PINB siseregistrisse? See on ju ainult lugemiseks!\u201c T\u00f5epoolest, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.arduino.cc\/en\/Reference\/PortManipulation\">Arduino dokumentatsioon<\/a><\/noindex>, nagu enamik veebis olevaid \u00f5ppeartikleid, v\u00e4idab, et see register on ainult lugemiseks. Ma ise arvasin samuti nii, kuni lugesin uuesti <noindex><a rel=\"nofollow\" href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf\">andmelehte<\/a><\/noindex> Atmega328p jaoks, valmistades seda artiklit. Ja seal:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi\" src=\"\/wp-content\/uploads\/2019\/04\/4c754bda59d9f18a38209cc32f0fb3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on suhteliselt uus funktsioon, seda polnud Atmega8-l, paljud ei tea temast v\u00f5i ei maini seda tagurpidi \u00fchilduvuse kaalutlustel. Kuid \u00fcsna t\u00f5hus m\u00f5te on demonstreerida, et andmelehti tasub lugeda, et kasutada kiibi k\u00f5iki v\u00f5imalusi, sealhulgas v\u00e4he teada olevaid. Ja see ei ole ainus p\u00f5hjus.<\/p>\n<p><\/p>\n<h2 id=\"zachem-esche-chitat-datashity\">Miks veel lugeda andmelehti<\/h2>\n<p><\/p>\n<p>Tavaliselt, p\u00e4rast LED-de ja AnalogWrite'idega katsetamist hakkavad Arduinode kasutajad \u00fchendama erinevaid mooduleid ja kiipe, mille jaoks on juba kirjutatud raamatukogud. Varsti v\u00f5i hiljem ilmub raamatukogu, mis ei t\u00f6\u00f6ta nii, nagu peaks. Siis hakkab entusiast seda parema tulemuse saavutamiseks s\u00f6\u00f6vitama ja seal\u2026<\/p>\n<p><\/p>\n<p>Seal toimub midagi t\u00e4iesti arusaamatut, seega peab Google'is ringi otsima, lugema lugematuid \u00f5petusi, kohandama kellelegi sobivat koodi ja l\u00f5puks saavutama oma. See annab v\u00f5imsa saavutuse tunde, kuid tegelikult meenutab protsess mootorratta tagasip\u00f6\u00f6ramist uue jalgratta leiutamist. Samas ei suurene arusaamine, kuidas see jalgratas t\u00f6\u00f6tab. Tean, et olen sellega \u00fcsna pikalt tegelenud.<\/p>\n<p><\/p>\n<p>Kui ma oleksin selle p\u00f5neva tegevuse asemel paar p\u00e4eva veetnud Atmega328 dokumentatsiooni \u00f5ppides, oleksin tohutult aega kokku hoitud. L\u00f5ppude l\u00f5puks on see \u00fcsna lihtne mikrokontroller.<\/p>\n<p><\/p>\n<p>Seega tuleb andmelehti lugeda v\u00e4hemalt selleks, et aru saada, kuidas mikrokontroller \u00fcldiselt t\u00f6\u00f6tab ja mida ta oskab teha. Ja veel:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>et kontrollida ja optimeerida teiste teeke. Need on sageli kirjutatud sarnaste entusiastide poolt, kes leiutavad jalgratast; v\u00f5i vastupidi, autorid teevad nendesse tahtlikult liialdatud kaitse rumalate vastu. Las see ole kolm korda rohkem ja aeglasem, aga v\u00e4hemalt t\u00f6\u00f6tab kindlalt;<\/p>\n<p>\n<\/li>\n<li>\n<p>et kasutada projektis kiipe, mille kohta keegi pole teeki kirjutanud;<\/p>\n<p>\n<\/li>\n<li>\n<p>et lihtsustada enda \u00fclesande \u00fcleviimist \u00fche mikrokontrolleri seeriast teise;<\/p>\n<p>\n<\/li>\n<li>\n<p>et l\u00f5puks optimeerida oma vana koodi, mis ei mahtunud kuidagi Arduinosse;<\/p>\n<p>\n<\/li>\n<li>\n<p>et \u00f5ppida juhtima mistahes kiipi otse selle registrite kaudu, ilma et peaksin vaeva n\u00e4gema oma teekide struktuuri uurimisega, kui neid \u00fcldse on.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"zachem-pisat-v-registry-napryamuyu-kogda-est-hal-i-ll\">Miks kirjutada registritesse otse, kui on olemas HAL ja LL?<\/h2>\n<p><\/p>\n<p><em>S\u00f5nastik<\/em><br \/>\n<em><strong>HAL, k\u00f5rge abstraktsioonitaseme kiht<\/strong> \u2013 mikrokontrolleri juhtimise teek k\u00f5rgel abstraktsioonitasemel. Kui on vaja kasutada SPI1 liidest, seadista ja l\u00fclita lihtsalt SPI1 sisse, muretsemata selle \u00fcle, millised registrid mille eest vastutavad.<br \/>\n<strong>LL, madala taseme API<\/strong> \u2013 teek, mis sisaldab makrosid v\u00f5i struktuure registrite aadressidega, v\u00f5imaldades neile nime kaudu juurde p\u00e4\u00e4seda. DDRx, PORTx, PINx Atmega puhul \u2013 see on LL.<\/em><\/p>\n<p><\/p>\n<p>Arutelud teemal 'HAL, LL v\u00f5i registrid' toimuvad regulaarselt kommentaarides Habr's. Ilma astralse teadlikkuse pretendeerimata jagan lihtsalt oma hobikogemusi ja m\u00f5tteid.<\/p>\n<p><\/p>\n<p>P\u00e4rast suhteliselt tuttavaks saamist Atmega ja STM32 imeliste omaduste kohta lugemist ostsin ma pool tosinat erinevat plaati \u2013 nii Discovery, kui ka \"Sinised Tabletid\" ja isegi lihtsalt kiipe oma projektide jaoks. Need on viimased kaks aastat karbis tolmu kogunud. Vahepeal \u00fctlesin endale: \u201ek\u00f5ik, alates sellest n\u00e4dalavahetusest hakkan STM-i \u00f5ppima\u201d, k\u00e4ivitasin CubeMX, genereerisin SPI seadistuse, vaatasin selle tulemusena tekkinud tekstimassi, mis oli rikkalikult kaunistatud STM-i kopiraitiga, ja otsustasin, et see on kuidagi liiga palju.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi\" src=\"\/wp-content\/uploads\/2019\/04\/d83be97ba2767121f4be20d524000afe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Muidugi on v\u00f5imalik aru saada, mida CubeMX siin kirjutas. Aga samas on selge, et k\u00f5ikide v\u00e4ljendite meeldej\u00e4tmine, et neid hiljem k\u00e4sitsi kirjutada, on ebareaalne. Ja kui ma juhuslikult unustan K\u00fcbide seadetes mingi linnukese panna, siis on see \u00e4ra keeramine t\u00e4iesti teine asi.<\/p>\n<p><\/p>\n<p>Kaks aastat on m\u00f6\u00f6das ja ma ikka imetlen <noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=fr.appsolute.st&amp;hl=ru\">ST MCU Finder<\/a><\/noindex> igasuguseid maitsvaid, kuid minu arusaamiseks k\u00e4tte saamata kiipe ja juhuslikult sattusin ma <noindex><a rel=\"nofollow\" href=\"https:\/\/lujji.github.io\/blog\/bare-metal-programming-stm8\/\">suurep\u00e4rase artikli<\/a><\/noindex>, kuigi see k\u00e4sitleb STM8-d. Ja <em>mainimine teemas<\/em> m\u00f5istsin, et kogu selle aja olin justkui avatud ukse taga: STM-i registrid on sama moodi nagu igal muul mikroprotsessoril ja nende kasutamiseks pole Cube kohustuslik. <em>Aga kuidas, nii sai ju teha...?<\/em><\/p>\n<p><\/p>\n<p>HAL ja konkreetselt STM32CubeMX on t\u00f6\u00f6riist professionaalsetele inseneridele, kes teevad tihedalt t\u00f6\u00f6d STM32 kiipidega. Peamine eelis on k\u00f5rge abstraktsioonitase, v\u00f5imalus kiiresti migreeruda \u00fche mikroprotsessorilt teisele ning isegi \u00fche tuumalt teisele, j\u00e4\u00e4des siiski STM32 pere raamesse. Huvilised seisavad selliste probleemidega harva silmitsi \u2013 meie mikroprotsessorite valik on tavaliselt piiratud AliExpressi valikuga ja me r\u00e4ndame tihemini radikaalselt erinevate kiipide vahel \u2013 liikudes Atmega pealt STM-ile, STM-ilt ESP-le v\u00f5i sellele, mis uue projektiga hiina s\u00f5brad meile toovad. HAL siin ei aita, ja selle \u00f5ppimine v\u00f5tab omajagu aega.<\/p>\n<p><\/p>\n<p>J\u00e4rele j\u00e4\u00e4b LL \u2013 kuid sealt registriteni on pool sammu. Isiklikult leian, et oma makrode kirjutamine registri aadressidega on kasulik: uurin hoolikamalt andmelehte, m\u00f5tlen, mida mul tulevikus vaja v\u00f5ib minna, ja mis kindlasti ei, struktureerin oma programme paremini ning \u00fcldiselt aitab see meeldej\u00e4tmisele.<\/p>\n<p><\/p>\n<p>Lisaks on populaarse STM32F103-ga probleem, et selle jaoks on olemas kaks \u00fcksteisega kokkusobimatut LL versiooni, \u00fcks ametlik STM-i poolt, teine \u2013 Leaf Labs\u2019ilt, mida kasutatakse STM32duino projektis. Kui kirjutada avatud l\u00e4htekoodiga teek (ja mul oli just <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ontaelio\/DMdriverSTM32F1\">selline \u00fclesanne<\/a><\/noindex>), tuleb kas teha kaks versiooni v\u00f5i p\u00f6\u00f6rduda otse registrite poole.<\/p>\n<p><\/p>\n<p>L\u00f5puks muudab LL loobumine minu arvates migratsiooni lihtsamaks, eriti kui arvestada sellega projekti algusest peale. \u00c4\u00e4rmuslik n\u00e4ide: kirjutame Arduinole m\u00f5eldud vilkumise Atmel Studios ilma LL-ta:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">#include &lt;stdint.h&gt;\n\n#define _REG(addr) (*(volatile uint8_t*)(addr))\n\n#define DDR_B 0x24\n#define OUT_B 0x25\n\nint main(void)\n{\n    volatile uint32_t k;\n\n    _REG(DDR_B) |= (1&lt;&lt;5);\n\n    while(1)\n    {\n        _REG(OUT_B) |= (1&lt;&lt;5);\n        for (k=0; k&lt;50000; k++);\n        _REG(OUT_B) &amp;= ~(1&lt;&lt;5);\n        for (k=0; k&lt;50000; k++);\n    } \n}<\/code><\/pre>\n<p><\/p>\n<p>Kuna see kood peab vilkuma STM8 (ST Visual Desktop) Hiina plaadil, piisab kahe aadressi muutmisest:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">#define DDR_B 0x5007\n#define OUT_B 0x5005<\/code><\/pre>\n<p><\/p>\n<p>Jah, kasutan konkreetse plaadi LED-\u00fchenduse omadust, vilkuma hakkab see v\u00e4ga aeglaselt, aga siiski vilgub!<\/p>\n<p><\/p>\n<h2 id=\"kakie-byvayut-datashity\">Millised on andmelehed<\/h2>\n<p><\/p>\n<p>Artiklid ja foorumid, nii venekeelsed kui ka ingliskeelsed, m\u00f5istavad 'andmelehtedena' igasugust tehnilist dokumentatsiooni kiipide kohta, nii et teen seda ka sellel tekstil. Formaalselt on need vaid \u00fcks sellise dokumentatsiooni t\u00fc\u00fcp:<\/p>\n<p><\/p>\n<p><strong>Datasheet<\/strong> \u2013 tehnilised omadused (TTO), mis on iga elektroonilise komponendi jaoks kohustuslikud. Abiks olev info, mida tasub k\u00e4ep\u00e4rast hoida, kuid s\u00fcvenemiseks ei leia seal tavaliselt midagi huvitavat. Siiski, lihtsamad kiibid piirduvad sageli ainult andmelehega, et mitte luua liigseid dokumente; sel juhul <em>Reference Manual<\/em> taotletakse samuti siia.<\/p>\n<p><\/p>\n<p><strong>Reference Manual<\/strong> \u2013 tegelikult kasutusjuhend, mahukas raamatuleht, kus on \u00fcle 1000 lehe. Detailselt kirjeldatakse k\u00f5ike, mis kiibi sisse mahub. Peamine dokument mikrokontrolleri omandamiseks. Erinevalt <em>datasheet<\/em>, kirjutatakse juhiseid laia tootevaliku kohta, kus on palju teavet perifeeria kohta, mida teie konkreetses mudelis ei ole.<\/p>\n<p><\/p>\n<p><strong>Programming Manual<\/strong> v\u00f5i <strong>Instruction Set Manual<\/strong> \u2013 juhend mikrokontrolleri unikaalsete k\u00e4skude kohta. M\u00f5eldud neile, kes programmeerivad Assembly keeles. Kompilaatorite autorid kasutavad seda aktiivselt koodi optimeerimiseks, seega ei ole meile \u00fcldjuhul vajalik. Siiski on kasulik siia vaadata \u00fcldise arusaamiseks, m\u00f5ne spetsiifilise k\u00e4su t\u00fc\u00fcpide jaoks, nagu katkendest v\u00e4ljumine, samuti aktiivselt silumist kasutades.<\/p>\n<p><\/p>\n<p><strong>Application Note<\/strong> \u2013 kasulikud n\u00f5uanded konkreetsete probleemide lahendamiseks, sageli koodin\u00e4idetega.<\/p>\n<p><\/p>\n<p><strong>Errata Sheet<\/strong> \u2013 kirjeldus kiibi ebat\u00fc\u00fcpilisest k\u00e4itumisest koos variantidega, kuidas seda v\u00e4ltida, kui need on olemas.<\/p>\n<p><\/p>\n<h2 id=\"chto-est-v-datashitah\">Mida leida andmelehtedest<\/h2>\n<p><\/p>\n<p>Otse <em>Datasheet<\/em> v\u00f5ime vajada selliseid jaotisi:<\/p>\n<p><\/p>\n<p><strong>Device Summary<\/strong> \u2013 andmelehe esimene leht r\u00e4\u00e4gib l\u00fchidalt seadme kohta. V\u00e4ga kasulik, kui oleme kuskil chiibi leidnud (n\u00e4inud poes, v\u00e4lja l\u00f5iganud, kohtunud mainimisega) ja soovime aru saada, mis see on.<\/p>\n<p><\/p>\n<p><strong>General Description<\/strong> \u2013 \u00fcksikasjalik kirjeldus kiipide funktsioonidest.<\/p>\n<p><\/p>\n<p><strong>Pinouts<\/strong> \u2013 jalam\u00e4rgid k\u00f5ikide kiibi v\u00f5imalike korpuste jaoks (millisel pinnal milline pin).<\/p>\n<p><\/p>\n<p><strong>Pin Description<\/strong> \u2013 iga pinni eesm\u00e4rgi ja funktsioonide kirjeldus.<\/p>\n<p><\/p>\n<p><strong>Memory Map<\/strong> \u2013 m\u00e4luaadresside kaart, mis meil t\u00f5en\u00e4oliselt ei ole vajalik, kuid m\u00f5nikord sisaldab see ka registriblokside aadresside tabelit.<\/p>\n<p><\/p>\n<p><strong>Register Map<\/strong> \u2013 registriblokside aadresside tabel on tavaliselt just andmelehtedes, kuid <em>Ref Manual<\/em> \u2013 ainult nihked (<em>address offsets<\/em>).<\/p>\n<p><\/p>\n<p><strong>Electrical Characteristics<\/strong> \u2013 selles osas huvitavad meid eelk\u00f5ige <strong>absolute maximum ratings<\/strong>, mis loetlevad maksimaalsed koormused kiibile. Erinevalt purunematust Atmega328p-st, ei luba enamik mikrokontrollereid pinatele t\u00f5siseid koormusi, mis on arduino-kasutajatele ebameeldiv \u00fcllatus.<\/p>\n<p><\/p>\n<p><strong>Package Information<\/strong> \u2013 saadaval olevate korpuste joonised, mis on kasulikud oma kaartide projekteerimisel.<\/p>\n<p><\/p>\n<p><em>Reference Manual<\/em> koosneb struktuurselt osadest, mis on p\u00fchendatud konkreetsetele periferiakomplektidele, nagu on nende p\u00e4ises m\u00e4rgitud. Iga peat\u00fckk on tinglikult jagatav kolmeks osaks:<\/p>\n<p><\/p>\n<p><strong>Overview<\/strong>, <strong>Sissejuhatus<\/strong>, <strong>Features<\/strong> \u2013 periferiakomplekti funktsioonide \u00fclevaade;<\/p>\n<p><\/p>\n<p><strong>Functional Description<\/strong>, <strong>Usage Guide<\/strong> v\u00f5i lihtsalt sektsiooni peamine plokk \u2013 p\u00f5hjalik tekstiline kirjeldus periferiakomplekti t\u00f6\u00f6p\u00f5him\u00f5tetest ja kasutamisviisidest;<\/p>\n<p><\/p>\n<p><strong>Registers<\/strong> \u2013 juhtimisregistrite kirjeldus. Lihtsate juhtumite, nagu GPIO v\u00f5i SPI puhul, v\u00f5ib sellest piisata, et periferiat alustada, kuid sageli tuleb siiski lugeda ka varasemaid osi.<\/p>\n<p><\/p>\n<h2 id=\"kak-chitat-datashity\">Kuidas lugeda andmelehti<\/h2>\n<p><\/p>\n<p>Andmelehed v\u00f5ivad esialgu hirmutada oma mahukuse ja arusaamatute s\u00f5nade rohkusest. Tegelikult pole k\u00f5ik nii hirmus, kui teada m\u00f5ned n\u00e4pun\u00e4ited.<\/p>\n<p><\/p>\n<p>Installige <strong>hea PDF-lugeja<\/strong>. Andmelehed on kirjutatud pitseerimisn\u00f5uete traditsioone j\u00e4lgides, neid on tore v\u00e4lja printida, plastikutega joonistada ja kokku \u00f5mmelda. H\u00fcpteksti leidub neis j\u00e4lje kogustes. \u00d5nneks on dokumendi struktuur v\u00e4hemalt jagatud jaotistega, seega on hea lugeja, millel on mugav navigeerimine, v\u00e4ga vajalik.<\/p>\n<p><\/p>\n<p>Andmeleht \u2013 mitte Stroustrupi \u00f5pik, seal <strong>ei pea k\u00f5ike j\u00e4rjest lugema<\/strong>. Kui kasutasite eelnevat n\u00f5uannet \u2013 leidke lihtsalt vajalik jaotis j\u00e4rjehoidjate paneelilt.<\/p>\n<p><\/p>\n<p>Andmelehed, eriti <em>Reference Manuals<\/em>, v\u00f5ivad kirjeldada mitte konkreetse kiibi v\u00f5imalusi, vaid <strong>kogu seeriat<\/strong>. See, et t\u00e4hendab, et pool v\u00f5i isegi kaks kolmandikku teabest ei puutu teie kiibit\u00f6\u00f6tlusse. Enne TIM7 registrite uurimist kontrollige, <em>General Description<\/em>, kas see on teie jaoks olemas.<\/p>\n<p><\/p>\n<p>Teadma <strong>ingliskeelt<\/strong> piisavalt <strong>baastasemel<\/strong>. Andmelehed koosnevad poolest keerukatest terminidest, mis pole tavalisele keelek\u00f5nelejale tuttavad, ja poolest lihtsatest sidusstruktuuridest. Ka on suurep\u00e4raseid Hiina andmelehti hiina inglise keeles, kus pool on samuti terminid ja teine pool on juhuslik s\u00f5nastik.<\/p>\n<p><\/p>\n<p>Kui kohtate <strong>tundmatut s\u00f5na<\/strong>, \u00e4rge proovige seda t\u00f5lkida inglise-vene s\u00f5naraamatuga. Kui teil on segadus <em>histeresis<\/em>, siis t\u00f5lge \"histeresis\" teid ei aita. Kasutage Google'i, Stack Overflow't, Vikipeediat, foorumeid, kus vajaliku m\u00f5iste selgitatakse <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/5357918\/what-does-hysteresis-mean-and-how-does-it-apply-to-computer-science-or-programmi\">lihtsate s\u00f5nadega koos n\u00e4idistega<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Parim viis loetut m\u00f5ista on <strong>kontrollida praktikas<\/strong>. Seet\u00f5ttu hoidke k\u00e4ep\u00e4rast arendusplaati, millega olete tuttav, v\u00f5i veel parem, kahte \u2013 juhuks, kui te ei m\u00f5ista midagi ja n\u00e4ete seda maagilist suitsu.<\/p>\n<p><\/p>\n<p>On kasulik hoida andmeleht k\u00e4ep\u00e4rast, kui te <strong>loete kellegi \u00f5petust<\/strong> v\u00f5i uurite kellegi teise teeki. On t\u00e4iesti v\u00f5imalik, et leiate sealt oma \u00fclesandeks optimaalsema lahenduse. Ja vastupidi \u2013 kui andmelehe p\u00f5hjal ei suuda te kuidagi aru saada, kuidas register t\u00f6\u00f6tab, otsige see Google'ist: t\u00f5en\u00e4oliselt on keegi juba k\u00f5ik selgeks teinud lihtsate s\u00f5nadega v\u00f5i j\u00e4tnud GitHub'i selgelt arusaadava koodi.<\/p>\n<p><\/p>\n<h2 id=\"slovarik\">S\u00f5nastik<\/h2>\n<p><\/p>\n<p>M\u00f5ned kasulikud s\u00f5nad ja t\u00e4hised, mis aitavad teil andmelehtedega kiiremini harjuda. K\u00f5ik, mis tuli meelde viimase paari p\u00e4eva jooksul, t\u00e4iustused ja parandused on teretulnud.<\/p>\n<p><\/p>\n<p><em>Elektritsiteet<\/em><br \/>\n<strong>Vcc<\/strong>, <strong>Vdd<\/strong> \u2013 \"pluss\", toide<br \/>\n<strong>Vss<\/strong>, <strong>Vee<\/strong> \u2013 \"miinus\", maa<br \/>\n<strong>current<\/strong> \u2013 vool<br \/>\n<strong>voltage<\/strong> \u2013 pinged<br \/>\n<strong>to sink current<\/strong> \u2013 t\u00f6\u00f6tama \"maa\" all v\u00e4list koormust<br \/>\n<strong>to source current<\/strong> \u2013 toitma v\u00e4list koormust<br \/>\n<strong>high sink\/source pin<\/strong> \u2013 pin, millel on suurenenud \"tolerantsus\" koormuse suhtes<\/p>\n<p><\/p>\n<p><em>IO<\/em><br \/>\n<strong>H, High<\/strong> \u2013 pinil Vcc<br \/>\n<strong>L, Low<\/strong> \u2013 pinil Vss<br \/>\n<strong>High Impedance<\/strong>, <strong>Hi-Z<\/strong>, <strong>floating<\/strong> \u2013 pinil ei ole midagi, \"k\u00f5rge takistus\", see on tegelikult v\u00e4lismaailmale n\u00e4htamatu.<br \/>\n<strong>weak pull up<\/strong>, <strong>weak pull down<\/strong> \u2013 sisse ehitatud t\u00f5mbav\/push-pull takistus, umbes 50 k\u03a9 (vt andmelehte). Kasutatakse n\u00e4iteks, et sisendpin ei rippuks \u00f5hus, p\u00f5hjustades valeh\u00e4ireid. <em>Weak<\/em> \u2013 sest seda on lihtne \"\u00fcles murda\".<br \/>\n<strong>push pull<\/strong> \u2013 v\u00e4ljundre\u017eiim pinil, kus see vaheldub <em>High<\/em> ja <em>Madal<\/em> \u2013 tavaline V\u00c4LJUND Arduino'ga.<br \/>\n<strong>avatud \u00e4ravool<\/strong> \u2013 t\u00e4histab v\u00e4ljundi re\u017eiimi, kus pin v\u00f5ib olla kas <em>Madal<\/em>, v\u00f5i <em>K\u00f5rge takistus \/ Ujuv<\/em>. Siiski pole see peaaegu kunagi \"p\u00e4ris\" avatud \u00e4ravool, seal on kaitse dioodid, takistid ja muud asjad. See on lihtsalt re\u017eiimi t\u00e4histus maa \/ mitte midagi.<br \/>\n<strong>p\u00e4ris avatud \u00e4ravool<\/strong> \u2013 aga see on juba p\u00e4ris avatud \u00e4ravool: pin juhib otseselt maapinda, kui see on avatud, v\u00f5i on ujuvas olekus, kui see on suletud. See t\u00e4hendab, et selle kaudu saab vajadusel saata pinget \u00fcle Vcc, kuid maksimaalne v\u00e4\u00e4rtus on siiski m\u00e4\u00e4ratud andmelehel osas <em>Absoluutsed maksimaalsed hinnangud \/ Pinge<\/em>. <\/p>\n<p><\/p>\n<p><em>Liidesed<\/em><br \/>\n<strong>j\u00e4rjestikku<\/strong> \u2013 \u00fchendatud j\u00e4rjestikku<br \/>\n<strong>ahelasse<\/strong> \u2013 \u00fchendades kiibid ahelasse j\u00e4rjestikku, suurendades v\u00e4ljundite arvu.<br \/>\n<strong>sift<\/strong> \u2013 nihked, tavaliselt t\u00e4histab bitnihke. Vastavalt, <strong>sift sisse<\/strong> ja <strong>sift v\u00e4lja<\/strong> \u2013 andmete vastuv\u00f5tmine ja edastamine bititi.<br \/>\n<strong>lukk<\/strong> \u2013 l\u00fckand, mis katab puhverserveri, kuni bitid on edastatud. Kui edastus on l\u00f5ppenud, avatakse l\u00fckand, bitid hakkavad t\u00f6\u00f6tama.<br \/>\n<strong>kella sisse<\/strong> \u2013 teha bititi edastus, nihutada k\u00f5ik bitid vajalikesse kohtadesse.<br \/>\n<strong>topeltpuhver<\/strong>, <strong>vari register<\/strong>, <strong>eelregistreerimisregister<\/strong> \u2013 t\u00e4histab olukorda, kus register peab olema suuteline v\u00f5tma uusi andmeid, kuid hoidma neid kuni teatud hetkeni. N\u00e4iteks, et PWM-i korras t\u00f6\u00f6tamiseks ei tohiks tema parameetrid (t\u00e4htaeg, sagedus) muutuda, kuni praegune ts\u00fckkel on l\u00f5ppenud, kuid uued parameetrid saavad juba edastatud. Seega hoitakse praeguseid <em>vari register<\/em>, ja uued toimetatakse <em>eelregistreerimisregister<\/em>, olles kirjutatud vastavasse kiibi registrisse.<\/p>\n<p><\/p>\n<p><em>Iga asi<\/em><br \/>\n<strong>eeltakistus<\/strong> \u2013 sageduse jaotaja<br \/>\n<strong>seada bit<\/strong> \u2013 seada bit 1-ks<br \/>\n<strong>t\u00fchjendada \/ l\u00e4htestada bit<\/strong> \u2013 l\u00e4htestada bit 0-ks (<em>\u00fclestartimine<\/em> \u2013 STM andmelehtede funktsioon)<\/p>\n<p><\/p>\n<h3 id=\"chto-dalshe\">Mis edasi<\/h3>\n<p><\/p>\n<p>Tegelikult oli siin plaanitud praktiline osa, demonstreerides kolme projekti STM32 ja STM8, mis on spetsiaalselt selle artikli jaoks loodud andmelehtede abil, koos lampide, SPI, ajutite, PWM-i ja katkestustega:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi\" src=\"\/wp-content\/uploads\/2019\/04\/8929bad65dad7473a81a221281c43557.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid teksti l\u00e4heb liiga palju, seet\u00f5ttu saadetakse projektid teise ossa.<\/p>\n<p><\/p>\n<p>Andmelehtede lugemise oskus aitab teil hobiga hakkama saada, kuid ei asenda sugugi elavat suhtlemist kolleegidega foorumites ja vestlustes. Selleks tuleb siiski k\u00f5igepealt inglast keelt paremini osata. Seega neile, kes selle l\u00e4bi lugesid \u2013 eriline auhind: kaks tasuta tundi Skyengis esimese makse puhul koodi <code>HABR2<\/code>.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skyeng\/blog\/449624\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0438\u043a\u0440\u043e\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430 \u2013 \u043c\u043e\u0434\u043d\u043e\u0435 \u0443\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043b\u0435\u0442 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u043c\u0443 Arduino. \u041d\u043e \u0432\u043e\u0442 \u0431\u0435\u0434\u0430: \u043f\u0440\u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0442\u0438 DigitalWrite() \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e, \u0430 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u2013 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u044f\u0441\u043d\u043e. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Arduino \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u043b\u0438 \u043d\u0435\u043c\u0430\u043b\u043e \u0443\u0441\u0438\u043b\u0438\u0439 \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0433\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u0441\u0432\u043e\u044e \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043d\u043e \u0437\u0430 \u0435\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043a\u043e\u043b\u044b\u0448\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u043d\u044b\u0439 \u043b\u0435\u0441 \u0441\u0443\u0440\u043e\u0432\u043e\u0439 \u0441\u0445\u0435\u043c\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0438, \u043c\u0430\u043b\u043e\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u044b. \u0412\u0440\u043e\u0434\u0435 \u0431\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24267,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-32463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0438\u043a\u0440\u043e\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u044b, \u0435\u0441\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u2013 \u0432\u0430\u0448\u0435 \u0445\u043e\u0431\u0431\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0438\u043a\u0440\u043e\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kuidas ja miks lugeda andmelehti, kui mikrokontrollerid on teie hobi | ProHoster","description":"Mikroelektroonika.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u0442\u0430\u0448\u0438\u0442\u044b, \u0435\u0441\u043b\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u2013 \u0432\u0430\u0448\u0435 \u0445\u043e\u0431\u0431\u0438 | ProHoster","og:description":"\u041c\u0438\u043a\u0440\u043e\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430.","og:url":"https:\/\/prohoster.info\/et\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:12+00:00","article:modified_time":"2019-10-31T18:47:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32463","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:00:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:58:24","updated":"2026-01-21 11:00:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32463"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32463\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24267"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}