<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I2C - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/categorias/protoclos/i2c/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Sun, 30 Nov 2025 21:43:29 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mcu.tec.br/wp-content/uploads/2025/02/Robo-para-o-site-MCU.tec_.br-512x512-1-150x150.png</url>
	<title>I2C - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Proteção Inteligente para Barramentos I²C: Como Resistores em Série e Diodos Schottky Aumentam a Confiabilidade de Sistemas Embarcados</title>
		<link>https://mcu.tec.br/protoclos/i2c/protecao-inteligente-para-barramentos-i%c2%b2c-como-resistores-em-serie-e-diodos-schottky-aumentam-a-confiabilidade-de-sistemas-embarcados/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=protecao-inteligente-para-barramentos-i%25c2%25b2c-como-resistores-em-serie-e-diodos-schottky-aumentam-a-confiabilidade-de-sistemas-embarcados</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Thu, 04 Dec 2025 21:16:29 +0000</pubDate>
				<category><![CDATA[I2C]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=931</guid>

					<description><![CDATA[<p>A proteção de barramentos I²C em sistemas embarcados é essencial para garantir confiabilidade, estabilidade e segurança na comunicação entre microcontroladores e sensores distribuídos. Este artigo explica de forma didática e tecnicamente rigorosa como a combinação de resistores em série e diodos Schottky — aplicada individualmente em cada ramificação — pode evitar travamentos, reduzir interferências eletromagnéticas, limitar correntes de curto e desacoplar capacitâncias parasitas. A análise inclui fundamentos teóricos, modelagem elétrica, cálculos reais e recomendações de projeto. Ideal para engenheiros, técnicos e estudantes que buscam construir sistemas I²C mais robustos, especialmente em ambientes ruidosos, cabeamentos longos e aplicações industriais. Aprenda como dimensionar corretamente cada componente e adote práticas profissionais para aumentar a resiliência do seu barramento I²C.</p>
<p>The post <a href="https://mcu.tec.br/protoclos/i2c/protecao-inteligente-para-barramentos-i%c2%b2c-como-resistores-em-serie-e-diodos-schottky-aumentam-a-confiabilidade-de-sistemas-embarcados/">Proteção Inteligente para Barramentos I²C: Como Resistores em Série e Diodos Schottky Aumentam a Confiabilidade de Sistemas Embarcados</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">O barramento I²C é amplamente utilizado em sistemas embarcados pela sua simplicidade, baixo custo e capacidade de interligar múltiplos dispositivos utilizando apenas duas linhas: <strong>SDA</strong> (dados) e <strong>SCL</strong> (clock). No entanto, apesar de sua popularidade, o I²C é um barramento sensível a ruído, capacitância de cabos, falhas de dispositivos e travamentos ocasionados por curtos em um único módulo. Em aplicações reais — especialmente quando vários sensores estão distribuídos em cabos longos, ramificações (“stubs”) ou em ambientes eletricamente ruidosos — confiar no I²C sem mecanismos adicionais de proteção pode comprometer a integridade do sistema inteiro.</p>



<p class="wp-block-paragraph">Para mitigar esses problemas, diversos projetistas implementam técnicas de robustez que vão além do básico. Entre elas, destaca-se a combinação de <strong>resistores em série</strong> e <strong>diodos Schottky</strong>, aplicada individualmente em cada ramificação de módulo. Essa técnica protege contra curtos, limita corrente, reduz interferências eletromagnéticas, desacopla capacitâncias parasitas e, sobretudo, isola falhas de forma que <strong>nenhum módulo pode travar o barramento completo</strong>.</p>



<p class="wp-block-paragraph">A topologia analisada neste artigo é ilustrada no circuito abaixo, no qual um <strong>Arduino Uno R3</strong> se comunica com quatro dispositivos I²C (U1 a U4). Cada dispositivo é conectado por meio de um resistor em série (R1 a R4) e um diodo Schottky (D1 a D4), formando uma estrutura de proteção individual por ramificação. Essa abordagem aumenta significativamente a confiabilidade do barramento, mesmo na presença de cabos longos, dispositivos de procedência variada ou ambientes sujeitos a picos eletromagnéticos.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="476" src="https://mcu.tec.br/wp-content/uploads/2025/11/image-32-1024x476.png" alt="" class="wp-image-932" srcset="https://mcu.tec.br/wp-content/uploads/2025/11/image-32-1024x476.png 1024w, https://mcu.tec.br/wp-content/uploads/2025/11/image-32-300x139.png 300w, https://mcu.tec.br/wp-content/uploads/2025/11/image-32-768x357.png 768w, https://mcu.tec.br/wp-content/uploads/2025/11/image-32.png 1124w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Resistores em Série no Barramento I²C (R1–R4)</h2>



<p class="wp-block-paragraph">Quando olhamos para o esquema, vemos que cada módulo I²C (U1, U2, U3, U4) não está ligado “direto” ao barramento SDA/SCL. Em vez disso, há sempre <strong>um resistor em série</strong> (R1, R2, R3, R4) entre o barramento principal e o pino correspondente do módulo.<br>Isso não é um mero detalhe: é uma escolha de projeto importante para <strong>proteção</strong>, <strong>estabilidade de sinal</strong> e <strong>robustez do sistema</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">1.1 Função básica: limitar corrente em falhas</h3>



<p class="wp-block-paragraph">O I²C é um barramento “open-drain/open-collector”:</p>



<ul class="wp-block-list">
<li>Os dispositivos <strong>apenas puxam a linha para o nível baixo (0)</strong>.</li>



<li>O nível alto é obtido por meio dos <strong>resistores de pull-up</strong>.</li>
</ul>



<p class="wp-block-paragraph">Se, por algum motivo, um módulo entrar em falha e <strong>curto-circuitar SDA ou SCL para GND</strong> (ou mesmo para VCC), sem resistor série a corrente seria limitada somente pela resistência interna dos transistores – o que pode facilmente danificar o módulo, o microcontrolador ou ambos.</p>



<p class="wp-block-paragraph">Com o resistor série, a corrente máxima é aproximada por:</p>



<p class="wp-block-paragraph">\[<br>I_{máx} \approx \frac{V_{CC}}{R_{série}}<br>\]



<p class="wp-block-paragraph">Exemplo típico:</p>



<ul class="wp-block-list">
<li>\( V_{CC} = 5,\text{V} \)</li>



<li>\( R_{série} = 220,\Omega \)</li>
</ul>



<p class="wp-block-paragraph">\[<br>I_{máx} = \frac{5}{220} \approx 22{,}7,\text{mA}<br>\]



<p class="wp-block-paragraph">Esse valor é alto, mas <strong>muitíssimo menor</strong> do que dezenas ou centenas de miliampères que poderiam circular num curto direto.<br>Na prática, essa limitação:</p>



<ul class="wp-block-list">
<li>Protege o driver de saída do Arduino.</li>



<li>Impede que uma falha em um único módulo destrua o barramento todo.</li>



<li>Dá tempo para o sistema detectar o problema (via watchdog, varredura de dispositivos, etc.) sem dano físico imediato.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">1.2 Função de “damping”: redução de reflexões e ringing</h3>



<p class="wp-block-paragraph">Fisicamente, o conjunto <strong>fio + trilha + entrada do CI</strong> se comporta como um sistema <strong>RLC distribuído</strong>, com:</p>



<ul class="wp-block-list">
<li>Resistência série (do fio e do driver)</li>



<li>Indutância parasita do cabo</li>



<li>Capacitância parasita entre condutores e para o terra</li>
</ul>



<p class="wp-block-paragraph">Quando o driver muda o nível lógico (especialmente em bordas rápidas), o sinal pode “oscilar” (ringing), produzir overshoot e undershoot, ou mesmo reflexões ao longo do cabo.</p>



<p class="wp-block-paragraph">O resistor em série aumenta a resistência vista pelo circuito e, em conjunto com a impedância característica do cabo ((Z_0)), ajuda a amortecer essas oscilações:</p>



<ul class="wp-block-list">
<li>sem resistor: \( R_{\text{total}} \approx R_{\text{driver}} \)</li>



<li>com resistor: \( R_{\text{total}} \approx R_{\text{driver}} + R_{série} \)</li>
</ul>



<p class="wp-block-paragraph">Se fizermos:</p>



<p class="wp-block-paragraph">\[<br>R_{\text{total}} ;\approx; Z_0<br>\]



<p class="wp-block-paragraph">o sistema tende a ficar <strong>criticamento amortecido</strong>, minimizando reflexões.</p>



<p class="wp-block-paragraph">Não é preciso calcular (Z_0) exatamente em projetos simples, mas entender a ideia é importante: <strong>o resistor em série está “matando” parte da energia de alta frequência</strong> que causaria problemas de integridade de sinal.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">1.3 Controle da constante de tempo RC por módulo</h3>



<p class="wp-block-paragraph">Cada ramificação do barramento possui sua <strong>capacitância própria</strong>:</p>



<ul class="wp-block-list">
<li>Capacitância dos pinos SDA/SCL do CI</li>



<li>Capacitância do cabo local</li>



<li>Parasitismos de trilha e conector</li>
</ul>



<p class="wp-block-paragraph">Sem resistor série, toda essa capacitância é vista diretamente pelo barramento.<br>Com o resistor série, criamos um pequeno filtro RC:</p>



<p class="wp-block-paragraph">\[<br>\tau_{\text{ramo}} = R_{série} \cdot C_{\text{ramo}}<br>\]



<p class="wp-block-paragraph">Exemplo:</p>



<ul class="wp-block-list">
<li>\( R_{série} = 220,\Omega \)</li>



<li>\( C_{\text{ramo}} = 20,\text{pF} \)</li>
</ul>



<p class="wp-block-paragraph">\[<br>\tau_{\text{ramo}} = 220 \cdot 20\times10^{-12} = 4{,}4,\text{ns}<br>\]



<p class="wp-block-paragraph">Esse valor é <strong>desprezível</strong> frente ao tempo de subida típico em I²C padrão (ordem de centenas de nanosegundos a microssegundos). Ou seja:</p>



<ul class="wp-block-list">
<li>Não atrapalha a velocidade de 100 kHz ou 400 kHz.</li>



<li>Ajuda a “desacoplar” capacitâncias de cada módulo, evitando que um único dispositivo com capacitância alta degrade todo o barramento.</li>
</ul>



<p class="wp-block-paragraph">Na prática, escolhemos (R_{série}) num compromisso:</p>



<ul class="wp-block-list">
<li><strong>Grande o suficiente</strong> para limitar corrente e amortecer ringing.</li>



<li><strong>Pequeno o suficiente</strong> para não degradar o tempo de subida global do barramento.</li>
</ul>



<p class="wp-block-paragraph">Valores usuais: <strong>100 Ω a 470 Ω</strong> por linha e por módulo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">1.4 Efeito sobre o tempo de subida do barramento</h4>



<p class="wp-block-paragraph">O tempo de subida do I²C é dominado pelos resistores de pull-up e pela <strong>capacitância total</strong> vista pelo barramento:</p>



<p class="wp-block-paragraph">\[<br>t_r \approx 0{,}8473 \cdot R_{pullup} \cdot C_T<br>\]



<p class="wp-block-paragraph">onde:</p>



<ul class="wp-block-list">
<li>\(C_T = C_{cabos} + \sum C_{entradas}\)</li>
</ul>



<p class="wp-block-paragraph">Os resistores em série <strong>quase não alteram diretamente essa equação</strong>, pois o pull-up continua ligado ao barramento principal.<br>O que eles fazem é:</p>



<ul class="wp-block-list">
<li>Reduzir o quanto da capacitância de cada ramo é de fato “sentida” nas bordas rápidas.</li>



<li>Atuar como “isoladores suaves” entre o barramento comum e os módulos.</li>
</ul>



<p class="wp-block-paragraph">Resultado prático: <strong>maior número de módulos e cabos</strong> podem ser usados sem violar os tempos de subida especificados para o modo de operação (Standard, Fast, etc.).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">1.5 Justificativa da escolha de valor (exemplo 220 Ω)</h4>



<p class="wp-block-paragraph">Vamos supor:</p>



<ul class="wp-block-list">
<li>I²C a 100 kHz</li>



<li>VCC = 5 V</li>



<li>Pull-up de 4,7 kΩ</li>



<li>Múltiplos módulos, cada um com 20–30 pF</li>



<li>Cabos com 100–200 pF no total</li>
</ul>



<p class="wp-block-paragraph">Queremos:</p>



<ol class="wp-block-list">
<li><strong>Corrente segura em falha</strong>
<ul class="wp-block-list">
<li>Com 220 Ω, vimos que o máximo é ~23 mA em curto.</li>



<li>Muitos CIs aguentam picos dessa ordem sem queimar instantaneamente.</li>
</ul>
</li>



<li><strong>Damping razoável</strong>
<ul class="wp-block-list">
<li>220 Ω + resistência do driver (~20–30 Ω) já é suficiente para amortecer a maioria dos cabos curtos/médios.</li>
</ul>
</li>



<li><strong>Impacto mínimo na forma de onda em operação normal</strong>
<ul class="wp-block-list">
<li>O resistor só “aparece” quando há transição ou curto.</li>



<li>Durante nível estável, a queda de tensão é pequena, pois a corrente é baixa (corrente de pull-up).</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph">Assim, o valor típico de <strong>220 Ω</strong> é um bom compromisso entre:</p>



<ul class="wp-block-list">
<li>Proteção</li>



<li>Integridade de sinal</li>



<li>Simplicidade de cálculo</li>



<li>Custo e disponibilidade (valor comercial padrão)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Diodos Schottky de Proteção no Barramento I²C (D1–D4)</h2>



<p class="wp-block-paragraph">Cada módulo I²C do circuito possui um diodo Schottky ligado entre o ramo individual do módulo e o barramento principal SDA/SCL.<br>O conjunto <strong>resistor série + diodo Schottky</strong> cria um mecanismo de proteção inteligente que aumenta a robustez do barramento, evitando travamentos e reduzindo efeitos de falhas.</p>



<p class="wp-block-paragraph">Este capítulo explica em profundidade <strong>por que o diodo está ali</strong>, <strong>por que ele é do tipo Schottky</strong>, <strong>como ele se comporta eletricamente</strong>, e <strong>como sua escolha impacta a confiabilidade do sistema</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2.1 Motivação principal: evitar que um módulo defeituoso derrube o barramento inteiro</h3>



<p class="wp-block-paragraph">Em um barramento I²C padrão, se um único dispositivo entrar em falha e “grudar” SDA ou SCL em nível baixo (0 V), todo o sistema deixa de funcionar.<br>Isso é chamado de:</p>



<h4 class="wp-block-heading"><strong>bus hanging</strong> ou <strong>bus lock</strong></h4>



<p class="wp-block-paragraph">O diodo Schottky foi colocado justamente para impedir isso.</p>



<p class="wp-block-paragraph">Suponha que o módulo U2 trave seu SDA em 0 V (falha interna).<br>Sem o diodo:</p>



<ul class="wp-block-list">
<li>O 0 V se propaga diretamente para o barramento.</li>



<li>Todos os outros dispositivos ficam impedidos de enviar ou receber dados.</li>



<li>O Arduino perde o controle de todo o barramento.</li>
</ul>



<p class="wp-block-paragraph">Com o diodo Schottky na configuração típica (ânodo no módulo, cátodo no barramento):</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>módulo ---- R ----+---- barramento
                       |
                      D (Schottky)
                       |
                   GND (via módulo)

</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">módulo</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">----</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">R</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">----+----</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">barramento</span></span>
<span class="line"><span style="color: #D8DEE9FF">                       </span><span style="color: #81A1C1">|</span></span>
<span class="line"><span style="color: #D8DEE9FF">                      </span><span style="color: #88C0D0">D</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">Schottky</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                       </span><span style="color: #81A1C1">|</span></span>
<span class="line"><span style="color: #D8DEE9FF">                   </span><span style="color: #88C0D0">GND</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">via</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">módulo</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">A linha do módulo pode cair a 0 V, mas o barramento só cai <strong>até a queda direta do diodo (~0,2 a 0,3 V)</strong>.</p>



<p class="wp-block-paragraph">Como o nível “LOW” em I²C é aceito até aproximadamente:</p>



<p class="wp-block-paragraph">\[<br>V_{IL} \leq 0{,}3 \cdot V_{CC}<br>\]



<p class="wp-block-paragraph">E com Vcc=5 V:</p>



<p class="wp-block-paragraph">\[<br>V_{IL} \leq 1{,}5,\text{V}<br>\]



<p class="wp-block-paragraph">Então, se o barramento cair para apenas <strong>0,2 V</strong>, isso <em>ainda é um LOW válido</em>, e o master consegue recuperar o controle — especialmente se houver mecanismos como clock stretching ou re-varredura de dispositivos.</p>



<p class="wp-block-paragraph">Em outras palavras:</p>



<h3 class="wp-block-heading"><strong>A falha fica confinada apenas ao ramo do módulo defeituoso, e não contamina todo o barramento.</strong></h3>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2.2 Como o Schottky atua eletricamente no instante da falha</h2>



<p class="wp-block-paragraph">Suponha:</p>



<ul class="wp-block-list">
<li>O módulo trava SDA em 0 V.</li>



<li>O barramento está em nível alto (puxado por Rpull-up, ~5 V).</li>



<li>A linha do módulo (lado depois do resistor) vai instantaneamente a 0 V.</li>
</ul>



<p class="wp-block-paragraph">A diferença de tensão passa a ser:</p>



<p class="wp-block-paragraph">\[<br>V_{barramento} &#8211; V_{ramo} = 5,\text{V}<br>\]



<p class="wp-block-paragraph">Quando:</p>



<p class="wp-block-paragraph">\[<br>V_{barramento} &#8211; V_{ramo} > V_f<br>\]



<p class="wp-block-paragraph">Onde \(V_f\) (queda direta) é:</p>



<ul class="wp-block-list">
<li>~0,2–0,3 V (Schottky)</li>



<li>~0,6–0,7 V (diodo de silício comum)</li>
</ul>



<p class="wp-block-paragraph">Assim que essa condição se estabelece, o diodo conduz <strong>imediatamente</strong>, drenando para o módulo grande parte da corrente que iria para o barramento — ou seja:</p>



<ul class="wp-block-list">
<li><strong>Protege o barramento</strong></li>



<li><strong>Protege os outros módulos</strong></li>



<li><strong>Minimiza a queda de tensão que o barramento sofre</strong></li>
</ul>



<p class="wp-block-paragraph">O efeito prático é:</p>



<p class="wp-block-paragraph">O barramento não vai a zero — fica “abaixo do ideal”, mas ainda dentro da faixa aceitável para LOW I²C.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2.3 Por que Schottky e não diodos comuns?</h3>



<p class="wp-block-paragraph">A escolha do Schottky é essencial por <strong>três características físicas</strong>:</p>



<h4 class="wp-block-heading">1) Baixíssima queda de tensão direta ((V_f))</h4>



<p class="wp-block-paragraph">Enquanto um diodo de silício comum tem (V_f \approx 0{,}6) a 0,7 V:</p>



<p class="wp-block-paragraph">\[<br>V_{f,\text{Si}} \approx 0.7,\text{V}<br>\]



<p class="wp-block-paragraph">O Schottky tem:</p>



<p class="wp-block-paragraph">\[<br>V_{f,\text{Schottky}} \approx 0.2\text{–}0.3,\text{V}<br>\]



<p class="wp-block-paragraph">No contexto do I²C:</p>



<ul class="wp-block-list">
<li>Uma queda de 0,7 V derrubaria o barramento para valores próximos de LOW marginal.</li>



<li>Já 0,2 V mantém o barramento operando dentro das margens elétricas <strong>com total segurança</strong>.</li>
</ul>



<p class="wp-block-paragraph">A norma I²C permite aproximadamente:</p>



<p class="wp-block-paragraph">\[<br>V_{OL,max} = 0{,}4,\text{V}<br>\]



<p class="wp-block-paragraph">Portanto, o Schottky é a única escolha que garante operação dentro da especificação.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">2) Corrente de saturação rápida e baixa capacitância</h4>



<p class="wp-block-paragraph">Schottys possuem:</p>



<ul class="wp-block-list">
<li><strong>Capacitância muito baixa</strong><br>Importante para não prejudicar o tempo de subida SDA/SCL.</li>



<li><strong>Resposta extremamente rápida</strong><br>Essencial para proteger contra transientes.</li>
</ul>



<p class="wp-block-paragraph">Em I²C:</p>



<ul class="wp-block-list">
<li>Bordas não são rápidas como SPI, mas ainda assim a transitória causada por ruído ou falha precisa ser drenada <strong>antes</strong> de causar erro de leitura ou travamento.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">3) Corrente reversa maior, mas controlável</h4>



<p class="wp-block-paragraph">Schottkys têm corrente reversa (leakage) maior, porém esse valor é:</p>



<ul class="wp-block-list">
<li>Da ordem de µA</li>



<li>Bem pequeno comparado às correntes naturais de pull-up</li>



<li>Completamente seguro dentro da operação I²C</li>
</ul>



<p class="wp-block-paragraph">O resistor série ajuda ainda a limitar qualquer efeito adverso dessa corrente reversa, tornando a combinação “R série + Schottky” ideal.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2.4 Análise matemática do efeito do diodo sobre o barramento</h3>



<p class="wp-block-paragraph">Suponha:</p>



<ul class="wp-block-list">
<li>Barramento em nível alto: (5,\text{V})</li>



<li>Módulo em falha em (0,\text{V})</li>



<li>Diodo conduz com (V_f = 0{,}25,\text{V})</li>



<li>Resistor série em 220 Ω</li>
</ul>



<p class="wp-block-paragraph">A queda do barramento depende do divisor dinâmico formado por:</p>



<ul class="wp-block-list">
<li>Rpull-up</li>



<li>Resistência efetiva do diodo (muito menor)</li>



<li>Resistência série</li>
</ul>



<p class="wp-block-paragraph">Quando o diodo conduz, ele apresenta uma resistência dinâmica (r_d) pequena (alguns ohms).<br>O barramento sente algo como um divisor:</p>



<p class="wp-block-paragraph">\[<br>V_{barramento} \approx \frac{R_{pull-up}}{R_{pull-up} + r_d + R_{série}} \cdot V_{CC}<br>\]



<p class="wp-block-paragraph">Se tomarmos, por exemplo:</p>



<ul class="wp-block-list">
<li>\(R_{pull-up} = 4700,\Omega\)</li>



<li>\(R_{série} = 220,\Omega\)</li>



<li>\(r_d = 5,\Omega\)</li>
</ul>



<p class="wp-block-paragraph">Então:</p>



<p class="wp-block-paragraph">\[<br>V_{barramento} = \frac{4700}{4700 + 220 + 5} \cdot 5<br>= \frac{4700}{4925} \cdot 5<br>\approx 4{,}77,\text{V}<br>\]



<p class="wp-block-paragraph">O barramento praticamente <strong>não cai nada</strong> – a queda ocorre no ramo do módulo defeituoso.</p>



<p class="wp-block-paragraph">Isso confirma matematicamente que:</p>



<p class="wp-block-paragraph"><strong>O Schottky mantém o barramento íntegro mesmo com falha em um dos dispositivos.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2.5 Função adicional: proteção contra picos de tensão e ruído</h3>



<p class="wp-block-paragraph">Cabos longos, EMI e ESD podem gerar picos de tensão:</p>



<p class="wp-block-paragraph">\[<br>V_{transiente} > V_{CC}<br>\]



<p class="wp-block-paragraph">O diodo Schottky, polarizado da forma como está, absorve excesso de tensão sempre que:</p>



<p class="wp-block-paragraph">\[<br>V_{ramo} > V_{barramento} + V_f<br>\]



<p class="wp-block-paragraph">Ou seja, ele atua também como:</p>



<ul class="wp-block-list">
<li><strong>Clamper</strong> contra sobretensão local</li>



<li><strong>Equalizador</strong> entre barramento e ramos</li>



<li><strong>Proteção coletiva</strong> contra ruído em qualquer módulo</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2.6 Como o diodo interage com o resistor série</h2>



<p class="wp-block-paragraph">O par <strong>R + Schottky</strong> forma um circuito de proteção complementar:</p>



<ol class="wp-block-list">
<li><strong>O resistor limita corrente.</strong></li>



<li><strong>O diodo define um caminho seguro de desvio.</strong></li>
</ol>



<p class="wp-block-paragraph">Se o módulo entra em curto:</p>



<ul class="wp-block-list">
<li>O resistor impede correntes destrutivas.</li>



<li>O diodo impede o módulo de derrubar o barramento.</li>
</ul>



<p class="wp-block-paragraph">Se há ruído ou transiente:</p>



<ul class="wp-block-list">
<li>O diodo absorve picos.</li>



<li>O resistor suaviza a energia e amortiza pulsos rápidos.</li>
</ul>



<p class="wp-block-paragraph">Se há capacitância excessiva num módulo:</p>



<ul class="wp-block-list">
<li>O resistor reduz o impacto no barramento.</li>



<li>O diodo mantém a integridade do barramento caso a capacitância gere oscilações.</li>
</ul>



<p class="wp-block-paragraph">Essa combinação é muito usada em:</p>



<ul class="wp-block-list">
<li>Barramentos I²C industriais</li>



<li>Sensores distribuídos</li>



<li>Sistemas robustos tolerantes a falhas</li>



<li>Aplicações automotivas de baixa velocidade</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Conclusão</h2>



<p class="wp-block-paragraph">Os diodos Schottky desempenham três funções fundamentais:</p>



<ol class="wp-block-list">
<li><strong>Isolamento de falhas</strong> – evitando travamento total do barramento.</li>



<li><strong>Clamping de tensão</strong> – protegendo contra picos ou ruído.</li>



<li><strong>Proteção cooperativa</strong> com o resistor – mantendo o barramento íntegro.</li>
</ol>



<p class="wp-block-paragraph">Sua escolha é motivada por:</p>



<ul class="wp-block-list">
<li>Baixa queda direta (essencial para I²C)</li>



<li>Alta velocidade</li>



<li>Baixa capacitância</li>



<li>Comportamento previsível em transientes</li>
</ul>



<p class="wp-block-paragraph">Essa estratégia permite que o sistema opere com vários módulos, longos cabos e falhas eventuais, sem travamento nem danos físicos.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Modelagem do Sistema, Síntese Técnica e Diretrizes de Dimensionamento</h2>



<p class="wp-block-paragraph">Tendo entendido separadamente o papel dos resistores em série e dos diodos Schottky, podemos agora consolidar o raciocínio em um modelo único que descreve matematicamente o comportamento do barramento, justificando cada escolha de componente e permitindo dimensionar adequadamente valores para aplicações reais. Este capítulo funciona como síntese técnica e guia de projeto.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3.1 Modelo elétrico equivalente de cada ramificação</h3>



<p class="wp-block-paragraph">Cada módulo I²C é visto pelo barramento principal através de três elementos:</p>



<ol class="wp-block-list">
<li><strong>R_série</strong> (220 Ω típico)</li>



<li><strong>Diodo Schottky</strong></li>



<li><strong>Capacitância parasita + carga do CI</strong></li>
</ol>



<p class="wp-block-paragraph">Um modelo simplificado pode ser representado assim:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>      ┌───────────── Barramento SDA/SCL
      │
      R_série
      │
      +─── C_módulo (entrada CI)
      │
      D Schottky (ânodo no ramo, cátodo no barramento)
      │
   GND (referência do módulo)
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">      ┌───────────── </span><span style="color: #D8DEE9">Barramento</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">SDA</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">SCL</span></span>
<span class="line"><span style="color: #D8DEE9FF">      │</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #D8DEE9">R_série</span></span>
<span class="line"><span style="color: #D8DEE9FF">      │</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF">─── </span><span style="color: #88C0D0">C_módulo</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">entrada</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">CI</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">      │</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #D8DEE9">D</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Schottky</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">ânodo</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">no</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ramo</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">cátodo</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">no</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">barramento</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">      │</span></span>
<span class="line"><span style="color: #D8DEE9FF">   </span><span style="color: #88C0D0">GND</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">referência</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">do</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">módulo</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Sob operação normal, o diodo fica <strong>reversamente polarizado</strong> e praticamente invisível.<br>A comunicação ocorre através do RC formado por:</p>



<p class="wp-block-paragraph">\[<br>\tau = R_{série} \cdot C_{módulo}<br>\]



<p class="wp-block-paragraph">Nas transições, esse pequeno RC desacopla a capacitância do módulo e melhora a integridade de sinal.</p>



<p class="wp-block-paragraph">Sob falha, o diodo passa a conduzir, criando um caminho alternativo que impede o módulo de derrubar o barramento.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3.2 Análise dos três estados possíveis</h3>



<h4 class="wp-block-heading">Estado 1 – Operação normal</h4>



<ul class="wp-block-list">
<li>Correntes muito pequenas fluem no ramo.</li>



<li>O resistor série é praticamente transparente.</li>



<li>O diodo fica bloqueado.</li>



<li>O tempo de subida é dominado por:</li>
</ul>



<p class="wp-block-paragraph">\[<br>t_r = 0{,}8473 \cdot R_{pull-up} \cdot C_{total}<br>\]



<p class="wp-block-paragraph">e <strong>não</strong> por R_série.</p>



<h4 class="wp-block-heading">Estado 2 – Transientes / ruído</h4>



<p class="wp-block-paragraph">Se o ramo sofre sobretensão:</p>



<p class="wp-block-paragraph">\[<br>V_{ramo} > V_{barramento} + V_f<br>\]



<p class="wp-block-paragraph">O Schottky conduz e “equaliza” tensões, evitando picos, protegendo o CI e melhorando EMC.</p>



<p class="wp-block-paragraph">Se o barramento sofre ruído negativo (undershoot), o resistor série limita a corrente e remove energia do pulso.</p>



<h4 class="wp-block-heading">Estado 3 – Falha em módulo (curto para GND)</h4>



<ul class="wp-block-list">
<li>A linha do ramo fica em 0 V.</li>



<li>O barramento tentaria cair a 0 V, mas o diodo entra na condução reversa:</li>
</ul>



<p class="wp-block-paragraph">\[<br>V_{barramento} \approx V_f = 0{,}2 \sim 0{,}3 V<br>\]



<p class="wp-block-paragraph">Esse valor ainda é considerado <strong>LOW válido</strong> pela especificação I²C.</p>



<p class="wp-block-paragraph">O resistor série limita a corrente:</p>



<p class="wp-block-paragraph">\[<br>I = \frac{V_{CC}}{R_{série}}<br>\]



<p class="wp-block-paragraph">Impedindo danos e mantendo o barramento operável.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3.3 A queda de tensão no barramento durante falha (análise mais precisa)</h3>



<p class="wp-block-paragraph">Para entender exatamente o quanto o barramento abaixa em caso de curto, podemos modelar como um divisor entre:</p>



<ul class="wp-block-list">
<li>Rpull-up</li>



<li>Resistência dinâmica do diodo (r_d, típica 3 a 10 Ω)</li>



<li>R_série</li>
</ul>



<p class="wp-block-paragraph">A tensão final é:</p>



<p class="wp-block-paragraph">\[<br>V_{barr} \approx \frac{R_{pull-up}}{R_{pull-up}+R_{série}+r_d} \cdot V_{CC}<br>\]



<p class="wp-block-paragraph">Exemplo realista:</p>



<ul class="wp-block-list">
<li>(R_{pull-up} = 4{,}7 k\Omega)</li>



<li>(R_{série} = 220 \Omega)</li>



<li>(r_d = 5 \Omega)</li>



<li>(V_{CC} = 5 V)</li>
</ul>



<p class="wp-block-paragraph">[<br>V_{barr} = \frac{4700}{4700 + 220 + 5} \cdot 5<br>\approx 4{,}77 V<br>]



<p class="wp-block-paragraph">Ou seja:</p>



<p class="wp-block-paragraph"><strong>O barramento praticamente NÃO cai, mesmo com o módulo em curto!</strong></p>



<p class="wp-block-paragraph">E esta é a beleza da topologia: fixamos a queda no <strong>ramo</strong>, não no barramento.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3.4 Dimensão ideal dos resistores série</h3>



<p class="wp-block-paragraph">Regras práticas:</p>



<h4 class="wp-block-heading">(1) Proteção contra falha</h4>



<p class="wp-block-paragraph">Para limitar a corrente a menos de 25 mA no pior caso:</p>



<p class="wp-block-paragraph">\[<br>R_{série} \geq \frac{V_{CC}}{0{,}025}<br>\]



<p class="wp-block-paragraph">Para 5 V:</p>



<p class="wp-block-paragraph">\[<br>R_{série} \geq 200\ \Omega<br>\]



<p class="wp-block-paragraph">Por isso 220 Ω é um valor tão comum.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">(2) Impacto no tempo de subida</h3>



<p class="wp-block-paragraph">Para que o resistor série não atrapalhe a velocidade do I²C (até 400 kHz):</p>



<p class="wp-block-paragraph">\[<br>R_{série} \cdot C_{entrada} \ll t_r<br>\]



<p class="wp-block-paragraph">Com:</p>



<ul class="wp-block-list">
<li>\(C_{entrada} \approx 15\text{–}30 pF\)</li>



<li>\(t_r \approx 300\text{–}1000 ns\)</li>
</ul>



<p class="wp-block-paragraph">Então:</p>



<p class="wp-block-paragraph">\[<br>R_{série} \ll \frac{t_r}{C_{entrada}}<br>\]



<p class="wp-block-paragraph">Exemplo:</p>



<p class="wp-block-paragraph">\[<br>\frac{300 ns}{30 pF} = 10 k\Omega<br>\]



<p class="wp-block-paragraph">220 Ω está muito abaixo desse limite, logo <strong>não interfere no tempo de subida</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">(3) Redução de ringing</h4>



<p class="wp-block-paragraph">Para cabos com:</p>



<ul class="wp-block-list">
<li>\(L \approx 500 nH\)</li>



<li>\(C \approx 50 pF/m\)</li>
</ul>



<p class="wp-block-paragraph">Impedância característica aproximada:</p>



<p class="wp-block-paragraph">\[<br>Z_0 \approx \sqrt{\frac{L}{C}}<br>\approx \sqrt{\frac{500 nH}{50 pF}}<br>\approx 100\ \Omega<br>\]



<p class="wp-block-paragraph">O resistor série deve ser da mesma ordem de grandeza.<br>Como o driver já oferece ~20–40 Ω internos, usamos:</p>



<p class="wp-block-paragraph">\[<br>R_{série} \approx 100\Omega &#8211; R_{driver}<br>\]



<p class="wp-block-paragraph">E chegamos novamente a valores entre 100 e 220 Ω.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3.5 Dimensionamento ideal do diodo Schottky</h3>



<p class="wp-block-paragraph">Critérios:</p>



<h4 class="wp-block-heading">(1) Baixa queda direta (V_f)</h4>



<p class="wp-block-paragraph">Deve atender:</p>



<p class="wp-block-paragraph">\[<br>V_f &lt; V_{OL,max}<br>\]



<p class="wp-block-paragraph">Na prática:</p>



<ul class="wp-block-list">
<li>I²C admite até 0,4 V para LOW</li>



<li>Schottky típico oferece 0,2–0,3 V</li>
</ul>



<h4 class="wp-block-heading">(2) Capacitância baixa</h4>



<p class="wp-block-paragraph">Evitar impacto nas bordas:</p>



<p class="wp-block-paragraph">\[<br>C_D &lt; 20\ \text{pF}<br>\]



<h4 class="wp-block-heading">(3) Corrente de pico segura</h4>



<p class="wp-block-paragraph">Em falhas, a corrente é:</p>



<p class="wp-block-paragraph">\[<br>I = \frac{V_{CC}}{R_{série}}<br>\approx 23 mA<br>\]



<p class="wp-block-paragraph">O diodo deve suportar isso confortavelmente, com folga.</p>



<h4 class="wp-block-heading">(4) Tempo de resposta muito rápido</h4>



<p class="wp-block-paragraph">Absorver transientes antes que eles atinjam os CIs.</p>



<p class="wp-block-paragraph">Diodos recomendados:</p>



<ul class="wp-block-list">
<li>BAT54</li>



<li>1N5819 (para correntes maiores, mas capacitância mais alta)</li>



<li>RB751</li>



<li>PMEG2010</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3.6 Comparação com outras técnicas de proteção</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Técnica</th><th>Protege contra curto?</th><th>Protege contra ruído?</th><th>Mantém barramento ativo?</th><th>Custo</th><th>Comentário</th></tr></thead><tbody><tr><td><strong>Somente pull-up</strong></td><td>Não</td><td>Não</td><td>Não</td><td>Baixo</td><td>Padrão básico, frágil</td></tr><tr><td><strong>Somente R série</strong></td><td>Parcial</td><td>Parcial</td><td>Não</td><td>Baixo</td><td>Não evita bus lock</td></tr><tr><td><strong>Somente Schottky</strong></td><td>Não</td><td>Sim</td><td>Parcial</td><td>Médio</td><td>Corrente pode ser alta demais</td></tr><tr><td><strong>R série + Schottky (este circuito)</strong></td><td><strong>Sim</strong></td><td><strong>Sim</strong></td><td><strong>Sim</strong></td><td>Médio</td><td>Melhor relação custo/benefício</td></tr><tr><td>Buffer I²C dedicado</td><td>Sim</td><td>Sim</td><td>Sim</td><td>Alto</td><td>Solução profissional para longas distâncias</td></tr><tr><td>Isolador digital</td><td>Sim</td><td>Sim</td><td>Sim</td><td>Muito alto</td><td>Aplicações industriais e alta EMC</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A solução adotada no circuito analisado é uma das mais equilibradas para:</p>



<ul class="wp-block-list">
<li>projetos maker,</li>



<li>sensores distribuídos,</li>



<li>robótica,</li>



<li>telemetria,</li>



<li>automação residencial,</li>



<li>painéis e cabos longos.</li>
</ul>



<h2 class="wp-block-heading">Diretrizes Práticas de Projeto, Recomendações de Uso e Exemplos de Dimensionamento</h2>



<p class="wp-block-paragraph">Este capítulo final reúne <strong>regras práticas</strong>, <strong>cenários de aplicação</strong> e <strong>exemplos concretos de cálculo</strong> para orientar o uso correto da topologia <em>resistor série + diodo Schottky</em> em projetos reais com barramento I²C.<br>Aqui é onde a teoria se traduz em procedimentos de engenharia aplicáveis ao dia a dia.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.1 Quando essa topologia é recomendada</h3>



<p class="wp-block-paragraph">O uso de resistores série e diodos Schottky é extremamente útil quando o barramento I²C opera sob uma ou mais das seguintes condições:</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Múltiplos dispositivos distribuídos em cabos longos</h4>



<p class="wp-block-paragraph">Tipicamente mais de 30–40 cm por ramificação.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ambientes com ruído elétrico significativo</h4>



<p class="wp-block-paragraph">Como motores, solenoides, inversores, relés, rádios ou fontes chaveadas próximas.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Alta confiabilidade é necessária</h4>



<p class="wp-block-paragraph">Sistemas que <strong>não podem parar</strong> caso um único módulo apresente falha.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Uso de sensores ou placas com qualidade variável</h4>



<p class="wp-block-paragraph">Módulos de baixa procedência podem sofrer falhas de linha ou travamentos esporádicos.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> A topologia física contém ramificações (“stubs”) no barramento</h4>



<p class="wp-block-paragraph">Cada stub adiciona capacitância, reflexões e risco de travamento.</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Há troca frequente de módulos (plug and play)</h4>



<p class="wp-block-paragraph">Evita danos causados por ligações incorretas ou conexões intermitentes.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.2 Quando <strong>não</strong> é necessário usar esta topologia</h3>



<p class="wp-block-paragraph">A solução é exagero se:</p>



<ul class="wp-block-list">
<li>O barramento é muito curto (poucos centímetros).</li>



<li>O número de dispositivos é baixo (1 ou 2).</li>



<li>A aplicação é extremamente sensível ao tempo de borda (raríssimo em I²C ≤ 400 kHz).</li>



<li>Há buffers dedicados I²C (P82B96, TCA4311, PCA9515, etc.)</li>
</ul>



<p class="wp-block-paragraph">Em tais casos, resistores série podem até trazer pequenas vantagens, mas não são indispensáveis.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.3 Guia completo para escolher o valor de <strong>R_série</strong></h3>



<p class="wp-block-paragraph">A escolha correta depende de três fatores:<br>(1) corrente máxima aceitável,<br>(2) qualidade de sinal,<br>(3) capacitância do ramo.</p>



<h4 class="wp-block-heading">4.3.1 Critério de segurança (corrente de curto)</h4>



<p class="wp-block-paragraph">Queremos:</p>



<p class="wp-block-paragraph">\[<br>I_{máx} \le 25,mA<br>\]



<p class="wp-block-paragraph">Logo:</p>



<p class="wp-block-paragraph">\[<br>R_{série} \ge \frac{V_{CC}}{0,025}<br>\]



<p class="wp-block-paragraph">Para:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>VCC</th><th>R_série mínimo</th></tr></thead><tbody><tr><td>3,3 V</td><td>≥ 132 Ω</td></tr><tr><td>5,0 V</td><td>≥ 200 Ω</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.3.2 Critério de integridade de sinal (amortecimento)</h3>



<p class="wp-block-paragraph">Se o cabo do ramo tem:</p>



<ul class="wp-block-list">
<li>Indutância típica: 500 nH/m</li>



<li>Capacitância típica: 40–60 pF/m</li>
</ul>



<p class="wp-block-paragraph">Impedância característica aproximada:</p>



<p class="wp-block-paragraph">\[<br>Z_0 \approx \sqrt{\frac{L}{C}} \approx 100,\Omega<br>\]



<p class="wp-block-paragraph">O resistor deve ser próximo de:</p>



<p class="wp-block-paragraph">\[<br>R_{série} + R_{driver} \approx Z_0<br>\]



<p class="wp-block-paragraph">Como o driver do microcontrolador já tem ~20–50 Ω, adicionamos:</p>



<p class="wp-block-paragraph">\[<br>R_{série} \approx 100 &#8211; R_{driver} \approx 100 &#8211; 30 = 70,\Omega<br>\]



<p class="wp-block-paragraph">Mas como precisamos também do critério de segurança (≥200 Ω), optamos por:</p>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Valor ideal: <strong>150 a 330 Ω</strong></h4>



<p class="wp-block-paragraph">O valor clássico é <strong>220 Ω</strong> pelo excelente compromisso.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">4.3.3 Critério de atraso</h4>



<p class="wp-block-paragraph">O resistor não deve comprometer o tempo de subida:</p>



<p class="wp-block-paragraph">[<br>R_{série} \cdot C_{ramo} \ll t_r<br>]



<p class="wp-block-paragraph">Com I²C Standard Mode (t_r ≈ 1000 ns) e C=30 pF:</p>



<p class="wp-block-paragraph">[<br>R_{máx} \ll \frac{1000ns}{30pF} \approx 33k\Omega<br>]



<p class="wp-block-paragraph">Ou seja, <strong>220 Ω está muito longe de prejudicar o desempenho</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.4 Guia completo para escolher o diodo Schottky</h3>



<p class="wp-block-paragraph">Critérios fundamentais:</p>



<h4 class="wp-block-heading">1) Queda direta deve ser menor que o LOW permitido</h4>



<p class="wp-block-paragraph">\[<br>V_f &lt; 0{,}4,V<br>\]



<p class="wp-block-paragraph">Schottky típico: 0,2–0,3 V → atende perfeitamente.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">2) Capacitância baixa</h4>



<p class="wp-block-paragraph">\[<br>C_D &lt; 20\ pF<br>\]



<p class="wp-block-paragraph">Para não “roubar” corrente do pull-up e nem prejudicar bordas.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">3) Corrente de pico suficiente</h4>



<p class="wp-block-paragraph">Suporta:</p>



<p class="wp-block-paragraph">\[<br>I_{pico} \approx \frac{V_{CC}}{R_{série}} \approx 23,mA<br>\]



<p class="wp-block-paragraph">Qualquer Schottky padrão SMD atende.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4) Velocidade de comutação muito alta</h3>



<p class="wp-block-paragraph">Diodos comuns sofrem com recuperação reversa (reverse recovery), causando:</p>



<ul class="wp-block-list">
<li>Overshoot</li>



<li>Oscilações</li>



<li>Correntes negativas</li>
</ul>



<p class="wp-block-paragraph">O Schottky não apresenta recuperação reversa — ideal para I²C.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">4.4.1 Diodos recomendados</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Modelo</th><th>Capacitância</th><th>V_f</th><th>Observação</th></tr></thead><tbody><tr><td><strong>BAT54</strong></td><td>10 pF</td><td>0.25 V</td><td>Melhor custo/benefício</td></tr><tr><td><strong>RB751</strong></td><td>5 pF</td><td>0.22 V</td><td>Baixíssima capacitância</td></tr><tr><td><strong>PMEG2010</strong></td><td>40 pF</td><td>0.24 V</td><td>Correntes maiores</td></tr><tr><td><strong>1N5819</strong></td><td>110 pF</td><td>0.3 V</td><td>Serve, mas capacitância maior</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Para I²C, BAT54 é o mais popular.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.5 Exemplo completo de dimensionamento</h3>



<p class="wp-block-paragraph">Sistema hipotético:</p>



<ul class="wp-block-list">
<li>4 módulos I²C (cada um com 25 pF)</li>



<li>1 metro de cabo por módulo (~50 pF/m)</li>



<li>Tensão de operação: 5 V</li>



<li>I²C a 100 kHz</li>
</ul>



<h4 class="wp-block-heading">1) Capacitância do ramo</h4>



<p class="wp-block-paragraph">\[<br>C_{ramo} = 25pF + 50pF = 75pF<br>\]



<h4 class="wp-block-heading">2) Resistência série (critério de segurança)</h4>



<p class="wp-block-paragraph">\[<br>R_{série} \ge \frac{5V}{25mA} = 200Ω<br>\]



<p class="wp-block-paragraph">Escolhemos 220 Ω.</p>



<h4 class="wp-block-heading">3) Verificação de atraso:</h4>



<p class="wp-block-paragraph">\[<br>\tau = R_{série} \cdot C_{ramo}<br>= 220 \cdot 75pF = 16,5ns<br>\]



<p class="wp-block-paragraph">Muito menor que o limite (~1000 ns) → OK.</p>



<h4 class="wp-block-heading">4) Verificação de amortecimento:</h4>



