{"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\/da\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","title":{"rendered":"Hvordan og hvorfor man l\u00e6ser datablade, hvis mikrocontrollere er din hobby","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Hvordan og hvorfor man l\u00e6ser datablade, hvis mikrocontrollere er din hobby\" src=\"\/wp-content\/uploads\/2019\/04\/ae2537b0263d692c4f79e7b5f7bc0797.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mikroelektronik er en popul\u00e6r interesse i de seneste \u00e5r takket v\u00e6re det fantastiske Arduino. Men her er problemet: med den rette interesse bliver man hurtigt tr\u00e6t af DigitalWrite(), og hvad man skal g\u00f8re derfra \u2013 er ikke helt klart. Arduino-udviklerne har gjort en stor indsats for at s\u00e6nke indgangsbarrieren til deres \u00f8kosystem, men uden for det st\u00e5r der stadig en m\u00f8rk skov af kompleks elektronik, som er sv\u00e6rt tilg\u00e6ngelig for hobbyisten.<\/p>\n<p><\/p>\n<p>For eksempel databladene. De ser ud til at indeholde alt, hvad du beh\u00f8ver \u2013 tag det og brug det. Men deres forfattere har tydeligvis ikke som m\u00e5l at popularisere mikrocontrollere; nogle gange <em>f\u00f8les det<\/em>, at de bevidst misbruger uforst\u00e5elige termer og forkortelser til at beskrive enkle ting for at forvirre den uindviede. Men alt h\u00e5b er ikke ude; med vilje \u00e5bner det sig.<\/p>\n<p><\/p>\n<p>I denne artikel vil jeg dele erfaringer fra en humanist med databladene til hobbyform\u00e5l. Teksten er beregnet til dem, der er vokset ud af Arduino-bukserne, og den foruds\u00e6tter en vis forst\u00e5else for, hvordan mikrocontrollere fungerer.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Lad mig begynde med den traditionelle<\/p>\n<p><\/p>\n<h3 id=\"migaem-svetodiodom-na-arduino\">Blinke med en LED p\u00e5 Arduino<\/h3>\n<p><\/p>\n<p>Og straks koden:<\/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>\"Hvad er dette? \u2013 vil den erfarne l\u00e6ser sp\u00f8rge. \u2013 Hvorfor skriver du noget til indgangen PINB? Den er jo kun til l\u00e6sning!\" Faktisk, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.arduino.cc\/en\/Reference\/PortManipulation\">dokumentationen for Arduino<\/a><\/noindex>, ligesom de fleste undervisningsartikler p\u00e5 internettet, h\u00e6vder, at denne registrering er read-only. Jeg troede det ogs\u00e5, indtil jeg genl\u00e6ste <noindex><a rel=\"nofollow\" href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf\">datablad<\/a><\/noindex> Atmega328p, mens jeg forberedte denne artikel. Og der st\u00e5r:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan og hvorfor man l\u00e6ser datablade, hvis mikrocontrollere er din hobby\" src=\"\/wp-content\/uploads\/2019\/04\/4c754bda59d9f18a38209cc32f0fb3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dette er en relativt ny funktion, som ikke var til stede p\u00e5 Atmega8; ikke alle kender den, eller n\u00e6vner den af hensyn til bagudkompatibilitet. Men den er helt brugbar til at demonstrere tanken om, at databladene skal l\u00e6ses for at kunne udnytte alle chipens funktioner, inklusive de mindre kendte. Og det er ikke den eneste grund.<\/p>\n<p><\/p>\n<h2 id=\"zachem-esche-chitat-datashity\">Hvorfor skal man ellers l\u00e6se databladene<\/h2>\n<p><\/p>\n<p>Normalt set begynder Arduino-entusiaster, efter at de har leget med lysdioder og AnalogWrite, at tilslutte forskellige moduler og chips til kortet, for hvilke der allerede er skrevet biblioteker. Tidligt eller sent dukker der et bibliotek op, der ikke fungerer som det skal. S\u00e5 begynder entusiasteren at rode med det for at reparere det, men d\u00e9r\u2026<\/p>\n<p><\/p>\n<p>Der sker noget kategorisk uforst\u00e5eligt, s\u00e5 man m\u00e5 ty til Google, l\u00e6se utallige tutorials, snuppe dele af andres kode og endelig opn\u00e5 sit m\u00e5l. Det giver en st\u00e6rk f\u00f8lelse af pr\u00e6station, men i virkeligheden minder processen om at opfinde cyklen ved at reverse-engineere en motorcykel. Der kommer ikke mere forst\u00e5else for, hvordan denne cykel fungerer. Jeg ved det, fordi jeg selv har besk\u00e6ftiget mig med det i lang tid.<\/p>\n<p><\/p>\n<p>Hvis jeg i stedet for denne sp\u00e6ndende besk\u00e6ftigelse havde brugt et par dage p\u00e5 at studere dokumentationen til Atmega328, ville jeg have sparet en enorm m\u00e6ngde tid. Det er trods alt en ganske simpel mikrokontroller.<\/p>\n<p><\/p>\n<p>Dermed skal man l\u00e6se databladene, i det mindste for at have en id\u00e9 om, hvordan mikrokontrolleren overhovedet er bygget og hvad den kan g\u00f8re. Og desuden:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>for at kunne kontrollere og optimere andres biblioteker. De skrives ofte af ligesindede, der opfinder cyklen; eller ogs\u00e5 g\u00f8r forfatterne med vilje overdreven beskyttelse mod dumhed. Lad det v\u00e6re tre gange mere og langsommere, men det virker helt sikkert;<\/p>\n<p>\n<\/li>\n<li>\n<p>for at have mulighed for at bruge chips i projektet, som ingen har skrevet et bibliotek til;<\/p>\n<p>\n<\/li>\n<li>\n<p>for at g\u00f8re det lettere at migrere fra \u00e9n r\u00e6kke af MK til en anden;<\/p>\n<p>\n<\/li>\n<li>\n<p>for endelig at optimere min gamle kode, der slet ikke kunne passe ind i Arduino;<\/p>\n<p>\n<\/li>\n<li>\n<p>for at l\u00e6re at styre enhver chip direkte gennem dens registre uden at skulle bekymre sig om at studere opbygningen af dens biblioteker, hvis der overhovedet findes nogen.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"zachem-pisat-v-registry-napryamuyu-kogda-est-hal-i-ll\">Hvorfor skrive direkte til registrene, n\u00e5r der findes HAL og LL?<\/h2>\n<p><\/p>\n<p><em>Ordliste<\/em><br \/>\n<em><strong>HAL, High Abstraction Layer<\/strong> \u2013 et bibliotek til styring af mikrokontrolleren med h\u00f8j grad af abstraktion. Hvis man skal bruge SPI1-interface, konfigurerer og aktiverer man blot SPI1 uden at t\u00e6nke over, hvilke registre der g\u00f8r hvad.<br \/>\n<strong>LL, Low Level API<\/strong> \u2013 et bibliotek, der indeholder makroer eller strukturer med registre adresser, der g\u00f8r det muligt at tilg\u00e5 dem ved navn. DDRx, PORTx, PINx p\u00e5 Atmega \u2013 det er LL.<\/em><\/p>\n<p><\/p>\n<p>Debatter om \"HAL, LL eller registre\" opst\u00e5r regelm\u00e6ssigt i kommentarerne p\u00e5 Habr\u00e9. Uden at p\u00e5st\u00e5 adgang til astralt viden vil jeg blot dele mine amat\u00f8r erfaringer og overvejelser.<\/p>\n<p><\/p>\n<p>Efter at have forst\u00e5et det grundl\u00e6ggende ved Atmega og l\u00e6st artikler om vidunderne ved STM32, k\u00f8bte jeg et halvt dusin forskellige kort \u2013 b\u00e5de Discovery og 'De Bl\u00e5 Tabletter' samt bare chips til mine egne projekter. Alle har ligget i en kasse i to \u00e5r. Nogle gange sagde jeg til mig selv: 'det er nu, jeg begynder at arbejde med STM', \u00e5bnede CubeMX, genererede en ops\u00e6tning for SPI, kiggede p\u00e5 den resulterende mur af tekst, der var overd\u00f8vet med STMs ophavsretter, og besluttede, at det var for meget.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan og hvorfor man l\u00e6ser datablade, hvis mikrocontrollere er din hobby\" src=\"\/wp-content\/uploads\/2019\/04\/d83be97ba2767121f4be20d524000afe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det er selvf\u00f8lgelig muligt at finde ud af, hvad CubeMX har skrevet her, men det st\u00e5r klart, at det er umuligt at huske alle formuleringerne for senere at skrive dem ned i h\u00e5nden. At fejlfinde det, hvis jeg ved en fejl glemmer at markere en enkelt boks i Cube, er helt uoverskueligt.<\/p>\n<p><\/p>\n<p>To \u00e5r er g\u00e5et, og jeg kigger stadig beg\u00e6rligt p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=fr.appsolute.st&amp;hl=ru\">ST MCU Finder<\/a><\/noindex> forskellige l\u00e6kre, men uforst\u00e5elige chips, og st\u00f8dte tilf\u00e6ldigt p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/lujji.github.io\/blog\/bare-metal-programming-stm8\/\">en fantastisk artikel<\/a><\/noindex>, selvom den handler om STM8. Og <em>n\u00e6vnelse i tr\u00e5den<\/em> jeg inds\u00e5, at jeg hele tiden havde banket p\u00e5 en \u00e5ben d\u00f8r: registrene i STM er bygget p\u00e5 samme m\u00e5de som i enhver anden mikrokontroller, og brugen af Cube er ikke n\u00f8dvendig for at arbejde med dem. <em>Hvad, kunne jeg have gjort det p\u00e5 den m\u00e5de?..<\/em><\/p>\n<p><\/p>\n<p>HAL og specielt STM32CubeMX er et v\u00e6rkt\u00f8j til professionelle ingeni\u00f8rer, der arbejder intensivt med STM32-chips. Hovedtr\u00e6k ved det er det h\u00f8je abstraheringsniveau, muligheden for hurtigt at migrere fra en mikrokontroller til en anden og endda fra en kerne til en anden, alt sammen inden for STM32-serien. Amat\u00f8rer m\u00f8der sj\u00e6ldent s\u00e5danne opgaver \u2013 vores valg af mikrokontrollere er som regel begr\u00e6nset til hvad der findes p\u00e5 AliExpress, og vi migrerer oftere mellem helt forskellige chips \u2013 fra Atmega til STM, fra STM til ESP, eller hvad de kinesiske venner nu tilbyder os af nyheder. HAL er ikke til hj\u00e6lp her, og tid brugt p\u00e5 at l\u00e6re det vil tage meget.<\/p>\n<p><\/p>\n<p>Det efterlader LL \u2013 men fra det til registrene er der kun et skridt. Personligt finder jeg det nyttigt at skrive mine egne makroer med registrenes adresser: jeg studerer databladet mere omhyggeligt, overvejer hvad jeg m\u00e5tte f\u00e5 brug for i fremtiden, og hvad der bestemt ikke er n\u00f8dvendigt, bedre strukturerer mine programmer, og generelt fremmer det hukommelsen.<\/p>\n<p><\/p>\n<p>Der er desuden et problem med den popul\u00e6re STM32F103 \u2013 for den findes der to inkompatible versioner af LL, en officiel fra STM, og den anden fra Leaf Labs, der bruges i projektet STM32duino. Hvis man skal skrive et open-source bibliotek (og jeg havde netop <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ontaelio\/DMdriverSTM32F1\">s\u00e5dan en opgave<\/a><\/noindex>), skal man enten lave to versioner eller adressere registrene direkte.<\/p>\n<p><\/p>\n<p>Endelig g\u00f8r afvisningen af LL, efter min mening, migrationen lettere, is\u00e6r hvis man planl\u00e6gger den fra starten af projektet. Et overdrevet eksempel: lad os skrive en Arduinoblink i Atmel Studio uden LL:<\/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>For at f\u00e5 denne kode til at blinke med lysdiode p\u00e5 et kinesisk board med STM8 (fra ST Visual Desktop), er det nok at \u00e6ndre to adresser:<\/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>Ja, jeg bruger en funktion ved tilslutningen af lysdioden p\u00e5 det specifikke board, det vil blinke meget langsomt, men det vil blinke!<\/p>\n<p><\/p>\n<h2 id=\"kakie-byvayut-datashity\">Hvordan ser specifikationerne ud<\/h2>\n<p><\/p>\n<p>I artikler og p\u00e5 fora, b\u00e5de p\u00e5 russisk og engelsk, forst\u00e5s 'datasheets' som enhver teknisk dokumentation for chips, og jeg bruger det samme i denne tekst. Formelt set er de kun en af typerne af s\u00e5dan dokumentation:<\/p>\n<p><\/p>\n<p><strong>Datasheet<\/strong> \u2013 TTH, taktisk-tekniske karakteristika. Der skal helt sikkert findes et for hver elektronisk komponent. Referencenotater, nyttige at have ved h\u00e5nden, men der er ikke meget vigtig l\u00e6sning i dem. Alligevel begr\u00e6nses enklere chips ofte til datablade for ikke at skabe un\u00f8dvendige dokumenter; i s\u00e5danne tilf\u00e6lde <em>Referenceh\u00e5ndbog<\/em> inkluderes ogs\u00e5 dette.<\/p>\n<p><\/p>\n<p><strong>Referenceh\u00e5ndbog<\/strong> \u2013 selve vejledningen, en tyk bog p\u00e5 1000+ sider. Det beskriver detaljeret, hvordan alt fungerer, hvad der er puttet i chippen. Hoveddokumentet til at forst\u00e5 mikrocontrolleren. I mods\u00e6tning til <em>datasheet<\/em>, skrives vejledninger for en bred vifte af MK, og de indeholder mange oplysninger om periferien, der er frav\u00e6rende i din specifikke model.<\/p>\n<p><\/p>\n<p><strong>Programming Manual<\/strong> eller <strong>Instruction Set Manual<\/strong> \u2013 vejledningen til de unikke kommandoer i mikrocontrolleren. Den er til dem, der programmerer i assembler. Forfatterne til compilere bruger den aktivt til at optimere kode, s\u00e5 generelt set har vi ikke brug for den. Men det er nyttigt at kigge her for at f\u00e5 en generel forst\u00e5else, is\u00e6r for nogle specifikke kommandoer s\u00e5som initiere en afbrydelse, samt ved aktiv brug af debuggeren.<\/p>\n<p><\/p>\n<p><strong>Application Note<\/strong> \u2013 nyttige tips til l\u00f8sning af specifikke opgaver, ofte med kodeeksempler.<\/p>\n<p><\/p>\n<p><strong>Errata Sheet<\/strong> \u2013 beskrivelse af tilf\u00e6lde med unormal adf\u00e6rd af chippen med alternativer til at omg\u00e5 dem, hvis det er muligt.<\/p>\n<p><\/p>\n<h2 id=\"chto-est-v-datashitah\">Hvad er der i databladene<\/h2>\n<p><\/p>\n<p>Direkte i <em>Datasheet<\/em> kan vi have brug for s\u00e5danne sektioner:<\/p>\n<p><\/p>\n<p><strong>Device Summary<\/strong> \u2013 den f\u00f8rste side af databladet giver kort information om enheden. Meget nyttig i situationer, hvor du har fundet en chip (set i en butik, udtaget, st\u00f8dt p\u00e5 omtale) og vil forst\u00e5, hvad det er.<\/p>\n<p><\/p>\n<p><strong>General Description<\/strong> \u2013 en mere detaljeret beskrivelse af kapabiliteterne for chips fra serien.<\/p>\n<p><\/p>\n<p><strong>Pinouts<\/strong> \u2013 pinoutskemaer for alle mulige chipkapsler (hvilken pind der svarer til hvilken ben).<\/p>\n<p><\/p>\n<p><strong>Pin Description<\/strong> \u2013 beskrivelse af form\u00e5let og kapabiliteterne for hver pin.<\/p>\n<p><\/p>\n<p><strong>Memory Map<\/strong> \u2013 hukommelsesadresserne vil vi n\u00e6ppe f\u00e5 brug for, men nogle gange inkluderes ogs\u00e5 en tabel over registrenes adresseblokke.<\/p>\n<p><\/p>\n<p><strong>Register Map<\/strong> \u2013 tabellen over registrenes adresseblokke findes som regel i databladet, og i <em>Ref Manual<\/em> \u2013 kun offsets (<em>address offsets<\/em>).<\/p>\n<p><\/p>\n<p><strong>Electrical Characteristics<\/strong> \u2013 i dette afsnit er vi prim\u00e6rt interesserede i <strong>absolute maximum ratings<\/strong>, der opregner de maksimale belastninger p\u00e5 chippen. I mods\u00e6tning til den uholdbare Atmega328p, tillader de fleste mikrocontrollere ikke at tilknytte betydelige belastninger til pinnene, hvilket bliver en ubehagelig overraskelse for Arduino-brugere.<\/p>\n<p><\/p>\n<p><strong>Package Information<\/strong> \u2013 tegninger af tilg\u00e6ngelige kabinetter, nyttige ved design af egne kredsl\u00f8b.<\/p>\n<p><\/p>\n<p><em>Referenceh\u00e5ndbog<\/em> strukturelt best\u00e5r af sektioner dedikeret til det specifikke periferi n\u00e6vnt i deres overskrifter. Hver kapitel kan groft opdeles i tre dele:<\/p>\n<p><\/p>\n<p><strong>Oversigt<\/strong>, <strong>Introduktion<\/strong>, <strong>Features<\/strong> \u2013 oversigt over periferiets kapabiliteter;<\/p>\n<p><\/p>\n<p><strong>Functional Description<\/strong>, <strong>Usage Guide<\/strong> eller blot den prim\u00e6re blok i afsnittet \u2013 en detaljeret tekstbeskrivelse af periferiets funktioner og brug;<\/p>\n<p><\/p>\n<p><strong>Registers<\/strong> \u2013 beskrivelse af kontrolregistre. I simple tilf\u00e6lde som GPIO eller SPI kan dette v\u00e6re tilstr\u00e6kkeligt for at begynde at bruge periferien, men ofte m\u00e5 man dog stadig l\u00e6se de tidligere dele.<\/p>\n<p><\/p>\n<h2 id=\"kak-chitat-datashity\">Hvordan man l\u00e6ser datablad<\/h2>\n<p><\/p>\n<p>Datablade kan virke skr\u00e6mmende med deres l\u00e6ngde og overflod af uklare ord. I virkeligheden er det ikke s\u00e5 skr\u00e6mmende, hvis man kender et par tricks.<\/p>\n<p><\/p>\n<p>Installer <strong>en god PDF-l\u00e6ser<\/strong>. Datablade er skrevet i de stolte traditioner for papirmanualer, de er gode at udskrive, benzere og binde dem plastisk. Hypertekst ses i meget begr\u00e6nsede m\u00e6ngder. Heldigvis er dokumentets struktur dog forsynet med bogm\u00e6rker, s\u00e5 en god l\u00e6ser med nem navigation er meget n\u00f8dvendig.<\/p>\n<p><\/p>\n<p>Et datablad er ikke en l\u00e6rebog af Stroustrup, i det <strong>er der ikke noget behov for at l\u00e6se alt fra ende til anden<\/strong>. Hvis du har brugt det tidligere r\u00e5d \u2013 find blot den \u00f8nskede sektion i bogm\u00e6rkespanelet.<\/p>\n<p><\/p>\n<p>Datablade, is\u00e6r <em>Reference Manuals<\/em>, kan beskrive kapabiliteterne for ikke den specifikke chip, men <strong>hele serien<\/strong>. Det betyder, at halvdelen, eller to tredjedele af informationen ikke er relevant for din chip. F\u00f8r du studerer registrene TIM7, skal du kontrollere i <em>General Description<\/em>, har du den?<\/p>\n<p><\/p>\n<p>At vide <strong>engelsk<\/strong> er tilstr\u00e6kkeligt p\u00e5 <strong>grundl\u00e6ggende niveau<\/strong>. Databladene best\u00e5r halvt af termer, der er ukendte for den gennemsnitlige taler, og halvt af enkle forbindelses strukturer. Der findes ogs\u00e5 fantastiske kinesiske datablad p\u00e5 kinesisk engelsk, hvor halvdelen ogs\u00e5 er termer, og den anden halvdel er tilf\u00e6ldige ord.<\/p>\n<p><\/p>\n<p>Hvis du st\u00f8der p\u00e5 <strong>et ukendt ord<\/strong>, s\u00e5 fors\u00f8g ikke at overs\u00e6tte det med en engelsk-russisk ordbog. Hvis det forvirrer dig <em>hysteresis<\/em>, bliver overs\u00e6ttelsen 'hysteresis' ikke varmere for dig. Brug Google, Stack Overflow, Wikipedia, fora, hvor det n\u00f8dvendige koncept vil blive <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/5357918\/what-does-hysteresis-mean-and-how-does-it-apply-to-computer-science-or-programmi\">forklaret med enkle ord og eksempler<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Den bedste m\u00e5de at forst\u00e5 det l\u00e6ste p\u00e5 er at <strong>pr\u00f8ve det i praksis<\/strong>. S\u00e5 hav et udviklingsboard ved h\u00e5nden, som du l\u00e6rer at kende, eller bedre endnu to \u2013 i tilf\u00e6lde af at du stadig ikke forstod alt og s\u00e5 den magiske r\u00f8g.<\/p>\n<p><\/p>\n<p>Det er nyttigt at have databladet ved h\u00e5nden, n\u00e5r du <strong>l\u00e6ser en anden persons tutorial<\/strong> eller unders\u00f8ger en andens bibliotek. Det er meget muligt, at du finder en mere optimal l\u00f8sning p\u00e5 dit problem d\u00e9r. Omvendt \u2013 hvis du ikke kan forst\u00e5 fra databladet, hvordan registreringen faktisk fungerer, s\u00e5 googl det: sandsynligvis har nogen allerede beskrevet det med enkle ord eller efterladt klar kode p\u00e5 GitHub.<\/p>\n<p><\/p>\n<h2 id=\"slovarik\">Ordliste<\/h2>\n<p><\/p>\n<p>Nogle nyttige ord og betegnelser, der hj\u00e6lper med hurtigt at v\u00e6nne sig til databladene. Det, der er kommet i tankerne de sidste par dage, er velkomne tilf\u00f8jelser og rettelser.<\/p>\n<p><\/p>\n<p><em>Elektricitet<\/em><br \/>\n<strong>Vcc<\/strong>, <strong>Vdd<\/strong> \u2013 'plus', str\u00f8m<br \/>\n<strong>Vss<\/strong>, <strong>Vee<\/strong> \u2013 'minus', jord<br \/>\n<strong>current<\/strong> \u2013 str\u00f8m<br \/>\n<strong>voltage<\/strong> \u2013 sp\u00e6nding<br \/>\n<strong>to sink current<\/strong> \u2013 fungere som 'jord' for en ekstern belastning<br \/>\n<strong>to source current<\/strong> \u2013 forsyne en ekstern belastning<br \/>\n<strong>high sink\/source pin<\/strong> \u2013 en pin med h\u00f8jere 'tolerance' overfor belastning<\/p>\n<p><\/p>\n<p><em>IO<\/em><br \/>\n<strong>H, High<\/strong> \u2013 p\u00e5 pin Vcc<br \/>\n<strong>L, Low<\/strong> \u2013 p\u00e5 pin Vss<br \/>\n<strong>High Impedance<\/strong>, <strong>Hi-Z<\/strong>, <strong>floating<\/strong> \u2013 p\u00e5 pinnen er der ingenting, 'h\u00f8j modstand', det er faktisk usynligt for den ydre verden.<br \/>\n<strong>weak pull up<\/strong>, <strong>weak pull down<\/strong> \u2013 indbygget pull-up\/pull-down modstand, cirka 50 k\u03a9 (se datablad). Den bruges for eksempel for at sikre, at indgangspinnen ikke sv\u00e6ver i luften, hvilket for\u00e5rsager falske aktiveringer. <em>Weak<\/em> \u2013 fordi den er let at 'overkomme'.<br \/>\n<strong>push pull<\/strong> \u2013 udgangstilstand for pinnen, hvor den skifter mellem <em>H\u00f8j<\/em> og <em>Lav<\/em> \u2013 standard OUTPUT med Arduino.<br \/>\n<strong>open drain<\/strong> \u2013 betegnelse for udgangstilstand, hvor pinnen kan v\u00e6re enten <em>Lav<\/em>, eller <em>High Impedance \/ Floating<\/em>. Det er n\u00e6sten altid ikke en \"\u00e6gte\" \u00e5ben afl\u00f8b; der er beskyttende dioder, modstande osv. Dette er blot en betegnelse for jord-\/ingen.<br \/>\n<strong>\u00e6gte \u00e5ben afl\u00f8b<\/strong> \u2013 men dette er faktisk en \u00e6gte \u00e5ben afl\u00f8b: benet g\u00e5r direkte til jorden, n\u00e5r det er \u00e5bent, eller forbliver i en flydende tilstand, n\u00e5r det er lukket. Det betyder, at det kan lede sp\u00e6nding st\u00f8rre end Vcc, men maksimum er stadig angivet i databladet i afsnittet <em>Absolutte Maksimale Vurderinger \/ Sp\u00e6nding<\/em>. <\/p>\n<p><\/p>\n<p><em>Gr\u00e6nseflader<\/em><br \/>\n<strong>i serie<\/strong> \u2013 tilsluttet i serie<br \/>\n<strong>til k\u00e6de<\/strong> \u2013 samle chips i en k\u00e6de ved serielforbindelse, hvilket \u00f8ger antallet af udgange.<br \/>\n<strong>shift<\/strong> \u2013 skift, normalt betegner det bitshift. F\u00f8lgelig, <strong>at skifte ind<\/strong> og <strong>at skifte ud<\/strong> \u2013 modtage og sende data bit for bit.<br \/>\n<strong>latch<\/strong> \u2013 skydel\u00e5s, der d\u00e6kker bufferen, mens bitene skydes gennem den. N\u00e5r transmissionen er afsluttet, \u00e5bnes skydel\u00e5sen, og bitene begynder at arbejde.<br \/>\n<strong>at clocke ind<\/strong> \u2013 udf\u00f8re bit-for-bit transmission, flytte alle bit til de rigtige pladser.<br \/>\n<strong>dobbelt buffer<\/strong>, <strong>skygregister<\/strong>, <strong>forudindl\u00e6sningsregister<\/strong> \u2013 betegnelser fra historien, n\u00e5r registeret skal kunne modtage nye data, men holde dem tilbage indtil et bestemt tidspunkt. For korrekt drift af PWM m\u00e5 dens parametre (duty cycle, frekvens) ikke \u00e6ndres, indtil den nuv\u00e6rende cyklus er afsluttet, men nye parametre kan allerede v\u00e6re givet. F\u00f8lgelig opbevares de nuv\u00e6rende i <em>skygregister<\/em>, og de nye kommer ind i <em>forudindl\u00e6sningsregister<\/em>, n\u00e5r de skrives ind i det tilsvarende chip-register.<\/p>\n<p><\/p>\n<p><em>Enhver<\/em><br \/>\n<strong>prescaler<\/strong> \u2013 frekvensdeler<br \/>\n<strong>at s\u00e6tte et bit<\/strong> \u2013 s\u00e6tte bit til 1<br \/>\n<strong>at rydde\/reset et bit<\/strong> \u2013 nulstille bit til 0 (<em>reset<\/em> \u2013 en funktion af STM-datablade)<\/p>\n<p><\/p>\n<h3 id=\"chto-dalshe\">vil v\u00e6re udsolgt<\/h3>\n<p><\/p>\n<p>Der var faktisk planlagt en praktisk del med demonstration af tre projekter p\u00e5 STM32 og STM8, lavet specielt til denne artikel ved hj\u00e6lp af databladene, med lamper, SPI, timere, PWM og afbrydelser:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan og hvorfor man l\u00e6ser datablade, hvis mikrocontrollere er din hobby\" src=\"\/wp-content\/uploads\/2019\/04\/8929bad65dad7473a81a221281c43557.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Men teksten bliver lidt for meget, s\u00e5 projekterne sendes til del to.<\/p>\n<p><\/p>\n<p>F\u00e6rdigheden til at l\u00e6se databladene vil hj\u00e6lpe dig med din hobby, men vil n\u00e6ppe erstatte den personlige kommunikation med kolleger med samme interesse p\u00e5 fora og i chatrum. For det kr\u00e6ver det, at man f\u00f8rst forbedrer det engelske sprog. Derfor f\u00e5r dem, der l\u00e6ser det til slut \u2013 en speciel bel\u00f8nning: to gratis lektioner i Skyeng ved f\u00f8rste betaling med koden <code>HABR2<\/code>.<\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Hvordan og hvorfor l\u00e6se datablad, hvis mikrocontrollere er din hobby | ProHoster","description":"Mikroelektronik.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/32463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=32463"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/32463\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/24267"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=32463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=32463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=32463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}