{"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\/it\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","title":{"rendered":"Come e perch\u00e9 leggere i datasheet, se i microcontrollori sono il tuo hobby","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Come e perch\u00e9 leggere i datasheet, se i microcontrollori sono il tuo hobby\" src=\"\/wp-content\/uploads\/2019\/04\/ae2537b0263d692c4f79e7b5f7bc0797.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La microelettronica \u00e8 diventata una moda degli ultimi anni grazie al magico Arduino. Ma c'\u00e8 un problema: con un adeguato interesse, si supera rapidamente DigitalWrite(), ma cosa fare dopo non \u00e8 del tutto chiaro. Gli sviluppatori di Arduino hanno fatto notevoli sforzi per abbattere la barriera d'ingresso nel loro ecosistema, ma oltre i suoi confini si estende ancora una foresta oscura di difficile schematica, poco accessibile agli appassionati.<\/p>\n<p><\/p>\n<p>Per esempio, i datasheet. Sembrano contenere tutto, basta prenderli e usarli. Ma i loro autori chiaramente non si pongono l'obiettivo di popolarizzare i microcontrollori; a volte <em>sembra<\/em>, che abusano volutamente di termini e abbreviazioni incomprensibili nella descrizione di cose semplici, per confondere il profano. Ma non \u00e8 tutto cos\u00ec male, con un po' di volont\u00e0 il mistero si svela.<\/p>\n<p><\/p>\n<p>In questo articolo condivider\u00f2 l'esperienza di un umanista con i datasheet per scopi hobbistici. Il testo \u00e8 destinato a coloro che sono cresciuti oltre Arduino, e presuppone una certa conoscenza dei principi di funzionamento dei microcontrollori.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Inizio con il tradizionale<\/p>\n<p><\/p>\n<h3 id=\"migaem-svetodiodom-na-arduino\">Lampeggiando un LED su Arduino<\/h3>\n<p><\/p>\n<p>E subito il codice:<\/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>\u00abCos'\u00e8 questo? \u2013 chieder\u00e0 il lettore esperto. \u2013 Perch\u00e9 scrivi qualcosa nel registro di ingresso PINB? Esso \u00e8 solo in lettura!\u00bb In effetti, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.arduino.cc\/en\/Reference\/PortManipulation\">la documentazione di Arduino<\/a><\/noindex>, come la maggior parte degli articoli didattici su internet, afferma che questo registro \u00e8 in sola lettura. Lo pensavo anch'io, fino a quando non ho riletto <noindex><a rel=\"nofollow\" href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf\">il datasheet<\/a><\/noindex> per l'Atmega328p, mentre preparavo questo articolo. E l\u00ec:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Come e perch\u00e9 leggere i datasheet, se i microcontrollori sono il tuo hobby\" src=\"\/wp-content\/uploads\/2019\/04\/4c754bda59d9f18a38209cc32f0fb3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si tratta di una funzionalit\u00e0 relativamente nuova, non presente nell'Atmega8, di cui non tutti sono a conoscenza o che non viene menzionata per motivi di compatibilit\u00e0. Ma \u00e8 perfettamente valida per dimostrare il concetto che i datasheet dovrebbero essere letti per sfruttare tutte le potenzialit\u00e0 del chip, comprese quelle poco conosciute. E questa non \u00e8 l'unica ragione.<\/p>\n<p><\/p>\n<h2 id=\"zachem-esche-chitat-datashity\">Perch\u00e9 leggere ancora i datasheet<\/h2>\n<p><\/p>\n<p>Di solito, gli appassionati di Arduino, dopo aver giocato con i LED e con gli AnalogWrite, iniziano a collegare alla scheda vari moduli e chip, per i quali sono gi\u00e0 state scritte librerie. Prima o poi, compare una libreria che non funziona come dovrebbe. A quel punto, l'amatore inizia a modificarla per sistemarla, e l\u00ec\u2026<\/p>\n<p><\/p>\n<p>L\u00ec dentro accade qualcosa di categoricamente incomprensibile, quindi \u00e8 necessario recarsi su Google, leggere numerosi tutorial, utilizzare parti di codice altrui e infine ottenere ci\u00f2 che si desidera. Questo d\u00e0 una potente sensazione di realizzazione, ma in realt\u00e0 il processo ricorda l'invenzione della bicicletta tramite il reverse engineering di una moto. Tra l'altro, non aumenta la comprensione di come funzioni questa bicicletta. Lo so, perch\u00e9 ci ho dedicato molto tempo.<\/p>\n<p><\/p>\n<p>Se invece di dedicarmi a questa affascinante attivit\u00e0 avessi trascorso un paio di giorni a studiare la documentazione dell'Atmega328, avrei risparmiato un'enorme quantit\u00e0 di tempo. Dopotutto, \u00e8 un microcontrollore piuttosto semplice.<\/p>\n<p><\/p>\n<p>Pertanto, leggere i datasheet \u00e8 necessario almeno per avere un'idea di come \u00e8 fatto un microcontrollore e di cosa \u00e8 capace di fare. E in aggiunta:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>per controllare e ottimizzare le librerie di altri. Spesso sono scritte da hobbisti che inventano la bicicletta; oppure, al contrario, gli autori fanno deliberatamente un'eccessiva protezione contro l'errore. Pu\u00f2 essere tre volte pi\u00f9 grande e lenta, ma almeno funziona sicuramente;<\/p>\n<p>\n<\/li>\n<li>\n<p>per avere la possibilit\u00e0 di utilizzare nei progetti chip per i quali nessuno ha scritto una libreria;<\/p>\n<p>\n<\/li>\n<li>\n<p>per semplificare il passaggio da una serie di MC a un'altra;<\/p>\n<p>\n<\/li>\n<li>\n<p>per ottimizzare finalmente il mio vecchio codice che non entrava affatto nell'Arduino;<\/p>\n<p>\n<\/li>\n<li>\n<p>per imparare a gestire qualsiasi chip direttamente attraverso i suoi registri, senza doversi preoccupare di studiare come funzionano le relative librerie, se mai esistono.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"zachem-pisat-v-registry-napryamuyu-kogda-est-hal-i-ll\">Perch\u00e9 scrivere nei registri direttamente, quando ci sono HAL e LL?<\/h2>\n<p><\/p>\n<p><em>Glossario<\/em><br \/>\n<em><strong>HAL, High Abstraction Layer<\/strong> \u2013 libreria per gestire un microcontrollore con alto livello di astrazione. Se \u00e8 necessario utilizzare l'interfaccia SPI1, basta configurarla e abilitarla, senza preoccuparsi di quali registri siano responsabili di cosa.<br \/>\n<strong>LL, Low Level API<\/strong> \u2013 libreria che contiene macro o strutture con indirizzi di registri, che consente di accedervi per nome. DDRx, PORTx, PINx su Atmega \u2013 questo \u00e8 LL.<\/em><\/p>\n<p><\/p>\n<p>Discussioni su \"HAL, LL o registri\" avvengono regolarmente nei commenti su Habr\u00e9. Non pretendendo di avere accesso a conoscenze astrali, condivider\u00f2 semplicemente la mia esperienza amatoriale e i miei pensieri.<\/p>\n<p><\/p>\n<p>Dopo aver capito pi\u00f9 o meno come funziona l'Atmega e aver letto articoli sulle meraviglie dello STM32, ho comprato mezza dozzina di schede diverse - sia Discovery che \"Blue Pill\", e persino semplici chip per i miei progetti. Tutti loro sono rimasti impolverati in una scatola per due anni. A volte mi dicevo: \"da questo weekend imparo STM\", lanciavo CubeMX, generavo la configurazione per SPI, guardavo quel muro di testo, abbondantemente condito da copyright STM, e decidevo che fosse davvero troppo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Come e perch\u00e9 leggere i datasheet, se i microcontrollori sono il tuo hobby\" src=\"\/wp-content\/uploads\/2019\/04\/d83be97ba2767121f4be20d524000afe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Certo, posso capire cosa ha scritto CubeMX. Ma \u00e8 anche chiaro che memorizzare tutte le formulazioni, per poi riportarle a mano, \u00e8 irreale. E debuggare questo, se per caso dimentico di spuntare qualche opzione in Cube, \u00e8 un vero e proprio incubo.<\/p>\n<p><\/p>\n<p>Sono passati due anni e io continuo a sbavare su <noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=fr.appsolute.st&amp;hl=ru\">ST MCU Finder<\/a><\/noindex> per vari chip gustosi, ma per me inaccessibili, e ho trovato per caso <noindex><a rel=\"nofollow\" href=\"https:\/\/lujji.github.io\/blog\/bare-metal-programming-stm8\/\">un ottimo articolo<\/a><\/noindex>, anche se riguarda lo STM8. E <em>improvvisamente<\/em> ho capito che per tutto questo tempo stavo bussando a una porta aperta: i registri degli STM sono strutturati come quelli di qualsiasi altro microcontrollore, e per lavorarci non \u00e8 necessario Cube. <em>E cosa, si poteva fare cos\u00ec?..<\/em><\/p>\n<p><\/p>\n<p>HAL e in particolare STM32CubeMX sono strumenti per ingegneri professionisti che lavorano a stretto contatto con i chip STM32. La caratteristica principale \u00e8 il livello elevato di astrazione, la possibilit\u00e0 di migrare rapidamente da un microcontrollore all'altro e persino da un core all'altro, rimanendo nell'ambito della famiglia STM32. Gli appassionati si trovano raramente ad affrontare tali problemi: la nostra scelta di microcontrollori \u00e8 generalmente limitata all'assortimento di AliExpress, e migriamo pi\u00f9 frequentemente tra chip sostanzialmente diversi - passiamo dall'Atmega allo STM, dallo STM all'ESP, o a seconda delle novit\u00e0 che ci offrono i nostri amici cinesi. HAL qui non aiuta, e il tempo di studio \u00e8 considerevole.<\/p>\n<p><\/p>\n<p>Resta LL - ma da esso ai registri ci vuole un attimo. Personalmente trovo utile scrivere i miei macro con gli indirizzi dei registri: studio con maggiore attenzione il datasheet, rifletto su ci\u00f2 che mi servir\u00e0 in futuro e cosa no, ristrutturo meglio i miei programmi, e tutto sommato il superamento delle difficolt\u00e0 aiuta la memorizzazione.<\/p>\n<p><\/p>\n<p>Inoltre, c'\u00e8 una questione con il popolare STM32F103 - esistono due versioni LL incompatibili, una ufficiale da STM, l'altra da Leaf Labs, utilizzata nel progetto STM32duino. Se si desidera scrivere una libreria open-source (e io avevo proprio <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ontaelio\/DMdriverSTM32F1\">questo compito<\/a><\/noindex>), \u00e8 necessario fare due versioni o accedere direttamente ai registri.<\/p>\n<p><\/p>\n<p>Infine, a mio avviso, rinunciare a LL semplifica la migrazione, soprattutto se si inizia a pianificarla fin dall'inizio del progetto. Un esempio estremo: scriviamo un blink per Arduino in Atmel Studio senza 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>Per far lampeggiare questo codice un LED su una scheda cinese con STM8 (da ST Visual Desktop), basta cambiare due indirizzi:<\/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>S\u00ec, sto usando una caratteristica specifica di collegamento del LED sulla scheda, lampegger\u00e0 molto lentamente, ma lampegger\u00e0!<\/p>\n<p><\/p>\n<h2 id=\"kakie-byvayut-datashity\">Quali tipi di datasheet ci sono<\/h2>\n<p><\/p>\n<p>Negli articoli e nei forum, sia in russo che in inglese, per \"datasheet\" si intende qualsiasi documentazione tecnica sui chip, e io procedo in questo modo anche in questo testo. Formalmente, essi sono solo uno dei tipi di tale documentazione:<\/p>\n<p><\/p>\n<p><strong>Datasheet<\/strong> \u2013 TTX, caratteristiche tecniche tattiche. \u00c8 obbligatorio avere per qualsiasi componente elettronico. Informazioni di riferimento, \u00e8 utile tenerle a portata di mano, ma non c'\u00e8 molto da leggere attentamente. Tuttavia, i chip pi\u00f9 semplici spesso si limitano al datasheet per non generare documenti superflui; in questo caso <em>Reference Manual<\/em> \u00e8 incluso qui.<\/p>\n<p><\/p>\n<p><strong>Reference Manual<\/strong> \u2013 la vera e propria istruzione, un grosso libro di oltre 1000 pagine. Descrive in dettaglio il funzionamento di tutto ci\u00f2 che \u00e8 presente nel chip. \u00c8 il documento principale per comprendere il microcontrollore. A differenza di <em>datasheet<\/em>, le istruzioni vengono redatte per una vasta gamma di MC, contengono molte informazioni sulla periferica che non \u00e8 presente nel vostro modello specifico.<\/p>\n<p><\/p>\n<p><strong>Programming Manual<\/strong> o <strong>Instruction Set Manual<\/strong> \u2013 istruzioni per i comandi unici del microcontrollore. Destinata a chi programma in Assembly. Gli autori degli compiler utilizzano attivamente questa guida per ottimizzare il codice, quindi in generale non ci servir\u00e0. Ma \u00e8 utile dare un'occhiata qui per una comprensione generale, per alcune istruzioni specifiche come l'uscita dalle interruzioni, cos\u00ec come durante l'uso intenso del debugger.<\/p>\n<p><\/p>\n<p><strong>Application Note<\/strong> \u2013 consigli utili per risolvere compiti specifici, spesso con esempi di codice.<\/p>\n<p><\/p>\n<p><strong>Errata Sheet<\/strong> \u2013 descrizione dei casi di comportamento anomalo del chip con soluzioni, se disponibili.<\/p>\n<p><\/p>\n<h2 id=\"chto-est-v-datashitah\">Cosa si trova nei datasheet<\/h2>\n<p><\/p>\n<p>Nello specifico, in <em>Datasheet<\/em> potremmo avere bisogno delle seguenti sezioni:<\/p>\n<p><\/p>\n<p><strong>Device Summary<\/strong> \u2013 la prima pagina del datasheet fornisce una breve panoramica del dispositivo. Molto utile in situazioni in cui si trova un chip (lo si \u00e8 visto in negozio, si \u00e8 dissaldato, \u00e8 stata vista una menzione) e si vuole capire di cosa si tratta.<\/p>\n<p><\/p>\n<p><strong>General Description<\/strong> \u2013 una descrizione pi\u00f9 dettagliata delle capacit\u00e0 dei chip della serie.<\/p>\n<p><\/p>\n<p><strong>Pinouts<\/strong> \u2013 schemi di pinout per tutti i possibili formati del chip (a quale gamba corrisponde quale pin).<\/p>\n<p><\/p>\n<p><strong>Pin Description<\/strong> \u2013 descrizione della funzione e delle capacit\u00e0 di ogni pin.<\/p>\n<p><\/p>\n<p><strong>Memory Map<\/strong> \u2013 una mappa degli indirizzi in memoria che probabilmente non ci servir\u00e0, ma a volte include anche una tabella degli indirizzi dei blocchi di registri.<\/p>\n<p><\/p>\n<p><strong>Register Map<\/strong> \u2013 una tabella degli indirizzi dei blocchi di registri, di solito si trova nel datasheet, mentre nel <em>Ref Manual<\/em> \u2013 solo gli offset (<em>address offsets<\/em>).<\/p>\n<p><\/p>\n<p><strong>Electrical Characteristics<\/strong> \u2013 in questa sezione ci interessano in primo luogo <strong>absolute maximum ratings<\/strong>, che elencano i carichi massimi sul chip. A differenza dell'indistruttibile Atmega328p, la maggior parte dei microcontrollori non consente di collegare carichi pesanti ai pin, il che pu\u00f2 diventare una spiacevole sorpresa per chi usa Arduino.<\/p>\n<p><\/p>\n<p><strong>Package Information<\/strong> \u2013 disegni dei formati disponibili, utili nella progettazione delle proprie schede.<\/p>\n<p><\/p>\n<p><em>Reference Manual<\/em> strutturalmente consiste in sezioni dedicate a specifiche periferiche, indicate nei loro titoli. Ogni capitolo pu\u00f2 essere convenzionalmente suddiviso in tre parti:<\/p>\n<p><\/p>\n<p><strong>Overview<\/strong>, <strong>Introduction<\/strong>, <strong>Features<\/strong> \u2013 una panoramica delle capacit\u00e0 delle periferiche;<\/p>\n<p><\/p>\n<p><strong>Functional Description<\/strong>, <strong>Usage Guide<\/strong> o semplicemente il blocco principale della sezione \u2013 una descrizione dettagliata del funzionamento delle periferiche e dei metodi per utilizzarle;<\/p>\n<p><\/p>\n<p><strong>Registers<\/strong> \u2013 descrizione dei registri di controllo. Nei casi semplici come GPIO o SPI questo pu\u00f2 essere pi\u00f9 che sufficiente per iniziare a utilizzare la periferica, ma spesso si deve comunque leggere le parti precedenti.<\/p>\n<p><\/p>\n<h2 id=\"kak-chitat-datashity\">Come leggere i datasheet<\/h2>\n<p><\/p>\n<p>I datasheet possono spaventare con il loro volume e il gran numero di termini incomprensibili. In realt\u00e0, non \u00e8 cos\u00ec spaventoso se si conoscono alcuni trucchi.<\/p>\n<p><\/p>\n<p>Installare <strong>un buon lettore PDF<\/strong>. I datasheet sono scritti nelle affermate tradizioni delle istruzioni cartacee, \u00e8 bello stamparli, evidenziarli con segnalibri in plastica e rileggerli. Il ipertesto \u00e8 presente in quantit\u00e0 limitate. Fortunatamente, almeno la struttura del documento \u00e8 organizzata con segnalibri, quindi un buon lettore con una navigazione comoda \u00e8 molto necessario.<\/p>\n<p><\/p>\n<p>Il datasheet non \u00e8 un libro di testo di Stroustrup, in esso <strong>non bisogna leggere tutto<\/strong>. Se avete seguito il consiglio precedente, basta trovare la sezione necessaria nel pannello dei segnalibri.<\/p>\n<p><\/p>\n<p>I datasheet, in particolare <em>Reference Manuals<\/em>, possono descrivere le capacit\u00e0 non di un chip specifico, ma <strong>dell'intera serie<\/strong>. Questo significa che la met\u00e0, se non due terzi delle informazioni, non ha nulla a che fare con il vostro chip. Prima di studiare i registri TIM7, controlla se <em>General Description<\/em>, ce l'hai.<\/p>\n<p><\/p>\n<p>Conoscere <strong>l'inglese<\/strong> \u00e8 sufficiente a <strong>un livello base<\/strong>. I datasheet sono per met\u00e0 composti da termini sconosciuti a un parlante medio e per met\u00e0 da semplici strutture di collegamento. Ci sono anche dei bellissimi datasheet cinesi in inglese cinese, dove met\u00e0 sono anche termini e l'altra met\u00e0 \u00e8 un insieme casuale di parole.<\/p>\n<p><\/p>\n<p>Se incontri <strong>una parola sconosciuta<\/strong>, non cercare di tradurla usando un dizionario inglese-russo. Se ti confonde <em>hysteresis<\/em>, la traduzione \"isteresi\" non ti far\u00e0 stare meglio. Usa Google, Stack Overflow, Wikipedia, forum dove il concetto necessario sar\u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/5357918\/what-does-hysteresis-mean-and-how-does-it-apply-to-computer-science-or-programmi\">spiegato con parole semplici e esempi<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Il modo migliore per capire ci\u00f2 che hai letto \u00e8 <strong>verificare sul campo<\/strong>. Pertanto, tieni a portata di mano la scheda di debug con cui ti stai familiarizzando, o meglio due - nel caso in cui non hai capito qualcosa e vedi un magico fumo.<\/p>\n<p><\/p>\n<p>\u00c8 utile avere a disposizione il datasheet quando <strong>leggi un tutorial di qualcuno<\/strong> o studi una libreria di qualcun altro. \u00c8 molto probabile che tu possa trovare una soluzione pi\u00f9 ottimale al tuo problema. E viceversa - se dal datasheet non riesci a capire come funziona realmente il registro, cercalo su Google: \u00e8 probabile che qualcuno lo abbia gi\u00e0 descritto con parole semplici o abbia lasciato codice comprensibile su GitHub.<\/p>\n<p><\/p>\n<h2 id=\"slovarik\">Glossario<\/h2>\n<p><\/p>\n<p>Alcune parole e designazioni utili che aiutano a familiarizzare pi\u00f9 rapidamente con i datasheet. Quello che mi \u00e8 venuto in mente negli ultimi due giorni, integrazioni e correzioni sono benvenute.<\/p>\n<p><\/p>\n<p><em>Elettricit\u00e0<\/em><br \/>\n<strong>Vcc<\/strong>, <strong>Vdd<\/strong> \u2013 \"pi\u00f9\", alimentazione<br \/>\n<strong>Vss<\/strong>, <strong>Vee<\/strong> \u2013 \"meno\", terra<br \/>\n<strong>current<\/strong> \u2013 corrente<br \/>\n<strong>voltage<\/strong> \u2013 tensione<br \/>\n<strong>to sink current<\/strong> \u2013 lavorare come \"terra\" per un carico esterno<br \/>\n<strong>to source current<\/strong> \u2013 alimentare un carico esterno<br \/>\n<strong>high sink\/source pin<\/strong> \u2013 pin con maggiore \"tolleranza\" al carico<\/p>\n<p><\/p>\n<p><em>IO<\/em><br \/>\n<strong>H, High<\/strong> \u2013 sul pin Vcc<br \/>\n<strong>L, Low<\/strong> \u2013 sul pin Vss<br \/>\n<strong>High Impedance<\/strong>, <strong>Hi-Z<\/strong>, <strong>floating<\/strong> \u2013 sul pin non c'\u00e8 nulla, \"alta impedenza\", \u00e8 praticamente invisibile al mondo esterno.<br \/>\n<strong>weak pull up<\/strong>, <strong>weak pull down<\/strong> \u2013 resistore pull-up\/pull-down integrato, un'analogia approssimativa di 50 k\u03a9 (vedi datasheet). Usato, ad esempio, per evitare che un pin di ingresso fluttui nell'aria, causando falsi attivamenti. <em>Weak<\/em> \u2013 perch\u00e9 \u00e8 facile da \"sovrastare\".<br \/>\n<strong>push pull<\/strong> \u2013 modalit\u00e0 di uscita del pin in cui si alterna tra <em>High<\/em> e <em>Basso<\/em> \u2013 output standard con Arduino.<br \/>\n<strong>drain aperto<\/strong> \u2013 indica la modalit\u00e0 di uscita in cui il pin pu\u00f2 essere sia <em>Basso<\/em>, oppure <em>Alta Impedenza \/ Floating<\/em>. In questo modo, quasi sempre non si tratta di un vero e proprio drain aperto, ci sono diodi di protezione, resistori e altro. Questo \u00e8 semplicemente un'indicazione della modalit\u00e0 terra\/niente.<br \/>\n<strong>drain aperto vero<\/strong> \u2013 ma questo \u00e8 un vero e proprio drain aperto: il pin va direttamente a terra se \u00e8 aperto, o rimane in uno stato sospeso se \u00e8 chiuso. Ci\u00f2 significa che attraverso di esso, se necessario, pu\u00f2 passare una tensione superiore a Vcc, ma il massimo \u00e8 comunque specificato nella scheda tecnica nella sezione <em>Valori Massimi Assoluti \/ Tensione<\/em>. <\/p>\n<p><\/p>\n<p><em>Interfacce<\/em><br \/>\n<strong>in serie<\/strong> \u2013 collegati in serie<br \/>\n<strong>a catena<\/strong> \u2013 raccogliere i chip in una catena mediante collegamento in serie, aumentando il numero di uscite.<br \/>\n<strong>shift<\/strong> \u2013 spostamento, di solito indica lo spostamento dei bit. Di conseguenza, <strong>per spostare dentro<\/strong> e <strong>per spostare fuori<\/strong> \u2013 ricevere e trasmettere dati bit a bit.<br \/>\n<strong>grilletto<\/strong> \u2013 serranda che copre il buffer mentre i bit vengono spostati. Quando la trasmissione \u00e8 completata, la serranda si apre e i bit iniziano a funzionare.<br \/>\n<strong>per sincronizzare in<\/strong> \u2013 effettuare una trasmissione bit a bit, spostando tutti i bit nei posti giusti.<br \/>\n<strong>buffer doppio<\/strong>, <strong>registro shadow<\/strong>, <strong>registro di pre-carico<\/strong> \u2013 indicazioni della storia, quando un registro deve essere in grado di ricevere nuovi dati, ma trattenerli fino a un certo momento. Ad esempio, per un funzionamento corretto del PWM i suoi parametri (duty cycle, frequenza) non devono cambiare finch\u00e9 non termina il ciclo attuale, ma nuovi parametri possono gi\u00e0 essere trasmessi. Di conseguenza, i parametri attuali vengono mantenuti in <em>registro shadow<\/em>, e i nuovi entrano in <em>registro di pre-carico<\/em>, essendo registrati nel corrispondente registro del chip.<\/p>\n<p><\/p>\n<p><em>Varie<\/em><br \/>\n<strong>prescaler<\/strong> \u2013 divisore di frequenza<br \/>\n<strong>per impostare un bit<\/strong> \u2013 impostare il bit a 1<br \/>\n<strong>per cancellare\/reset un bit<\/strong> \u2013 resettare il bit a 0 (<em>reset<\/em> \u2013 caratteristica delle schede tecniche STM)<\/p>\n<p><\/p>\n<h3 id=\"chto-dalshe\">E ora?<\/h3>\n<p><\/p>\n<p>In realt\u00e0, qui era prevista una parte pratica con la dimostrazione di tre progetti su STM32 e STM8, realizzati appositamente per questo articolo con l'aiuto delle schede tecniche, con lampadine, SPI, timer, PWM e interruzioni:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Come e perch\u00e9 leggere i datasheet, se i microcontrollori sono il tuo hobby\" src=\"\/wp-content\/uploads\/2019\/04\/8929bad65dad7473a81a221281c43557.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ma il testo risulta piuttosto lungo, quindi i progetti vengono rinviati alla seconda parte.<\/p>\n<p><\/p>\n<p>L'abilit\u00e0 di leggere le schede tecniche ti aiuter\u00e0 con il tuo hobby, ma difficilmente sostituir\u00e0 la comunicazione dal vivo con colleghi appassionati nei forum e nelle chat. Per questo, \u00e8 comunque necessario migliorare prima di tutto la lingua inglese. E quindi, per coloro che hanno letto tutto: un premio speciale: due lezioni gratuite su Skyeng al primo pagamento con il codice <code>HABR2<\/code>.<\/p>\n<p>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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\udd47Come e perch\u00e9 leggere i datasheet, se i microcontrollori sono la tua passione | ProHoster","description":"Microelettronica.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/32463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=32463"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32463\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/24267"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=32463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=32463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=32463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}