<p class="wp-block-paragraph">Impedância aproximada do cabo:</p>



<p class="wp-block-paragraph">\[<br>Z_0 \approx 100Ω<br>\]



<p class="wp-block-paragraph">Com Rdriver ≈ 30 Ω:</p>



<p class="wp-block-paragraph">\[<br>R_{total} = R_{driver} + R_{série}<br>= 30Ω + 220Ω<br>= 250Ω<br>\]



<p class="wp-block-paragraph">Acima de Z0 → subamortece levemente, o que é bom para ruído, sem risco de overshoot.</p>



<h4 class="wp-block-heading">5) Escolha do diodo</h4>



<p class="wp-block-paragraph">Usamos BAT54:</p>



<ul class="wp-block-list">
<li>V_f = 0.24 V</li>



<li>C_D = 10 pF</li>



<li>Isup ≈ 200 mA (muito acima dos 23 mA de falha)</li>
</ul>



<h4 class="wp-block-heading">Resultado</h4>



<p class="wp-block-paragraph">Sistema <strong>robusto</strong>, <strong>tolerante a falhas</strong>, com <strong>integridade de sinal excelente</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.6 Recomendações profissionais finais</h3>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sempre usar resistores série ao conectar vários módulos distribuídos</h5>



<p class="wp-block-paragraph">Especialmente se os cabos forem longos ou de má qualidade.</p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Usar Schottky de baixa capacitância</h5>



