{"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\/pt\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","title":{"rendered":"Como e por que ler datasheets, se microcontroladores s\u00e3o seu hobby","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Como e por que ler datasheets, se microcontroladores s\u00e3o seu hobby\" src=\"\/wp-content\/uploads\/2019\/04\/ae2537b0263d692c4f79e7b5f7bc0797.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A microeletr\u00f4nica se tornou uma paix\u00e3o popular nos \u00faltimos anos, gra\u00e7as ao m\u00e1gico Arduino. Mas, veja, quando h\u00e1 verdadeiro interesse, \u00e9 f\u00e1cil ultrapassar o DigitalWrite() rapidamente, e o que fazer em seguida n\u00e3o est\u00e1 t\u00e3o claro. Os desenvolvedores do Arduino fizeram bastante para baixar a barreira de entrada em seu ecossistema, mas al\u00e9m dele ainda existe uma floresta densa de circuitos complexos, pouco acess\u00edvel para os entusiastas.<\/p>\n<p><\/p>\n<p>Por exemplo, os datasheets. \u00c0 primeira vista, eles parecem ter tudo que voc\u00ea precisa, \u00e9 s\u00f3 pegar e usar. Mas seus autores claramente n\u00e3o t\u00eam a inten\u00e7\u00e3o de popularizar os microcontroladores; \u00e0s vezes <em>parece<\/em>, que eles abusam de termos obscuros e abrevia\u00e7\u00f5es para descrever coisas simples, a fim de confundir ainda mais o iniciante. Por\u00e9m, n\u00e3o est\u00e1 tudo t\u00e3o ruim, se houver vontade, a solu\u00e7\u00e3o se revela.<\/p>\n<p><\/p>\n<p>Neste artigo, compartilharei a experi\u00eancia de um humanista ao lidar com datasheets para fins de hobby. O texto \u00e9 destinado a entusiastas que cresceram al\u00e9m do Arduino, e assume alguma compreens\u00e3o dos princ\u00edpios de funcionamento dos microcontroladores.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Come\u00e7arei com o tradicional<\/p>\n<p><\/p>\n<h3 id=\"migaem-svetodiodom-na-arduino\">Blinking LED on Arduino<\/h3>\n<p><\/p>\n<p>E aqui est\u00e1 o c\u00f3digo:<\/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>\u201cO que \u00e9 isso? \u2013 Perguntar\u00e1 o leitor experiente. \u2013 Por que voc\u00ea escreve algo no registrador de entrada PINB? Ele \u00e9 apenas para leitura!\u201d De fato, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.arduino.cc\/en\/Reference\/PortManipulation\">a documenta\u00e7\u00e3o do Arduino<\/a><\/noindex>, como a maioria dos artigos did\u00e1ticos na internet, afirma que esse registrador \u00e9 somente leitura. Eu pensava assim tamb\u00e9m, at\u00e9 reler <noindex><a rel=\"nofollow\" href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf\">o datasheet<\/a><\/noindex> do Atmega328p, enquanto preparava este artigo. E l\u00e1 est\u00e1:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Como e por que ler datasheets, se microcontroladores s\u00e3o seu hobby\" src=\"\/wp-content\/uploads\/2019\/04\/4c754bda59d9f18a38209cc32f0fb3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Este \u00e9 um recurso relativamente novo, que n\u00e3o existia no Atmega8, e nem todos sabem disso ou mencionam por quest\u00f5es de compatibilidade retroativa. Mas \u00e9 uma boa maneira de demonstrar que vale a pena ler datasheets, para aproveitar todas as funcionalidades do chip, incluindo as menos conhecidas. E essa n\u00e3o \u00e9 a \u00fanica raz\u00e3o.<\/p>\n<p><\/p>\n<h2 id=\"zachem-esche-chitat-datashity\">Por que mais ler datasheets<\/h2>\n<p><\/p>\n<p>Normalmente, os usu\u00e1rios de Arduino, depois de se divertirem com LEDs e AnalogWrite, come\u00e7am a conectar v\u00e1rios m\u00f3dulos e chips \u00e0 placa, para os quais j\u00e1 existem bibliotecas escritas. Mais cedo ou mais tarde, surge uma biblioteca que n\u00e3o funciona como deveria. Ent\u00e3o, o entusiasta come\u00e7a a mexer nela para consert\u00e1-la, e l\u00e1 vem...<\/p>\n<p><\/p>\n<p>L\u00e1 acontece algo completamente incompreens\u00edvel, ent\u00e3o \u00e9 necess\u00e1rio ir ao Google, ler in\u00fameros tutoriais, pegar segmentos do c\u00f3digo de algu\u00e9m que se encaixe e finalmente alcan\u00e7ar o objetivo. Isso proporciona uma forte sensa\u00e7\u00e3o de realiza\u00e7\u00e3o, mas na verdade o processo \u00e9 semelhante a inventar a bicicleta por meio da engenharia reversa de uma motocicleta. E, al\u00e9m disso, n\u00e3o aumenta a compreens\u00e3o de como essa bicicleta funciona. Sei disso porque fiz isso por muito tempo.<\/p>\n<p><\/p>\n<p>Se eu tivesse passado alguns dias estudando a documenta\u00e7\u00e3o do Atmega328 em vez dessa atividade fascinante, teria economizado uma quantidade enorme de tempo. Afinal, \u00e9 um microcontrolador bastante simples.<\/p>\n<p><\/p>\n<p>Portanto, \u00e9 necess\u00e1rio ler as folhas de dados, mesmo que seja apenas para ter uma ideia de como o microcontrolador \u00e9 estruturado e o que ele pode fazer. E mais:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>para verificar e otimizar as bibliotecas de outras pessoas. Elas s\u00e3o frequentemente escritas por entusiastas que est\u00e3o inventando a roda; ou, ao contr\u00e1rio, os autores deliberadamente adicionam prote\u00e7\u00e3o excessiva contra erros. Que seja tr\u00eas vezes maior e mais lento, mas que funcione com certeza;<\/p>\n<p>\n<\/li>\n<li>\n<p>para poder usar chips em projetos para os quais ningu\u00e9m escreveu uma biblioteca;<\/p>\n<p>\n<\/li>\n<li>\n<p>para facilitar a migra\u00e7\u00e3o de uma linha de microcontroladores para outra;<\/p>\n<p>\n<\/li>\n<li>\n<p>para finalmente otimizar meu c\u00f3digo antigo, que n\u00e3o cabia de jeito nenhum na Arduino;<\/p>\n<p>\n<\/li>\n<li>\n<p>para aprender a controlar qualquer chip diretamente atrav\u00e9s de seus registradores, sem se preocupar em estudar a estrutura de suas bibliotecas, se existirem.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"zachem-pisat-v-registry-napryamuyu-kogda-est-hal-i-ll\">Por que escrever diretamente nos registradores quando existem HAL e LL?<\/h2>\n<p><\/p>\n<p><em>Gloss\u00e1rio<\/em><br \/>\n<em><strong>HAL, High Abstraction Layer<\/strong> \u2013 biblioteca para controlar um microcontrolador com alto n\u00edvel de abstra\u00e7\u00e3o. Se voc\u00ea precisa usar a interface SPI1, basta configur\u00e1-la e ativ\u00e1-la, sem se preocupar com quais registradores correspondem a qu\u00ea.<br \/>\n<strong>LL, Low Level API<\/strong> \u2013 biblioteca que cont\u00e9m macros ou estruturas com endere\u00e7os de registradores, permitindo que voc\u00ea acesse-os pelo nome. DDRx, PORTx, PINx no Atmega s\u00e3o considerados LL.<\/em><\/p>\n<p><\/p>\n<p>Disputas sobre \"HAL, LL ou registradores\" ocorrem regularmente nos coment\u00e1rios do Habr. Sem pretender acesso ao conhecimento astral, apenas compartilharei minha experi\u00eancia e reflex\u00f5es como entusiasta.<\/p>\n<p><\/p>\n<p>Depois de entender mais ou menos o funcionamento do Atmega e ler artigos sobre as maravilhas do STM32, comprei uma d\u00fazia de placas diferentes \u2013 tanto Discovery quanto as \"P\u00edlulas Azuis\", e at\u00e9 mesmo chips soltos para meus projetos. Todos eles ficaram guardados na caixa por dois anos. \u00c0s vezes, me dizia: \"OK, neste fim de semana vou aprender STM\", abria o CubeMX, gerava a configura\u00e7\u00e3o para SPI, olhava para a parede de texto resultante, repleta de copyrights da STM, e decidia que era um pouco demais.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Como e por que ler datasheets, se microcontroladores s\u00e3o seu hobby\" src=\"\/wp-content\/uploads\/2019\/04\/d83be97ba2767121f4be20d524000afe.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9 claro que d\u00e1 para entender o que o CubeMX escreveu aqui. Mas ao mesmo tempo, \u00e9 evidente que memorizar todas as formula\u00e7\u00f5es, para depois escrev\u00ea-las manualmente, \u00e9 imposs\u00edvel. E depurar isso, caso eu esque\u00e7a de marcar alguma op\u00e7\u00e3o no Cube, \u00e9 completamente complicado.<\/p>\n<p><\/p>\n<p>Passaram-se dois anos, e eu ainda olhava com desejo para <noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=fr.appsolute.st&amp;hl=ru\">o ST MCU Finder<\/a><\/noindex> em busca de chips saborosos, mas que estavam al\u00e9m da minha compreens\u00e3o, at\u00e9 que acabei encontrando um <noindex><a rel=\"nofollow\" href=\"https:\/\/lujji.github.io\/blog\/bare-metal-programming-stm8\/\">artigo maravilhoso<\/a><\/noindex>, ainda que sobre STM8. E <em>de repente<\/em> percebi que todo esse tempo bati na porta aberta: os registradores do STM s\u00e3o organizados da mesma forma que os de qualquer outro MCU, e para trabalhar com eles, o Cube n\u00e3o \u00e9 obrigat\u00f3rio. <em>O que, eu poderia fazer isso?..<\/em><\/p>\n<p><\/p>\n<p>O HAL e especificamente o STM32CubeMX \u2013 s\u00e3o ferramentas para engenheiros profissionais que trabalham intensamente com chips STM32. A principal caracter\u00edstica \u00e9 o alto n\u00edvel de abstra\u00e7\u00e3o, permitindo migra\u00e7\u00f5es r\u00e1pidas de um MCU para outro e at\u00e9 entre diferentes n\u00facleos, enquanto permanece dentro da linha STM32. Os entusiastas se deparam com essas tarefas raramente \u2013 nossa escolha de MCU geralmente \u00e9 limitada ao que encontramos no AliExpress, e frequentemente migramos entre chips radicalmente diferentes \u2013 mudamos do Atmega para o STM, do STM para o ESP, ou o que quer que nossos amigos chineses nos apresentem de novo. O HAL aqui n\u00e3o ajudar\u00e1, e o tempo para estud\u00e1-lo n\u00e3o \u00e9 pouco.<\/p>\n<p><\/p>\n<p>Resta o LL \u2013 mas da LL at\u00e9 os registradores s\u00e3o apenas um passo. Pessoalmente, acho \u00fatil escrever meus pr\u00f3prios macros com os endere\u00e7os dos registradores: eu estudo mais atentamente o datasheet, penso no que vou precisar no futuro, o que de fato n\u00e3o \u00e9 necess\u00e1rio, melhor estruturo meus programas, e, de modo geral, enfrentar isso ajuda na memoriza\u00e7\u00e3o.<\/p>\n<p><\/p>\n<p>Al\u00e9m disso, h\u00e1 uma quest\u00e3o com o popular STM32F103 \u2013 existem duas vers\u00f5es incompat\u00edveis do LL, uma oficial da STM e a outra da Leaf Labs, utilizada no projeto STM32duino. Se for escrever uma biblioteca open-source (e eu tinha exatamente <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ontaelio\/DMdriverSTM32F1\">esse tipo de tarefa<\/a><\/noindex>), \u00e9 necess\u00e1rio criar duas vers\u00f5es ou acessar os registradores diretamente.<\/p>\n<p><\/p>\n<p>Finalmente, a elimina\u00e7\u00e3o da LL, na minha opini\u00e3o, simplifica a migra\u00e7\u00e3o, especialmente se for considerada desde o in\u00edcio do projeto. Um exemplo extremo: vamos escrever um blink de Arduino no Atmel Studio sem 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>Para que esse c\u00f3digo fa\u00e7a o LED piscar em uma placa chinesa com STM8 (do ST Visual Desktop), basta trocar dois endere\u00e7os:<\/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>Sim, estou usando uma caracter\u00edstica de conex\u00e3o do LED na placa espec\u00edfica, ele vai piscar muito devagar, mas vai piscar!<\/p>\n<p><\/p>\n<h2 id=\"kakie-byvayut-datashity\">Quais s\u00e3o os tipos de datasheets<\/h2>\n<p><\/p>\n<p>Em artigos e f\u00f3runs, tanto em russo quanto em ingl\u00eas, 'datasheets' se refere a qualquer documenta\u00e7\u00e3o t\u00e9cnica sobre chips, e assim fa\u00e7o tamb\u00e9m neste texto. Formalmente, eles s\u00e3o apenas um dos tipos dessa documenta\u00e7\u00e3o:<\/p>\n<p><\/p>\n<p><strong>Datasheet<\/strong> \u2013 Especifica\u00e7\u00f5es T\u00e1ticas e T\u00e9cnicas. Sempre dispon\u00edvel para qualquer componente eletr\u00f4nico. Informa\u00e7\u00e3o de refer\u00eancia, \u00e9 \u00fatil ter \u00e0 m\u00e3o, mas n\u00e3o vale a pena ler com muita aten\u00e7\u00e3o. No entanto, chips mais simples costumam se limitar ao datasheet para n\u00e3o gerar documentos desnecess\u00e1rios; nesse caso, <em>Manual de Refer\u00eancia<\/em> \u00e9 inclu\u00eddo aqui tamb\u00e9m.<\/p>\n<p><\/p>\n<p><strong>Manual de Refer\u00eancia<\/strong> \u2013 a pr\u00f3pria instru\u00e7\u00e3o, um livro longo com 1000+ p\u00e1ginas. Ela descreve detalhadamente o funcionamento de tudo que foi embutido no chip. O principal documento para entender o microcontrolador. Diferente do <em>datasheet<\/em>, as instru\u00e7\u00f5es s\u00e3o escritas para uma ampla gama de MCs, contendo muita informa\u00e7\u00e3o sobre a periferia que pode n\u00e3o estar presente no seu modelo espec\u00edfico.<\/p>\n<p><\/p>\n<p><strong>Manual de Programa\u00e7\u00e3o<\/strong> ou <strong>Manual do Conjunto de Instru\u00e7\u00f5es<\/strong> \u2013 instru\u00e7\u00f5es sobre comandos \u00fanicos do microcontrolador. Destinada \u00e0queles que programam em Assembly. Os autores de compiladores a utilizam ativamente para otimizar o c\u00f3digo, portanto, em geral, n\u00e3o precisaremos dela. Mas \u00e9 \u00fatil consultar para uma compreens\u00e3o geral, especialmente em alguns comandos espec\u00edficos, como sa\u00edda de interrup\u00e7\u00e3o, e ao usar um depurador ativamente.<\/p>\n<p><\/p>\n<p><strong>Nota de Aplica\u00e7\u00e3o<\/strong> \u2013 dicas \u00fateis para resolver problemas espec\u00edficos, muitas vezes com exemplos de c\u00f3digo.<\/p>\n<p><\/p>\n<p><strong>Errata<\/strong> \u2013 descri\u00e7\u00e3o de casos de comportamento n\u00e3o padr\u00e3o do chip com op\u00e7\u00f5es de solu\u00e7\u00e3o, se houver.<\/p>\n<p><\/p>\n<h2 id=\"chto-est-v-datashitah\">O que h\u00e1 nos datasheets<\/h2>\n<p><\/p>\n<p>Diretamente em <em>Datasheet<\/em> podemos precisar de se\u00e7\u00f5es como:<\/p>\n<p><\/p>\n<p><strong>Resumo do Dispositivo<\/strong> \u2013 a primeira p\u00e1gina do datasheet resume o dispositivo. Muito \u00fatil em situa\u00e7\u00f5es em que voc\u00ea encontrou um chip em algum lugar (viu na loja, desoldou, encontrou uma men\u00e7\u00e3o) e deseja entender do que se trata.<\/p>\n<p><\/p>\n<p><strong>Descri\u00e7\u00e3o Geral<\/strong> \u2013 uma descri\u00e7\u00e3o mais detalhada das capacidades dos chips da linha.<\/p>\n<p><\/p>\n<p><strong>Pinouts<\/strong> \u2013 diagramas de pinos para todos os poss\u00edveis inv\u00f3lucros do chip (qual pino em qual perna).<\/p>\n<p><\/p>\n<p><strong>Descri\u00e7\u00e3o do Pino<\/strong> \u2013 descri\u00e7\u00e3o da fun\u00e7\u00e3o e capacidades de cada pino.<\/p>\n<p><\/p>\n<p><strong>Mapa de Mem\u00f3ria<\/strong> \u2013 o mapa de endere\u00e7os na mem\u00f3ria provavelmente n\u00e3o ser\u00e1 necess\u00e1rio, mas \u00e0s vezes inclui tamb\u00e9m a tabela de endere\u00e7os dos blocos de registradores.<\/p>\n<p><\/p>\n<p><strong>Mapa de Registradores<\/strong> \u2013 a tabela de endere\u00e7os dos blocos de registradores geralmente est\u00e1 exatamente no datasheet, e no <em>Manual de Refer\u00eancia<\/em> \u2013 somente deslocamentos (<em>endere\u00e7o dos deslocamentos<\/em>).<\/p>\n<p><\/p>\n<p><strong>Caracter\u00edsticas El\u00e9tricas<\/strong> \u2013 nesta se\u00e7\u00e3o, estamos principalmente interessados em <strong>classifica\u00e7\u00f5es m\u00e1ximas absolutas<\/strong>, listando as cargas m\u00e1ximas para o chip. Ao contr\u00e1rio da indestrut\u00edvel Atmega328p, a maioria dos MCs n\u00e3o permite conectar cargas significativas aos pinos, o que se torna uma surpresa desagrad\u00e1vel para os usu\u00e1rios do Arduino.<\/p>\n<p><\/p>\n<p><strong>Informa\u00e7\u00f5es do Pacote<\/strong> \u2013 desenhos dos inv\u00f3lucros dispon\u00edveis, \u00fateis ao projetar suas placas.<\/p>\n<p><\/p>\n<p><em>Manual de Refer\u00eancia<\/em> \u00e9 estruturado em se\u00e7\u00f5es dedicadas \u00e0 periferia espec\u00edfica indicada em seus cabe\u00e7alhos. Cada cap\u00edtulo pode ser dividido em tr\u00eas partes:<\/p>\n<p><\/p>\n<p><strong>Vis\u00e3o Geral<\/strong>, <strong>Introdu\u00e7\u00e3o<\/strong>, <strong>Recursos<\/strong> \u2013 uma vis\u00e3o geral das capacidades da periferia;<\/p>\n<p><\/p>\n<p><strong>Descri\u00e7\u00e3o Funcional<\/strong>, <strong>Guia de Uso<\/strong> ou simplesmente o bloco principal da se\u00e7\u00e3o \u2013 uma descri\u00e7\u00e3o textual detalhada dos princ\u00edpios de funcionamento da periferia e das maneiras de utiliz\u00e1-la;<\/p>\n<p><\/p>\n<p><strong>Registradores<\/strong> \u2013 descri\u00e7\u00e3o dos registradores de controle. Em casos simples como GPIO ou SPI, isso pode ser suficiente para come\u00e7ar a usar a periferia, mas muitas vezes \u00e9 necess\u00e1rio ler as partes anteriores.<\/p>\n<p><\/p>\n<h2 id=\"kak-chitat-datashity\">Como Ler Datasheets<\/h2>\n<p><\/p>\n<p>Datasheets podem assustar com seu volume e a abund\u00e2ncia de palavras incompreens\u00edveis. Na verdade, n\u00e3o \u00e9 t\u00e3o assustador se voc\u00ea conhecer algumas dicas.<\/p>\n<p><\/p>\n<p>Instale <strong>um bom leitor de PDF<\/strong>. Datasheets s\u00e3o escritas nas gloriosas tradi\u00e7\u00f5es dos manuais em papel, \u00e9 \u00f3timo imprimi-los, colocar marcadores de pl\u00e1stico e encadern\u00e1-los. O hiperm\u00eddia nelas \u00e9 observado em quantidades m\u00ednimas. Felizmente, pelo menos a estrutura do documento \u00e9 formatada com marcadores, portanto, um bom leitor com navega\u00e7\u00e3o conveniente \u00e9 muito necess\u00e1rio.<\/p>\n<p><\/p>\n<p>Um datasheet n\u00e3o \u00e9 um livro de texto de Stroustrup, nele <strong>n\u00e3o \u00e9 necess\u00e1rio ler tudo em sequ\u00eancia<\/strong>. Se voc\u00ea seguiu a dica anterior \u2013 simplesmente encontre na barra de marcadores a se\u00e7\u00e3o desejada.<\/p>\n<p><\/p>\n<p>Datasheets, especialmente <em>Manuais de Refer\u00eancia<\/em>, podem descrever as capacidades n\u00e3o de um chip espec\u00edfico, mas <strong>de toda a linha<\/strong>. Isso significa que metade ou at\u00e9 dois ter\u00e7os das informa\u00e7\u00f5es n\u00e3o t\u00eam rela\u00e7\u00e3o com o seu chip. Antes de estudar os registradores TIM7, verifique se voc\u00ea <em>Descri\u00e7\u00e3o Geral<\/em>, possui um.<\/p>\n<p><\/p>\n<p>Saber <strong>ingl\u00eas<\/strong> o suficiente em <strong>um n\u00edvel b\u00e1sico<\/strong>. As fichas t\u00e9cnicas s\u00e3o compostas em metade por termos desconhecidos para um falante m\u00e9dio da l\u00edngua e na outra metade por constru\u00e7\u00f5es conectivas simples. Existem tamb\u00e9m \u00f3timas fichas t\u00e9cnicas em chin\u00eas ingl\u00eas, onde metade s\u00e3o termos e a outra metade \u00e9 uma cole\u00e7\u00e3o aleat\u00f3ria de palavras.<\/p>\n<p><\/p>\n<p>Se voc\u00ea encontrar <strong>uma palavra desconhecida<\/strong>, n\u00e3o tente traduzi-la usando um dicion\u00e1rio ingl\u00eas-russo. Se voc\u00ea ficar confuso com <em>histerese<\/em>, a tradu\u00e7\u00e3o \"histerese\" n\u00e3o te deixar\u00e1 mais confort\u00e1vel. Use o Google, Stack Overflow, Wikipedia, f\u00f3runs, onde o conceito necess\u00e1rio ser\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/5357918\/what-does-hysteresis-mean-and-how-does-it-apply-to-computer-science-or-programmi\">explicado em termos simples com exemplos<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>A melhor maneira de entender o que voc\u00ea leu \u00e9 <strong>testar na pr\u00e1tica<\/strong>. Portanto, tenha \u00e0 m\u00e3o a placa de depura\u00e7\u00e3o com a qual voc\u00ea est\u00e1 se familiarizando, ou melhor ainda, tenha duas \u2014 por precau\u00e7\u00e3o, caso voc\u00ea ainda n\u00e3o tenha compreendido algo e veja uma fuma\u00e7a m\u00e1gica.<\/p>\n<p><\/p>\n<p>\u00c9 \u00fatil ter a ficha t\u00e9cnica \u00e0 m\u00e3o quando voc\u00ea <strong>l\u00ea o tutorial de algu\u00e9m<\/strong> ou estuda a biblioteca de outra pessoa. \u00c9 bastante poss\u00edvel que voc\u00ea encontre uma solu\u00e7\u00e3o mais otimizada para sua tarefa nela. E ao contr\u00e1rio \u2014 se n\u00e3o conseguir entender como o registrador funciona pela ficha t\u00e9cnica, pesquise: provavelmente algu\u00e9m j\u00e1 descreveu tudo em termos simples ou deixou um c\u00f3digo claro no GitHub.<\/p>\n<p><\/p>\n<h2 id=\"slovarik\">Gloss\u00e1rio<\/h2>\n<p><\/p>\n<p>Algumas palavras e nota\u00e7\u00f5es \u00fateis que ajudam a se familiarizar mais rapidamente com as fichas t\u00e9cnicas. O que veio \u00e0 mente nos \u00faltimos dias, adi\u00e7\u00f5es e corre\u00e7\u00f5es s\u00e3o bem-vindas.<\/p>\n<p><\/p>\n<p><em>Eletricidade<\/em><br \/>\n<strong>Vcc<\/strong>, <strong>Vdd<\/strong> \u2013 \"positivo\", alimenta\u00e7\u00e3o<br \/>\n<strong>Vss<\/strong>, <strong>Vee<\/strong> \u2013 \"negativo\", terra<br \/>\n<strong>corrente<\/strong> \u2013 corrente<br \/>\n<strong>tens\u00e3o<\/strong> \u2013 tens\u00e3o<br \/>\n<strong>para drenar corrente<\/strong> \u2013 funcionar como \"terra\" para a carga externa<br \/>\n<strong>para fornecer corrente<\/strong> \u2013 alimentar a carga externa<br \/>\n<strong>pino de alta capacidade de drenar\/fornecer<\/strong> \u2013 pino com alta \"tolera\u00e7\u00e3o\" \u00e0 carga<\/p>\n<p><\/p>\n<p><em>IO<\/em><br \/>\n<strong>H, Alto<\/strong> \u2013 no pino Vcc<br \/>\n<strong>L, Baixo<\/strong> \u2013 no pino Vss<br \/>\n<strong>Alta Imped\u00e2ncia<\/strong>, <strong>Hi-Z<\/strong>, <strong>flutuante<\/strong> \u2013 no pino n\u00e3o h\u00e1 nada, \"alta resist\u00eancia\", ele \u00e9 na verdade invis\u00edvel para o mundo exterior.<br \/>\n<strong>fraco pull up<\/strong>, <strong>fraco pull down<\/strong> \u2013 resistor pull-up\/pull-down embutido, an\u00e1logo aproximado a 50 kOhm (veja a ficha t\u00e9cnica). Usado, por exemplo, para que o pino de entrada n\u00e3o fique solto no ar, causando disparos falsos. <em>Fraco<\/em> \u2013 porque \u00e9 f\u00e1cil de \"substituir\".<br \/>\n<strong>push pull<\/strong> \u2013 modo de sa\u00edda do pino, no qual ele alterna entre <em>Alto<\/em> e <em>Baixo<\/em> \u2013 sa\u00edda comum com Arduino.<br \/>\n<strong>drain aberta<\/strong> \u2013 designa\u00e7\u00e3o do modo de sa\u00edda, onde o pino pode ser <em>Baixo<\/em>, ou <em>Alta Imped\u00e2ncia \/ Flutuante<\/em>. Isso geralmente n\u00e3o \u00e9 um \"drain aberto\" verdadeiro, existem diodos de prote\u00e7\u00e3o, resistores, e assim por diante. \u00c9 apenas uma designa\u00e7\u00e3o de modo terra\/nada.<br \/>\n<strong>drain aberto verdadeiro<\/strong> \u2013 isso sim \u00e9 um verdadeiro drain aberto: o pino vai diretamente para o terra se estiver aberto, ou permanece em estado flutuante se fechado. Isso significa que, se necess\u00e1rio, pode-se aplicar uma tens\u00e3o maior do que Vcc, mas o m\u00e1ximo ainda \u00e9 especificado no datasheet na se\u00e7\u00e3o <em>Limites M\u00e1ximos Absolutos \/ Tens\u00e3o<\/em>. <\/p>\n<p><\/p>\n<p><em>Interfaces<\/em><br \/>\n<strong>em s\u00e9rie<\/strong> \u2013 conectados em sequ\u00eancia<br \/>\n<strong>para encadear<\/strong> \u2013 agrupar chips em uma cadeia por conex\u00e3o sequencial, aumentando o n\u00famero de sa\u00eddas.<br \/>\n<strong>deslocamento<\/strong> \u2013 shift, normalmente indica um deslocamento de bits. Portanto, <strong>para deslocar para dentro<\/strong> e <strong>para deslocar para fora<\/strong> \u2013 receber e transmitir dados bit a bit.<br \/>\n<strong>trava<\/strong> \u2013 mecanismo que cobre o buffer enquanto os bits est\u00e3o sendo deslocados atrav\u00e9s dele. Quando a transmiss\u00e3o termina, a trava se abre e os bits come\u00e7am a funcionar.<br \/>\n<strong>para sincronizar entrada<\/strong> \u2013 realizar transmiss\u00e3o bit a bit, deslocar todos os bits para os lugares desejados.<br \/>\n<strong>buffer duplo<\/strong>, <strong>registro sombra<\/strong>, <strong>registro de pr\u00e9-carregamento<\/strong> \u2013 designa\u00e7\u00f5es hist\u00f3ricas, onde o registro deve ser capaz de receber novos dados, mas mant\u00ea-los at\u00e9 um determinado momento. Por exemplo, para o funcionamento correto do PWM, seus par\u00e2metros (duty cycle, frequ\u00eancia) n\u00e3o devem mudar at\u00e9 que o ciclo atual termine, mas novos par\u00e2metros podem j\u00e1 ter sido transmitidos. Assim, os atuais s\u00e3o mantidos em <em>registro sombra<\/em>, enquanto os novos v\u00e3o para <em>registro de pr\u00e9-carregamento<\/em>, sendo gravados no registro correspondente do chip.<\/p>\n<p><\/p>\n<p><em>Diversos<\/em><br \/>\n<strong>pr\u00e9-divisor<\/strong> \u2013 divisor de frequ\u00eancia<br \/>\n<strong>para definir um bit<\/strong> \u2013 definir o bit como 1<br \/>\n<strong>para limpar\/resetar um bit<\/strong> \u2013 resetar o bit para 0 (<em>resetar<\/em> \u2013 recurso dos datasheets STM)<\/p>\n<p><\/p>\n<h3 id=\"chto-dalshe\">O que vem a seguir<\/h3>\n<p><\/p>\n<p>Na verdade, estava planejada uma parte pr\u00e1tica com a demonstra\u00e7\u00e3o de tr\u00eas projetos em STM32 e STM8, realizados especialmente para este artigo utilizando os datasheets, com l\u00e2mpadas, SPI, temporizadores, PWM e interrup\u00e7\u00f5es:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Como e por que ler datasheets, se microcontroladores s\u00e3o seu hobby\" src=\"\/wp-content\/uploads\/2019\/04\/8929bad65dad7473a81a221281c43557.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mas o texto j\u00e1 est\u00e1 bastante longo, portanto os projetos ser\u00e3o enviados para a segunda parte.<\/p>\n<p><\/p>\n<p>A habilidade de ler datasheets ajudar\u00e1 voc\u00ea com seu hobby, mas dificilmente substituir\u00e1 a intera\u00e7\u00e3o ao vivo com colegas de interesse em f\u00f3runs e chats. Para isso, \u00e9 importante melhorar seu ingl\u00eas. Portanto, para aqueles que lerem at\u00e9 aqui \u2013 um pr\u00eamio especial: duas aulas gratuitas no Skyeng na primeira compra com o c\u00f3digo <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.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\/pt\/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=\"pt_PT\" \/>\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\/pt\/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\udd47Como e por que ler datasheets se microcontroladores s\u00e3o o seu hobby | ProHoster","description":"Microeletr\u00f4nica.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/kak-i-zachem-chitat-datashity-esli-mikrokontrollery-vashe-hobbi","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/32463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=32463"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/32463\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/24267"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=32463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=32463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=32463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}