<p class="wp-block-paragraph">Evite modelos “gordos” como 1N5819 quando puder.</p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Para cabos muito longos (&gt;2 m), considerar buffers I²C</h5>



<p class="wp-block-paragraph">Como PCA9515 ou TCA9517.</p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Evitar “estrelas” em alta velocidade</h5>



<p class="wp-block-paragraph">Barramentos com muitos stubs podem exigir resistência maior.</p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Proteger fisicamente os cabos</h5>



<p class="wp-block-paragraph">Amarrar os pares SCL/SDA juntos reduz acoplamento de ruído.</p>



<h5 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sempre medir a forma de onda com osciloscópio</h5>



<p class="wp-block-paragraph">A validação visual das bordas é parte essencial do processo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4.7 Conclusão Final</h3>



<p class="wp-block-paragraph">A arquitetura do circuito analisado — resistores em série combinados com diodos Schottky — representa uma solução elegante e eficiente para aumentar a robustez do barramento I²C sem elevar muito o custo ou a complexidade. Esse método protege contra:</p>



<ul class="wp-block-list">
<li>Curto nos módulos</li>



<li>Picos de tensão</li>



<li>Capacitância excessiva</li>



<li>Falhas internas de CI</li>



<li>Ruído em cabos longos</li>



<li>Travamentos (bus lock)</li>
</ul>



<p class="wp-block-paragraph">E tudo isso com impacto mínimo no desempenho elétrico e no tempo de subida do barramento.</p><p>The post <a href="https://mcu.tec.br/protoclos/i2c/protecao-inteligente-para-barramentos-i%c2%b2c-como-resistores-em-serie-e-diodos-schottky-aumentam-a-confiabilidade-de-sistemas-embarcados/">Proteção Inteligente para Barramentos I²C: Como Resistores em Série e Diodos Schottky Aumentam a Confiabilidade de Sistemas Embarcados</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">931</post-id>	</item>
		<item>
		<title>DS28E17: Como Converter One-Wire em I²C e Estender Sensores a Longas Distâncias</title>
		<link>https://mcu.tec.br/protoclos/ds28e17-como-converter-one-wire-em-i%c2%b2c-e-estender-sensores-a-longas-distancias/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ds28e17-como-converter-one-wire-em-i%25c2%25b2c-e-estender-sensores-a-longas-distancias</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Sun, 30 Nov 2025 16:48:36 +0000</pubDate>
				<category><![CDATA[I2C]]></category>
		<category><![CDATA[OneWire]]></category>
		<category><![CDATA[protocolos]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=910</guid>

					<description><![CDATA[<p>O DS28E17 é um circuito integrado projetado para atuar como uma ponte entre o protocolo One-Wire e o barramento I²C, permitindo que sensores, memórias e periféricos remotos sejam acessados com estabilidade mesmo em longas distâncias. Este artigo apresenta uma explicação didática e rigorosa sobre seu funcionamento, destacando como o dispositivo converte comandos 1-Wire em transações I²C completas, mantendo ACK, STOP, START, clock stretching e integridade por CRC. Também discute como o uso do DS28E17 simplifica o firmware em microcontroladores STM32F411, reduzindo cabos, aumentando a robustez e viabilizando arquiteturas distribuídas para IoT, automação industrial e projetos de eletrônica embarcada. Exemplos em pseudocódigo C demonstram como implementar operações de leitura, escrita e acesso a registradores remotos.</p>
<p>The post <a href="https://mcu.tec.br/protoclos/ds28e17-como-converter-one-wire-em-i%c2%b2c-e-estender-sensores-a-longas-distancias/">DS28E17: Como Converter One-Wire em I²C e Estender Sensores a Longas Distâncias</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading"><strong>Introdução ao DS28E17 e ao Conceito de Ponte One-Wire <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> I²C</strong></h2>



<p class="wp-block-paragraph">O DS28E17 é um circuito integrado da Analog Devices projetado para atuar como uma ponte (“bridge”) entre o barramento <strong>1-Wire</strong>, conhecido por sua simplicidade extrema e por exigir apenas um único fio de dados, e o barramento <strong>I²C</strong>, amplamente utilizado em sensores, memórias e periféricos de propósito geral. Seu papel é permitir que um microcontrolador que disponha apenas de interface 1-Wire ou que deseje estender comunicação em longas distâncias possa acessar dispositivos I²C remotos sem a necessidade de um par de fios dedicado (SDA/SCL). Assim, toda a estrutura do I²C remota é encapsulada em comandos enviados por 1-Wire, reduzindo cabos, diminuindo ruído e simplificando o roteamento.</p>


<div class="wp-block-image">
<figure class="alignright size-full"><img decoding="async" width="316" height="192" src="https://mcu.tec.br/wp-content/uploads/2025/11/image-25.png" alt="" class="wp-image-912" srcset="https://mcu.tec.br/wp-content/uploads/2025/11/image-25.png 316w, https://mcu.tec.br/wp-content/uploads/2025/11/image-25-300x182.png 300w, https://mcu.tec.br/wp-content/uploads/2025/11/image-25-240x145.png 240w" sizes="(max-width: 316px) 100vw, 316px" /></figure>
</div>


<p class="wp-block-paragraph">Para leigos, a ideia fundamental é a seguinte: o DS28E17 fica localizado próximo ao sensor I²C, enquanto o microcontrolador pode estar a metros de distância conectado por um único fio. Esse único fio transporta comandos digitais codificados. O DS28E17 os interpreta e gera localmente o protocolo I²C adequado, com temporizações corretas e níveis lógicos estáveis. O microcontrolador não precisa conhecer detalhes do sensor; basta enviar instruções de “escreva no registrador X” ou “leia o registrador Y”. Essa separação permite topologias mais flexíveis, especialmente em ambientes industriais ou de difícil cabeamento, onde I²C tradicional teria limitações de distância devido à capacitância do cabo.</p>



<p class="wp-block-paragraph">Do ponto de vista técnico, o DS28E17 mantém total conformidade com o protocolo I²C, permitindo velocidades de até <strong>400 kHz (Fast Mode)</strong> e oferecendo mecanismos confiáveis de temporização, controle de ACK/NACK, buffers internos e controle automático de clock stretching. No lado 1-Wire, oferece suporte a comandos de leitura e escrita otimizados, CRC embutido e mecanismos de endereçamento únicos por meio de seu ROM ID de 64 bits, garantindo que múltiplos dispositivos possam coexistir no mesmo fio sem conflitos.</p>



<p class="wp-block-paragraph">O benefício central, tanto para iniciantes quanto para engenheiros experientes, é que ele rompe a típica limitação de alguns metros do I²C convencional, pois o 1-Wire suporta distâncias significativamente maiores graças ao menor número de condutores, menor susceptibilidade à capacitância distribuída e ao uso de pull-up mais forte. Esse comportamento elétrico permite aplicações onde sensores ficam fisicamente distantes do microcontrolador — câmeras térmicas distribuídas, sensores de umidade em estufas agrícolas, sensores ambientais espaciais, entre outros. Tudo isso preservando a robustez e a confiabilidade elétrica, especialmente porque o DS28E17 pode operar com cabos longos sem sofrer com a degradação da integridade do sinal típica do SDA/SCL.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Arquitetura Interna e Funcionamento do DS28E17</strong></h2>



<p class="wp-block-paragraph">O DS28E17 funciona essencialmente como um tradutor digital entre dois mundos: o sinal altamente minimalista do 1-Wire e o protocolo completo do I²C. Para cumprir esse papel, o CI possui uma arquitetura interna composta por blocos funcionais bem definidos: o <strong>Núcleo 1-Wire</strong>, responsável pela recepção e validação dos comandos; o <strong>Motor de Tradução</strong>, que interpreta o pacote recebido e converte em operações I²C; e finalmente o <strong>Controlador I²C</strong>, capaz de executar transmissões completas com velocidade configurável, incluindo start, stop, ACK, NACK e clock stretching.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="668" height="385" src="https://mcu.tec.br/wp-content/uploads/2025/11/image-24.png" alt="" class="wp-image-911" srcset="https://mcu.tec.br/wp-content/uploads/2025/11/image-24.png 668w, https://mcu.tec.br/wp-content/uploads/2025/11/image-24-300x173.png 300w" sizes="(max-width: 668px) 100vw, 668px" /></figure>
</div>


<p class="wp-block-paragraph">O núcleo 1-Wire é a “porta de entrada” do dispositivo. Ele decodifica o protocolo, faz a verificação de integridade via CRC e identifica o DS28E17 por meio de seu ROM ID único de 64 bits. Isso permite que vários dispositivos coexistam no mesmo fio, e o microcontrolador selecione qual DS28E17 deseja comandar. Uma vez que o comando é validado, o pacote é repassado ao motor de tradução, que calcula a operação a ser realizada — por exemplo, escrever bytes em um periférico I²C, ou realizar uma leitura com número específico de bytes. A comunicação é totalmente síncrona: o microcontrolador envia o comando, o DS28E17 executa a operação localmente e devolve a resposta encapsulada em um frame 1-Wire.</p>



<p class="wp-block-paragraph">Já o controlador I²C é um bloco especializado, independente do microcontrolador. Ele gera o sinal SCL com alta precisão e administra as condições de start/stop conforme o padrão I²C. Ele ainda monitora ACK/NACK dos dispositivos conectados, armazenando os dados recebidos em seu buffer interno até que o microcontrolador solicite a leitura via 1-Wire. Um ponto importante para aplicações práticas é que o DS28E17 suporta velocidades de até 400 kHz, mas a eficiência final depende do tempo total de transmissão no 1-Wire — que é mais lento. Portanto, o ganho não está em velocidade, mas em <strong>distância e simplicidade de rede</strong>. Isso é essencial para projetos embutidos que precisam conectar sensores remotos, especialmente em campos como automação, monitoramento ambiental e dispositivos IoT distribuídos.</p>



<p class="wp-block-paragraph">Um detalhe pouco comentado, mas tecnicamente relevante, é a forma como o DS28E17 gerencia a capacitância distribuída no cabo. O 1-Wire tolera cabos longos porque o sinal é baseado em janelas temporais largas, enquanto o I²C é sensível a distorções provocadas pela capacitância. Ao “isolá-las” em blocos separados, o DS28E17 garante que o cabo longo afete apenas o 1-Wire, enquanto o I²C acontece localmente em uma curta distância — normalmente poucos centímetros. Assim, o microcontrolador ganha a habilidade de acessar sensores I²C como se estivessem próximos, mas fisicamente posicionados a metros de distância, com estabilidade e confiabilidade.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Aplicações Práticas e Benefícios no Design de Sistemas Embarcados</strong></h2>



<p class="wp-block-paragraph">O DS28E17 oferece vantagens significativas para projetos que precisam comunicar sensores remotos, reduzir cabeamento ou simplificar a topologia elétrica em ambientes hostis. Em um sistema embarcado tradicional, o barramento I²C apresenta limitações de distância, geralmente ficando preso a poucos centímetros ou, no máximo, dezenas de centímetros em condições ideais. Isso ocorre porque capacitância, indutância distribuída e interferências eletromagnéticas provocam degradação de sinal e distorções de forma de onda. Ao introduzir o DS28E17 como ponte, o microcontrolador passa a usar um único fio — o barramento One-Wire — que tolera melhor comprimentos de cabo maiores e é menos sensível a artefatos físicos, ideal para sensores distribuídos em ambientes industriais, agrícolas e automotivos.</p>



<p class="wp-block-paragraph">Em aplicações reais, isso permite integrar sensores I²C a longas distâncias sem modificar seu hardware original. Imagine um sensor de temperatura digital, um sensor de pressão ou um módulo de memória I²C instalado a metros de distância em um equipamento industrial. Em vez de tentar estender o I²C por cabos longos e sofrer com instabilidade, usa-se um único par de condutores para o 1-Wire e instala-se o DS28E17 próximo ao sensor. O resultado é uma comunicação robusta, com CRC e baixa suscetibilidade a distúrbios, mantendo alta integridade de dados. Esse tipo de solução é especialmente valioso em redes IoT distribuídas, onde há grande quantidade de sensores instalados de forma geograficamente dispersa.</p>



<p class="wp-block-paragraph">Outro benefício importante é a simplicidade de firmware. Em microcontroladores como os STM32F4, o desenvolvedor pode escrever rotinas simples de envio de comandos 1-Wire sem lidar diretamente com estados complexos do I²C. É o DS28E17 quem se encarrega de gerir start, stop, aquisição de ACK e leitura de múltiplos bytes. Isso reduz o tempo de desenvolvimento e as chances de falhas em firmware de baixo nível, tornando o sistema mais confiável. Em aplicações com restrição de energia, a redução de cabos e a padronização dos nós remotos também diminuem perdas e simplificam o layout físico.</p>



<p class="wp-block-paragraph">Além disso, a possibilidade de colocar múltiplos DS28E17 em paralelo no mesmo fio faz deste CI uma alternativa natural para redes com múltiplos sensores, permitindo endereçamento via ROM ID. Essa característica abre portas para arquiteturas hierárquicas de sensores, especialmente em sistemas de monitoramento ambiental, instrumentação científica, sensores estruturais em pontes e monitoramento distribuído em agroindústria. Cada módulo torna-se um nó inteligente, contendo seu próprio tradutor I²C local. Dessa forma, o barramento 1-Wire funciona como uma espinha dorsal simples e eficiente, capaz de interligar dezenas de sensores remotos sem degradação significativa no desempenho.</p>



<p class="wp-block-paragraph">A seguir apresento <strong>o Capítulo 4</strong>. Quando quiser prosseguir, peça <strong>“próximo capítulo”</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Aplicações Práticas e Benefícios no Design de Sistemas Embarcados</strong></h2>



<p class="wp-block-paragraph">O DS28E17 oferece vantagens significativas para projetos que precisam comunicar sensores remotos, reduzir cabeamento ou simplificar a topologia elétrica em ambientes hostis. Em um sistema embarcado tradicional, o barramento I²C apresenta limitações de distância, geralmente ficando preso a poucos centímetros ou, no máximo, dezenas de centímetros em condições ideais. Isso ocorre porque capacitância, indutância distribuída e interferências eletromagnéticas provocam degradação de sinal e distorções de forma de onda. Ao introduzir o DS28E17 como ponte, o microcontrolador passa a usar um único fio — o barramento One-Wire — que tolera melhor comprimentos de cabo maiores e é menos sensível a artefatos físicos, ideal para sensores distribuídos em ambientes industriais, agrícolas e automotivos.</p>



<p class="wp-block-paragraph">Em aplicações reais, isso permite integrar sensores I²C a longas distâncias sem modificar seu hardware original. Imagine um sensor de temperatura digital, um sensor de pressão ou um módulo de memória I²C instalado a metros de distância em um equipamento industrial. Em vez de tentar estender o I²C por cabos longos e sofrer com instabilidade, usa-se um único par de condutores para o 1-Wire e instala-se o DS28E17 próximo ao sensor. O resultado é uma comunicação robusta, com CRC e baixa suscetibilidade a distúrbios, mantendo alta integridade de dados. Esse tipo de solução é especialmente valioso em redes IoT distribuídas, onde há grande quantidade de sensores instalados de forma geograficamente dispersa.</p>



<p class="wp-block-paragraph">Outro benefício importante é a simplicidade de firmware. Em microcontroladores como os STM32F4, o desenvolvedor pode escrever rotinas simples de envio de comandos 1-Wire sem lidar diretamente com estados complexos do I²C. É o DS28E17 quem se encarrega de gerir start, stop, aquisição de ACK e leitura de múltiplos bytes. Isso reduz o tempo de desenvolvimento e as chances de falhas em firmware de baixo nível, tornando o sistema mais confiável. Em aplicações com restrição de energia, a redução de cabos e a padronização dos nós remotos também diminuem perdas e simplificam o layout físico.</p>



<p class="wp-block-paragraph">Além disso, a possibilidade de colocar múltiplos DS28E17 em paralelo no mesmo fio faz deste CI uma alternativa natural para redes com múltiplos sensores, permitindo endereçamento via ROM ID. Essa característica abre portas para arquiteturas hierárquicas de sensores, especialmente em sistemas de monitoramento ambiental, instrumentação científica, sensores estruturais em pontes e monitoramento distribuído em agroindústria. Cada módulo torna-se um nó inteligente, contendo seu próprio tradutor I²C local. Dessa forma, o barramento 1-Wire funciona como uma espinha dorsal simples e eficiente, capaz de interligar dezenas de sensores remotos sem degradação significativa no desempenho.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Exemplos Práticos com Pseudocódigo em C para STM32F411</strong></h2>



<p class="wp-block-paragraph">Para demonstrar o uso do DS28E17 em um projeto real com STM32F411, é importante compreender que o microcontrolador não acessa diretamente o barramento I²C remoto. Em vez disso, ele envia comandos 1-Wire ao DS28E17, que os traduz em operações I²C locais. Neste capítulo, apresentamos pseudocódigos didáticos, com foco na lógica essencial, abstraindo detalhes de temporização específicos do 1-Wire para manter clareza.</p>



<p class="wp-block-paragraph">A primeira etapa é implementar uma função para enviar um comando 1-Wire ao DS28E17. No STM32F411, isso seria conectado a um GPIO configurado como open-drain com pull-up, emulando o 1-Wire por bit-banging ou usando um timer auxiliar. O pseudocódigo base envolve reset, seleção do ROM ID e envio do comando:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// Pseudocódigo básico para enviar bytes ao DS28E17 via 1-Wire
void ONEWIRE_WriteBytes(uint8_t *data, uint16_t length)
{
    for (uint16_t i = 0; i &lt; length; i++) {
        ONEWIRE_WriteByte(data&#91;i&#93;); // Função básica de escrita de 1 byte no barramento
    }
}

void DS28E17_Select(uint8_t *rom_id)
{
    ONEWIRE_Reset();
    ONEWIRE_WriteByte(0x55);      // Match ROM command
    ONEWIRE_WriteBytes(rom_id, 8);
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">// Pseudocódigo básico para enviar bytes ao DS28E17 via 1-Wire</span></span>
<span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">ONEWIRE_WriteBytes</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">uint16_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">length</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">uint16_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">length</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #88C0D0">ONEWIRE_WriteByte</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">data</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF">&#93;)</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// Função básica de escrita de 1 byte no barramento</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">DS28E17_Select</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">rom_id</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">ONEWIRE_Reset</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">ONEWIRE_WriteByte</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">0x55</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF">      </span><span style="color: #616E88">// Match ROM command</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">ONEWIRE_WriteBytes</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">rom_id</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">8</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">A seguir, enviamos uma operação I²C de escrita simples — por exemplo, escrever um registrador em um sensor remoto. O DS28E17 possui o comando específico <strong>I2C Write Command (0x99)</strong> que recebe o endereço do escravo, os bytes de escrita e controla o STOP:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// Escreve N bytes em um escravo I2C via DS28E17
bool DS28E17_I2C_Write(uint8_t *rom_id, uint8_t addr, uint8_t *data, uint8_t len)
{
    uint8_t frame&#91;16&#93; = {0};
    uint8_t index = 0;

    DS28E17_Select(rom_id);

    frame&#91;index++&#93; = 0x99;      // Comando de escrita I²C
    frame&#91;index++&#93; = addr &lt;&lt; 1; // Endereço I2C em modo write
    frame&#91;index++&#93; = len;       // Quantidade de bytes a escrever

    for (uint8_t i = 0; i &lt; len; i++)
        frame&#91;index++&#93; = data&#91;i&#93;;

    ONEWIRE_WriteBytes(frame, index);

    // Leitura de status (ACK result etc.)
    uint8_t status = ONEWIRE_ReadByte();
    return (status == 0x00); // Sucesso
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">// Escreve N bytes em um escravo I2C via DS28E17</span></span>
<span class="line"><span style="color: #D8DEE9">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">DS28E17_I2C_Write</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">rom_id</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addr</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">len</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #B48EAD">16</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">}</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">index</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">DS28E17_Select</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">rom_id</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #D8DEE9">index</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0x99</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF">      </span><span style="color: #616E88">// Comando de escrita I²C</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #D8DEE9">index</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addr</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// Endereço I2C em modo write</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #D8DEE9">index</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">len</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF">       </span><span style="color: #616E88">// Quantidade de bytes a escrever</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">len</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #D8DEE9">index</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF">&#93;</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">ONEWIRE_WriteBytes</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">frame</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">index</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Leitura de status (ACK result etc.)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">status</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">ONEWIRE_ReadByte</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">status</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0x00</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// Sucesso</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Para leitura, o comando correspondente é <strong>I2C Read Command (0x96)</strong>, que solicita uma quantidade de bytes do escravo I²C remoto. Nesse caso, o DS28E17 executa o START, envia o endereço de leitura e coleta os dados antes de devolvê-los pelo barramento 1-Wire:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// Lê N bytes de um escravo I2C remoto
bool DS28E17_I2C_Read(uint8_t *rom_id, uint8_t addr, uint8_t *buffer, uint8_t len)
{
    uint8_t frame&#91;4&#93;;
    frame&#91;0&#93; = 0x96;           // Comando de leitura I2C
    frame&#91;1&#93; = (addr &lt;&lt; 1) | 1; // Endereço I2C em modo read
    frame&#91;2&#93; = len;            // Quantidade de bytes a ler

    DS28E17_Select(rom_id);
    ONEWIRE_WriteBytes(frame, 3);

    uint8_t status = ONEWIRE_ReadByte();
    if (status != 0x00)
        return false;

    for (uint8_t i = 0; i &lt; len; i++)
        buffer&#91;i&#93; = ONEWIRE_ReadByte();

    return true;
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">// Lê N bytes de um escravo I2C remoto</span></span>
<span class="line"><span style="color: #D8DEE9">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">DS28E17_I2C_Read</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">rom_id</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addr</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">buffer</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">len</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #B48EAD">4</span><span style="color: #D8DEE9FF">&#93;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #B48EAD">0</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0x96</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF">           </span><span style="color: #616E88">// Comando de leitura I2C</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">addr</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF">) </span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// Endereço I2C em modo read</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">frame</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #B48EAD">2</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">len</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF">            </span><span style="color: #616E88">// Quantidade de bytes a ler</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">DS28E17_Select</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">rom_id</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">ONEWIRE_WriteBytes</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">frame</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">3</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">status</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">ONEWIRE_ReadByte</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">status</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0x00</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">false;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">len</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">buffer</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF">&#93; </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">ONEWIRE_ReadByte</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">true;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Por fim, apresentamos o pseudocódigo para a operação combinada mais comum: <strong>escrever um registrador e ler o valor em seguida</strong>, típica em sensores IMU, pressão, temperatura e ADCs:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// Leitura combinada (Write + Read), ex: ler registrador de sensor remoto
bool DS28E17_I2C_WriteRead(uint8_t *rom_id,
                           uint8_t addr,
                           uint8_t reg,
                           uint8_t *rx,
                           uint8_t rx_len)
{
    // Escreve o registrador
    if (!DS28E17_I2C_Write(rom_id, addr, &amp;reg, 1))
        return false;

    HAL_Delay(2); // Pequena espera opcional

    // Lê o conteúdo do registrador
    return DS28E17_I2C_Read(rom_id, addr, rx, rx_len);
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">// Leitura combinada (Write + Read), ex: ler registrador de sensor remoto</span></span>
<span class="line"><span style="color: #D8DEE9">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">DS28E17_I2C_WriteRead</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">rom_id</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">                           </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addr</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">                           </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">reg</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">                           </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">rx</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">                           </span><span style="color: #D8DEE9">uint8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">rx_len</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Escreve o registrador</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> (</span><span style="color: #81A1C1">!</span><span style="color: #88C0D0">DS28E17_I2C_Write</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">rom_id</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addr</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> ®</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF">))</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">false;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">HAL_Delay</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">2</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// Pequena espera opcional</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// Lê o conteúdo do registrador</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">DS28E17_I2C_Read</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">rom_id</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addr</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">rx</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">rx_len</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Em sistemas STM32F411 reais, o desenvolvedor acrescentaria temporizações precisas, checagens de CRC, tratamento de erros e integração com FreeRTOS ou superloop. No entanto, mesmo neste formato simplificado, a lógica é clara: o DS28E17 transforma cada comando 1-Wire em transações I²C completas, permitindo acessar sensores remotos com simplicidade e confiabilidade.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Conclusão e Recomendações para Projetos Reais</strong></h2>



<p class="wp-block-paragraph">O DS28E17 é uma solução extremamente eficiente para quem precisa estender a comunicação com dispositivos I²C a longas distâncias ou simplificar o cabeamento em sistemas embarcados. Sua principal contribuição está em isolar os efeitos elétricos negativos que afetam o barramento I²C — como capacitância excessiva e interferências — e convertê-los em uma interface 1-Wire de maior robustez, permitindo que sensores, memórias e atuadores remotos continuem acessíveis mesmo em topologias distribuídas. A simplicidade de uso, aliada à confiabilidade do CRC e ao ROM ID único, torna o dispositivo atraente tanto para engenheiros experientes quanto para iniciantes que precisam lidar com sensores afastados do microcontrolador.</p>



<p class="wp-block-paragraph">No contexto de microcontroladores como os STM32F411, o DS28E17 reduz significativamente a complexidade do firmware. O desenvolvedor não precisa lidar com as intricadas fases do protocolo I²C tradicional, pois o dispositivo executa localmente essas operações. Isso facilita a escrita de drivers, diminui o risco de falhas e acelera a prototipagem. Em projetos industriais, agrícolas ou IoT distribuída, essa abordagem simplifica tanto a parte elétrica quanto o software, permitindo arquiteturas mais limpas, com menos fios, maior imunidade a ruído e possibilidade de crescimento para dezenas de nós remotos num único barramento 1-Wire.</p>



<p class="wp-block-paragraph">Em aplicações reais, recomenda-se posicionar o DS28E17 o mais próximo possível do dispositivo I²C remoto, garantindo que o trecho crítico de comunicação permaneça curto e estável. Também vale a pena testar diferentes resistores de pull-up no 1-Wire para cabos longos, ajustar temporizações conforme o ambiente e sempre validar a integridade de dados com base no status retornado pelo DS28E17. Quando bem aplicado, esse CI deixa de ser apenas um componente de conversão e se torna um elemento-chave para criar redes de sensores robustas, expansíveis e de implementação econômica.</p>



<p class="wp-block-paragraph">Datasheet: <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/ds28e18.pdf">https://www.analog.com/media/en/technical-documentation/data-sheets/ds28e18.pdf</a></p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://mcu.tec.br/protoclos/ds28e17-como-converter-one-wire-em-i%c2%b2c-e-estender-sensores-a-longas-distancias/">DS28E17: Como Converter One-Wire em I²C e Estender Sensores a Longas Distâncias</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">910</post-id>	</item>
		<item>
		<title>Cálculo dos Resistores de Pull-Up para Barramentos I²C</title>
		<link>https://mcu.tec.br/protoclos/i2c/calculo-dos-resistores-de-pull-up-para-barramentos-i%c2%b2c/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=calculo-dos-resistores-de-pull-up-para-barramentos-i%25c2%25b2c</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Fri, 16 May 2025 00:24:28 +0000</pubDate>
				<category><![CDATA[I2C]]></category>
		<category><![CDATA[barramento I2C]]></category>
		<category><![CDATA[cálculo resistor I2C]]></category>
		<category><![CDATA[capacitância barramento I2C]]></category>
		<category><![CDATA[como calcular resistor pull-up]]></category>
		<category><![CDATA[corrente IOL]]></category>
		<category><![CDATA[eletrônica embarcada]]></category>
		<category><![CDATA[fórmula resistor pull-up]]></category>
		<category><![CDATA[resistor ideal SDA SCL]]></category>
		<category><![CDATA[resistor pull-up I2C]]></category>
		<category><![CDATA[subida de tensão I2C]]></category>
		<category><![CDATA[tempo de subida I2C]]></category>
		<category><![CDATA[tempo resposta I2C]]></category>
		<category><![CDATA[tensão Vcc I2C]]></category>
		<category><![CDATA[velocidade I2C]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=509</guid>

					<description><![CDATA[<p>Aprenda a calcular resistores de pull-up para I²C, com fórmulas, exemplos e explicações sobre tempo de subida, capacitância e performance do barramento.</p>
<p>The post <a href="https://mcu.tec.br/protoclos/i2c/calculo-dos-resistores-de-pull-up-para-barramentos-i%c2%b2c/">Cálculo dos Resistores de Pull-Up para Barramentos I²C</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">O barramento I²C (Inter-Integrated Circuit) é um protocolo de comunicação serial de dois fios, composto pelas linhas SDA (dados) e SCL (clock), projetado para comunicação entre dispositivos integrados. Utilizando um sistema de saída <em>open-drain</em>, os dispositivos I²C apenas puxam a linha para nível baixo (LOW), enquanto resistores externos de pull-up garantem o retorno da linha ao nível alto (HIGH) quando nenhum dispositivo está transmitindo. Sem esses resistores, a linha flutuaria, tornando a comunicação instável.</p>



<h2 class="wp-block-heading">A Influência do Resistor no Tempo de Resposta</h2>



<p class="wp-block-paragraph">Como o barramento depende da capacitância da linha (Cb) e do resistor de pull-up (Rp), o tempo necessário para a linha retornar ao nível alto após ser puxada para o nível baixo segue a constante de tempo RC (produto da resistência e capacitância). Se o valor de Rp for muito alto, o tempo de subida da tensão pode ultrapassar os limites da especificação do protocolo I²C, causando falhas de comunicação.</p>



<p class="wp-block-paragraph">A resposta da tensão em um circuito RC ao aplicar uma etapa de tensão VCCV_{CC}VCC​ pode ser expressa por: V(t)=VCC(1−e−t/RC)V(t) = V_{CC} \left( 1 &#8211; e^{-t / RC} \right)V(t)=VCC​(1−e−t/RC)</p>



<p class="wp-block-paragraph">Com base nisso, o tempo de subida trt_rtr​ da tensão, definido entre 30% e 70% de VCCV_{CC}VCC​, pode ser calculado como: tr=0,8473⋅RP⋅Cbt_r = 0{,}8473 \cdot R_P \cdot C_btr​=0,8473⋅RP​⋅Cb​</p>



<p class="wp-block-paragraph">Esse tempo precisa ser inferior ao máximo especificado para o modo I²C utilizado (Standard, Fast ou Fast Mode Plus)I2C Bus Pullup Resistor….</p>



<h2 class="wp-block-heading">Fórmulas para o Cálculo dos Resistores de Pull-Up</h2>



<h3 class="wp-block-heading">1. Resistor Mínimo (RP_min)</h3>



<p class="wp-block-paragraph">Evita que os dispositivos no barramento não consigam forçar a linha para nível baixo. É dado por: \[R_{P(min)} = \frac{V_{CC} &#8211; V_{OL(max)}}{I_{OL}}\]



<p class="wp-block-paragraph">Onde:</p>



<ul class="wp-block-list">
<li>\(V_{OL(max)}\) é a tensão máxima ainda reconhecida como nível lógico baixo (tipicamente 0,4V),</li>



<li>\(I_{OL}\)​ é a corrente máxima que o dispositivo pode absorver no nível lógico baixo.</li>
</ul>



<h3 class="wp-block-heading">2. Resistor Máximo (\(RP_max\))</h3>



<p class="wp-block-paragraph">Garante que o tempo de subida esteja dentro das especificações do protocolo. Calculado por: \[R_{P(max)} = \frac{t_r}{0{,}8473 \cdot C_b}\]



<p class="wp-block-paragraph">Onde:</p>



<ul class="wp-block-list">
<li>\(t_r\)​ é o tempo de subida permitido (por exemplo, 300ns para Fast Mode),</li>



<li>\(C_b\)​ é a capacitância da linha em farads (por exemplo, 200pF = 200 x 10⁻¹² F).</li>
</ul>



<h2 class="wp-block-heading">Exemplo de Cálculo</h2>



<p class="wp-block-paragraph">Para uma comunicação I²C em Fast Mode com os seguintes parâmetros:</p>



<ul class="wp-block-list">
<li>\(V_{CC} = 3{,}3V\)</li>



<li>\(C_b = 200pF\)</li>



<li>\(t_r = 300ns\)</li>



<li>\(V_{OL(max)} = 0{,}4V\)</li>



<li>\(I_{OL} = 3mA\)</li>
</ul>



<p class="wp-block-paragraph">Temos:</p>



<p class="wp-block-paragraph">\(<strong>RP_min\):</strong> \[R_{P(min)} = \frac{3{,}3 &#8211; 0{,}4}{3 \cdot 10^{-3}} = 966{,}67 \ \Omega\]



<p class="wp-block-paragraph">\(<strong>RP_max\):</strong> \[R_{P(max)} = \frac{300 \cdot 10^{-9}}{0{,}8473 \cdot 200 \cdot 10^{-12}} \approx 1{,}77k\Omega\]



<p class="wp-block-paragraph">Portanto, o valor ideal do resistor de pull-up deve estar entre 967 Ω e 1,77 kΩI2C Bus Pullup Resistor….</p>



<h2 class="wp-block-heading">Considerações Finais</h2>



<p class="wp-block-paragraph">Ao projetar sistemas com I²C, é fundamental balancear consumo de energia e velocidade de comunicação. Resistores menores aceleram a comunicação (tempo de subida menor), mas aumentam o consumo de corrente quando a linha está em nível baixo. Já resistores maiores reduzem esse consumo, mas podem comprometer a integridade do sinal.</p>



<p class="wp-block-paragraph">Por isso, a escolha do resistor ideal deve sempre considerar:</p>



<ul class="wp-block-list">
<li>Tensão de operação;</li>



<li>Capacitância total da linha (cabeamento + CI&#8217;s);</li>



<li>Modo de operação I²C (Standard, Fast ou Fast Plus);</li>



<li>Corrente máxima que os dispositivos podem suportar.</li>
</ul>



<p class="wp-block-paragraph">Referência: </p>



<ul class="wp-block-list">
<li>https://www.ti.com/lit/an/slva689/slva689.pdf?ts=1747353571271&amp;ref_url=https%253A%252F%252Fwww.google.com%252F</li>
</ul><p>The post <a href="https://mcu.tec.br/protoclos/i2c/calculo-dos-resistores-de-pull-up-para-barramentos-i%c2%b2c/">Cálculo dos Resistores de Pull-Up para Barramentos I²C</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">509</post-id>	</item>
	</channel>
</rss>
