<?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>Arquivo para Microcontrolador - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/tag/microcontrolador/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/microcontrolador/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Thu, 07 Sep 2023 21:31:03 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Sensor de Temperatura TMP36 com Arduino e visor LCD 16&#215;2</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 07 Sep 2023 21:29:01 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[Sensor]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19653</guid>

					<description><![CDATA[<p>Sensor de Temperatura TMP36 com com Arduino e visor LCD Neste projeto vamos empregar um sensor para verificar a temperatura do ambiente e enviar a leitura para um Arduino, que se encarregará de interpretar o valor lido e então exibir em um display LCD a temperatura medida em graus Celsius (ºC). Para tal usaremos o sensor TMP36, que é um sensor de baixo custo, bastante comum e muito empregado em circuitos que envolvam controle de temperatura para realização de processos diversos. Outros modelos de sensores podem ser empregados, como o TMP35 ou TMP37 bastando para isso realizar pequenas alterações no programa de acordo com as características de cada componente. Algumas das aplicações mais comuns do TMP36 incluem: Sistemas de controle ambiental Proteção térmica de circuitos Controle de processos industriais Alarmes de incêndio Monitoramento de sistemas de potência Gerenciamento térmico de CPU entre muitas outras que podemos imaginar. Algumas características do sensor TMP36 A seguir temos listadas algumas das características técnicas do sensor TMP36, retiradas de seu datasheet: Saída Analógica: O TMP36 gera uma saída analógica proporcional à temperatura medida. A tensão de saída aumenta linearmente com o aumento da temperatura. Precisão: Boa precisão em relação à medição de temperatura. Sua precisão [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/">Sensor de Temperatura TMP36 com Arduino e visor LCD 16&#215;2</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Sensor de Temperatura TMP36 com com Arduino e visor LCD</h2>
<p>Neste projeto vamos empregar um sensor para verificar a temperatura do ambiente e enviar a leitura para um Arduino, que se encarregará de interpretar o valor lido e então exibir em um display LCD a temperatura medida em graus Celsius (ºC).</p>
<p>Para tal usaremos o sensor <strong>TMP36,</strong> que é um sensor de baixo custo, bastante comum e muito empregado em circuitos que envolvam controle de temperatura para realização de processos diversos.</p>
<p>Outros modelos de sensores podem ser empregados, como o TMP35 ou TMP37 bastando para isso realizar pequenas alterações no programa de acordo com as características de cada componente.</p>
<p>Algumas das aplicações mais comuns do TMP36 incluem:</p>
<ul>
<li>Sistemas de controle ambiental</li>
<li>Proteção térmica de circuitos</li>
<li>Controle de processos industriais</li>
<li>Alarmes de incêndio</li>
<li>Monitoramento de sistemas de potência</li>
<li>Gerenciamento térmico de CPU</li>
</ul>
<p>entre muitas outras que podemos imaginar.</p>
<h4>Algumas características do sensor TMP36</h4>
<p>A seguir temos listadas algumas das características técnicas do sensor TMP36, retiradas de seu datasheet:</p>
<ul>
<li>Saída Analógica: O TMP36 gera uma saída analógica proporcional à temperatura medida. A tensão de saída aumenta linearmente com o aumento da temperatura.</li>
<li>Precisão: Boa precisão em relação à medição de temperatura. Sua precisão é de cerca de ±2°C.</li>
<li>Alimentação: Alimentado com uma baixa tensão, tipicamente entre 2,7V e 5,5V</li>
<li>Faixa de Operação: O sensor pode medir temperaturas em uma ampla faixa, geralmente de -40°C a 125°C.</li>
<li>Tensão de Referência: Ele gera uma tensão de saída proporcional à temperatura, onde 0°C é representado como 0,5V. Para cada grau Celsius de aumento na temperatura ocorre um aumento de 10 mV na tensão de saída.</li>
</ul>
<p>Para fazer a leitura da temperatura, a tensão de saída do TMP36 é conectada a um conversor analógico para digital (ADC) no microcontrolador (ou outro circuito). O microcontrolador (no caso, o Arduino) lê a tensão e, por meio de cálculos simples (explicados adiante), converte essa tensão medida em mV para uma temperatura correspondente em graus Celsius.</p>
<p>Mais informações sobre esse sensor podem ser obtidas no <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf" target="_blank" rel="noopener">Datasheet do TMP36</a>.</p>
<p>Vejamos os materiais que serão necessários para construir esse circuito e testá-lo.</p>
<h3>Lista de Materiais</h3>
<p>Vamos precisar dos seguintes componentes para montar o circuito do projeto:</p>
<ul>
<li>01 Sensor de Temperatura TMP36</li>
<li>01 Arduino Uno (ou compatível)</li>
<li>01 Display LCD 16&#215;2</li>
<li>01 Resistor de 220 Ω</li>
<li>01 Potenciômetro de 10 kΩ</li>
<li>01 Matriz de Contatos</li>
<li>Fios diversos</li>
</ul>
<h3>O Circuito</h3>
<p>A figura a seguir mostra as ligações dos componentes, criada com o auxílio de um software de simulação de circuitos &#8211; <a href="https://www.tinkercad.com/" target="_blank" rel="noopener">Tinkercad</a>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-19654" title="Medir temperatura com sensor TMP36 e LCD no Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito.jpg" alt="Medir temperatura com sensor TMP36 e LCD no Arduino" width="700" height="523" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito.jpg 717w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito-420x314.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito-174x131.jpg 174w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-circuito-300x225.jpg 300w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<h3>Diagrama Esquemático</h3>
<p>E a seguir temos o diagrama esquemático do circuito, com detalhes de como os componentes são interligados.</p>
<div id="attachment_19655" style="width: 761px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19655" class="wp-image-19655" title="Sensor TMP36 e visor LCD 16x2 no Arduino - Diagrama Esquemático" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-1024x423.jpg" alt="Sensor TMP36 e visor LCD no Arduino - Diagrama Esquemático" width="751" height="310" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-1024x423.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-420x173.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama-768x317.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/08/sensor-temperatura-tmp36-lcd-arduino-diagrama.jpg 1100w" sizes="auto, (max-width: 751px) 100vw, 751px" /><p id="caption-attachment-19655" class="wp-caption-text">Sensor TMP36 e visor LCD no Arduino &#8211; Diagrama Esquemático</p></div>
<h3>Código-fonte</h3>
<p>Na sequência temos o código que foi usado para programar o microcontrolador, com uma explicação detalhada logo após.</p>
<pre>#include &lt;LiquidCrystal.h&gt;

<span style="color: #339966;">// Inicializar a biblioteca com os números dos pinos digitais</span>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);

<span style="color: #339966;">// Variáveis para leitura e interpretação das leituras do TMP36</span>
const int TEMP=0;
int val = 0;
float celsius=0.0;

void setup()
{
    <span style="color: #339966;">// Configurar o número de colunas e linhas do LCD:</span>
    lcd.begin(16, 2);

    <span style="color: #339966;">// Texto a ser mostrado no LCD (texto fixo, primeira linha):</span>
    lcd.print("Temp. °C");
}

void loop()
{
    <span style="color: #339966;">// Posicionar o cursor na coluna 0 e linha 1 (segunda linha):</span>
    lcd.setCursor(0, 1);

    <span style="color: #339966;">// Ler o valor enviado pelo sensor</span>
    val = analogRead(TEMP);

    <span style="color: #339966;">// Calcular e ajustar a temperatura em graus Celsius</span>
    celsius = map(((val - 20) * 3.04), 0, 1023, -40, 125); 

    <span style="color: #339966;">// Imprimir no LCD a temperatura</span>
    lcd.print(celsius);
}</pre>
<h3>Funcionamento do código</h3>
<h4>1. Declarações iniciais</h4>
<div>Começamos incluindo a biblioteca &#8220;LiquidCrystal&#8221;, que é necessária para controlar o display LCD.</div>
<div>Logo após criamos uma instância da classe &#8220;LiquidCrystal&#8221; chamada &#8220;lcd&#8221;, definindo os pinos digitais que estão conectados aos pinos do display . Os números (12, 11, 2, 3, 4, 5) correspondem, respectivamente, aos pinos RS, Enable, D4, D5, D6 e D7 do LCD.</div>
<div> </div>
<div>Na sequência, declaramos duas variáveis e uma constante que serão usadas pelo programa:</div>
<div> </div>
<ul>
<li><strong>TEMP</strong> é uma constante que representa o pino analógico ao qual o sensor TMP36 está conectado (no caso, o pino 0).</li>
<li><strong>val</strong> é uma variável que será usada para armazenar o valor enviado pelo sensor TMP36</li>
<li><strong>celsius</strong> é a variável que armazenará a temperatura (já convertida) em graus Celsius.</li>
</ul>
<h3>2. Função setup()</h3>
<div>Aqui configuramos o número de colunas e linhas do display LCD com o método <em><strong>lcd.begin(16, 2)</strong> </em>e escrevemos uma mensagem fixa na primeira linha do LCD com <em><strong>lcd.print(&#8220;Temp. °C&#8221;)</strong></em> </div>
<div> </div>
<h3>3. Função loop()</h3>
<div>
<p>Na função principal do programa temos:</p>
<ol>
<li>Posicionamento do cursor na coluna 0 e linha 1 (segunda linha) com <em><strong>lcd.setCursor(0, 1)</strong></em></li>
<li>Leitura do valor analógico enviado pelo sensor e armazenado na variável val com <em><strong>val = analogRead(TEMP)</strong></em></li>
<li>Cálculo da temperatura em graus Celsius com base no valor lido do sensor com a instrução <em><strong>celsius = map(((val &#8211; 20) * 3.04), 0, 1023, -40, 125)</strong></em></li>
<li>Finalmente, imprimimos a temperatura no display LCD com <em><strong>lcd.print(celsius)</strong></em></li>
</ol>
<h4>A conversão de mV para ºC</h4>
<p>A linha</p>
<pre><strong>celsius = map(((val - 20) * 3.04), 0, 1023, -40, 125);</strong></pre>
<p>permite mapear o valor lido do sensor, que é uma tensão elétrica da ordem de alguns mV, para um valor numérico que representa a temperatura medida pelo dispositivo. Nesta linha temos:</p>
<p><a href="http://www.bosontreinamentos.com.br/eletronica/arduino/funcao-map/"><strong>map()</strong></a>: A função <em>map()</em> é usada para mapear um valor de um intervalo para outro. Neste caso, ela mapeia o valor ajustado em mV para o intervalo de temperaturas em graus Celsius.</p>
<p>A sintaxe da função map() é a seguinte:</p>
<pre><span style="color: #800080;"><strong>map(valor, de_min, de_max, para_min, para_max);</strong></span></pre>
<p>onde:</p>
<ul>
<li><strong>valor</strong>: O valor que queremos mapear para a nova faixa.</li>
<li><strong>de_min</strong> e <strong>de_max</strong>: A faixa atual (mínimo e máximo) do valor de entrada. No caso, os valores 0 e 1023, que são os limites de leitura da entrada analógica do Arduino.</li>
<li><strong>para_min</strong> e <strong>para_max</strong>: A faixa desejada (mínimo e máximo) para o valor de saída, que no caso é a faixa de temperaturas suportada pelo sensor: de -40ºC a 125ºC</li>
</ul>
<p>Leia mais sobre a <a href="http://www.bosontreinamentos.com.br/eletronica/arduino/funcao-map/">função map do Arduino aqui</a>.</p>
<p>Antes de usar a função map(), o código realiza o cálculo <span style="color: #800080;"><em><strong>(val &#8211; 20) * 3.04</strong></em> </span>para ajustar o valor lido do sensor. O sensor TMP36 gera valores que representam a temperatura em mV (milivolts) e estão relacionados a uma tensão de referência. O valor &#8220;20&#8221; é subtraído para compensar a tensão de referência do sensor e ter uma medição mais precisa. Já o valor &#8220;3.04&#8221; é um fator de conversão que leva em consideração a sensibilidade do sensor. O valor obtido é então mapeado pela função map().</p>
<p>Assim, o código calcula a temperatura em graus Celsius com base no valor analógico lido do sensor TMP36, ajustando-o primeiro e depois mapeando-o para o intervalo desejado de temperaturas. O resultado é armazenado na variável <strong><em>celsius</em></strong>, para exibição no display LCD.</p>
</div>
<h3>Resultado</h3>
<p>Assim que o circuito é ligado, o sensor inicia a detecção da temperatura ambiente e então o valor é lido pelo Arduino, que o converte e mostra a temperatura correspondente no mostrador LCD, como ilustra a imagem a seguir (retirada do simulador Tinkercad):</p>
<div id="attachment_19670" style="width: 731px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-19670" class="wp-image-19670" title="Temperatura sendo exibida em um display LCD com sensor TMP36" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2.jpg" alt="Temperatura sendo exibida em um display LCD com sensor TMP36" width="721" height="329" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2.jpg 927w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2-420x192.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/09/sensor-tmp36-arduino-lcd-16x2-768x350.jpg 768w" sizes="auto, (max-width: 721px) 100vw, 721px" /><p id="caption-attachment-19670" class="wp-caption-text">Temperatura sendo exibida em um display LCD a partir de um sensor TMP36</p></div>
<p>Variando a temperatura no sensor o valor exibido no LCD muda de acordo.</p>
<p>É isso aí! Nos próximos artigos vamos explorar mais circuitos interessantes e úteis com microcontroladores, sensores e outros componentes eletrônicos. Até!</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/">Sensor de Temperatura TMP36 com Arduino e visor LCD 16&#215;2</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/arduino/sensor-de-temperatura-tmp36-com-arduino-e-visor-lcd-16x2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Unions em Linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 21 Sep 2019 17:37:30 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15181</guid>

					<description><![CDATA[<p>Unions em Linguagem C Uma Union é uma estrutura de dados em linguagem C que permite agrupar dados de tipos diferentes como um único objeto de dados. Unions&#160;são tipos de dados derivados, cujos membros compartilham o mesmo espaço de armazenamento. Em diferentes situações em um programa, algumas variáveis podem ser importantes, ao passo que outras podem não ser relevantes, e uma union, por compartilhar o espaço entre suas variáveis internas acaba por economizar espaço de armazenamento. Note que apenas um membro da union pode ser referenciado por vez. Como Declarar Unions A declaração de Unions em linguagem C é bem parecida com a declaração de uma estrutura (struct), como podemos ver a seguir: union teste { int a; float b; }; Neste exemplo declaramos uma union de nome teste, que é um tipo de dado contém dois membros: o campo a, para um valor inteiro, e o campo b, para armazenar um dado do tipo float. Uma union pode conter campos de qualquer tipo, incluindo structs e outras unions. Ao declarar uma union, é possível inicializá-la, mas somente com um valor do mesmo tipo do primeiro membro contido na union. Após criar o modelo da union, podemos criar variáveis baseadas [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/">Unions em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Unions em Linguagem C</h2>
<p>Uma Union é uma estrutura de dados em linguagem C que permite agrupar dados de tipos diferentes como um único objeto de dados. Unions&nbsp;são tipos de dados derivados, cujos membros compartilham o mesmo espaço de armazenamento.</p>
<p>Em diferentes situações em um programa, algumas variáveis podem ser importantes, ao passo que outras podem não ser relevantes, e uma union, por compartilhar o espaço entre suas variáveis internas acaba por economizar espaço de armazenamento.</p>
<p>Note que apenas um membro da union pode ser referenciado por vez.</p>
<h3>Como Declarar Unions</h3>
<p>A declaração de Unions em linguagem C é bem parecida com a declaração de uma estrutura (struct), como podemos ver a seguir:</p>
<pre><span style="color: #800080;">union teste {</span>
<span style="color: #800080;">  int a;</span>
<span style="color: #800080;">  float b;</span>
<span style="color: #800080;">};</span></pre>
<p>Neste exemplo declaramos uma union de nome <strong>teste</strong>, que é um tipo de dado contém dois membros: o campo a, para um valor inteiro, e o campo b, para armazenar um dado do tipo float. Uma union pode conter campos de qualquer tipo, incluindo <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/" target="_blank" rel="noopener">structs</a> e outras unions.</p>
<p>Ao declarar uma union, é possível inicializá-la, mas somente com um valor do mesmo tipo do primeiro membro contido na union.</p>
<p>Após criar o modelo da union, podemos criar variáveis baseadas nele usando a seguinte sintaxe:</p>
<pre><span style="color: #800080;">union teste un01;</span></pre>
<p>Criamos com esta declaração a variável <strong>un01</strong>, que é do tipo <em>teste</em> (union).</p>
<h3>Como Acessar os membros da Union</h3>
<p>Podemos acessar os membros de uma union usando o operador ponto (<strong>.</strong>). Por exemplo, vamos atribuir o valor 15 ao membro a da union teste, e logo após copiar seu valor deste membro para uma variável do programa:</p>
<pre>int valor;
un01.a = 15;
valor = un01.a;
printf("Valor: %d", valor);</pre>
<p>Com uma union somente pode conter valor em um membro por vez, se tentarmos atribuir valores a mais de um membro somente o último valor atribuido será realmente armazenado. Veja o seguinte exemplo:</p>
<pre>union teste un01;

int valor;
un01.a = 15;
un01.b = 20.50;

printf("Valor do membro a: %d\n", un01.a);
printf("Valor do membro b: %f\n", un01.b);</pre>
<p>A saída desse programa mostra o seguinte resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15426" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-01.jpg" alt="Unions em linguagem C" width="428" height="118" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-01.jpg 428w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-01-420x116.jpg 420w" sizes="auto, (max-width: 428px) 100vw, 428px" /></p>
<p>Note que o valor do membro b está correto (20,50), porém o valor atribuído ao&nbsp;membro a (que é 15) não faz sentido algum. Agora veja o que ocorre se invertermos a ordem de atribuição, desta forma:</p>
<pre>un01.b = 20.50;
un01.a = 15;</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15427" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-02.jpg" alt="Unions em linguagem C - 02" width="450" height="130" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-02.jpg 450w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-02-420x121.jpg 420w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Agora o valor do membro a está correto, mas o do membro b está zerado. Isso mostra claramente que a union somente pode guardar valor em um de seus membros por vez. Se um membro possui valor armazenado, e é atribuído valor e um outro membro, o primeiro membro perde seu conteúdo.</p>
<p>Lembre-se sempre dessa propriedade das unions, pois isso pode causar problemas se não for levado em consideração em seus programas.</p>
<h3>Operações em Unions</h3>
<p>As operações que podems er realizadas em uma union são:</p>
<ul>
<li>Atribuir uma union a outra union do mesmo tipo</li>
<li>Obter o endereço da union (&amp;)</li>
<li>Acessar seus membros com operadores adequados.</li>
</ul>
<p>As unions não podem ser comparadas entre si (assim como as structs).</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/">Unions em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Introdução aos Microcontroladores</title>
		<link>https://www.bosontreinamentos.com.br/eletronica/eletronica-geral/introducao-aos-microcontroladores/</link>
					<comments>https://www.bosontreinamentos.com.br/eletronica/eletronica-geral/introducao-aos-microcontroladores/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 24 Apr 2015 23:33:26 +0000</pubDate>
				<category><![CDATA[Eletrônica Geral]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Maker]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=2055</guid>

					<description><![CDATA[<p>Introdução aos Microcontroladores Microcontrolador Um microcontrolador é um chip que contém praticamente um pequeno computador embutido, de baixo custo, incluindo: Núcleo de processamento Memórias RAM / ROM /Flash Periféricos de E/S Conversores de sinais Gerador de Clock, entre outros. Os microcontroladores, ou MCU (microcontroller unit) são projetados para uso em aplicações embarcadas e outros sistemas específicos. Aplicações dos microcontroladores Os microcontroladores encontram um número enorme de aplicações na eletrônica moderna, como por exemplo: Sistemas embarcados Brinquedos Sistemas R/C (controle remoto) Máquinas industriais e comerciais Eletrodomésticos Vantagens Existem diversas vantagens no uso de microcontroladores para a construção de circuitos eletrônicos. Dente elas, podemos citar as seguintes: Custos baixos de projeto e construção Consumo de energia mínimo Facilidade de programação Sistema compacto (“all in one”) Praticidade para reposição MCU x CPU Vamos fazer uma pequena comparação entre Microcontroladores e Microprocessadores. Um microcontrolador é diferente de um microprocessador de várias maneiras. O principal ponto é a funcionalidade. Um microprocessador necessita de diversos componentes externos, como memórias, barramentos e periféricos para poder operar. O MCU contém esses elementos todos embutidos. Além disso, um microprocessador geralmente faz parte de um sistema programável genérico, como um computador, ao passo que o MCU realiza apenas a tarefa [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/eletronica-geral/introducao-aos-microcontroladores/">Introdução aos Microcontroladores</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Introdução aos Microcontroladores</h2>
<h3><b>Microcontrolador</b></h3>
<p>Um microcontrolador é um chip que contém praticamente um pequeno computador embutido, de baixo custo, incluindo:</p>
<ul>
<li>Núcleo de processamento</li>
<li>Memórias RAM / ROM /Flash</li>
<li>Periféricos de E/S</li>
<li>Conversores de sinais</li>
<li>Gerador de Clock, entre outros.</li>
</ul>
<p>Os microcontroladores, ou MCU (microcontroller unit) são projetados para uso em aplicações embarcadas e outros sistemas específicos.</p>
<h3><b>Aplicações dos microcontroladores</b></h3>
<p>Os microcontroladores encontram um número enorme de aplicações na eletrônica moderna, como por exemplo:</p>
<ul>
<li>Sistemas embarcados</li>
<li>Brinquedos</li>
<li>Sistemas R/C (controle remoto)</li>
<li>Máquinas industriais e comerciais</li>
<li>Eletrodomésticos</li>
</ul>
<h3><b>Vantagens</b></h3>
<p>Existem diversas vantagens no uso de microcontroladores para a construção de circuitos eletrônicos. Dente elas, podemos citar as seguintes:</p>
<ul>
<li>Custos baixos de projeto e construção</li>
<li>Consumo de energia mínimo</li>
<li>Facilidade de programação</li>
<li>Sistema compacto (“all in one”)</li>
<li>Praticidade para reposição</li>
</ul>
<h3><b>MCU x CPU</b></h3>
<p>Vamos fazer uma pequena comparação entre Microcontroladores e Microprocessadores.</p>
<p>Um microcontrolador é diferente de um microprocessador de várias maneiras. O principal ponto é a funcionalidade. Um microprocessador necessita de diversos componentes externos, como memórias, barramentos e periféricos para poder operar. O MCU contém esses elementos todos embutidos.</p>
<p>Além disso, um microprocessador geralmente faz parte de um sistema programável genérico, como um computador, ao passo que o MCU realiza apenas a tarefa específica para o qual foi programado, dentro de unm circuito eletrônico.</p>
<h3><b>Arquiteturas Harvard x Von Neumann</b></h3>
<p>Há basicamente dois tipos de arquiteturas de computadores digitais: <strong>Harvard</strong> e <strong>von Neumann</strong></p>
<p>A arquitetura <b>Harvard </b>tem esse nome pois tem suas raízes no computador <a href="https://en.wikipedia.org/wiki/Harvard_Mark_I" target="_blank" rel="noopener noreferrer">Harvard Mark I</a>. Sua característica principal é que ela possui memórias separadas para armazenamento de dados e instruções. Desta forma, é possível acessar a memória de programa e a memória de dados simultaneamente. Geralmente a memória de programa (instruções) e´somente=leitura e a memória de dados é leitura/escrita. Assim, é impossível que o conteúdo de um programa seja modificado pelo programa em si.</p>
<p>Já a arquitetura <b>von Neumann </b>batizada a partir do matemático e cientista da computação John von Neumann. As máquinas com arquitetura von Neumann possuem um único sistema de armazenamento compartilhado para armazenar dados e as instruções a serem executadas. Desta forma, os programas podem ser facilmente modificados por si próprios, pois ficam armazenados na memória que é leitura/escrita.</p>
<div id="attachment_3420" style="width: 581px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3420" class="wp-image-3420 size-full" title="Microcontroladores - Arquiteturas Harvard e Von Neumann" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/arquiteturas-harvard-von-neumann-microcontroladores.jpg" alt="Microcontroladores - Arquiteturas Harvard e Von Neumann" width="571" height="392" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/arquiteturas-harvard-von-neumann-microcontroladores.jpg 571w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/arquiteturas-harvard-von-neumann-microcontroladores-420x288.jpg 420w" sizes="auto, (max-width: 571px) 100vw, 571px" /><p id="caption-attachment-3420" class="wp-caption-text">Arquiteturas Harvard e Von Neumann.<br />
Imagem: http://santhosh84.blogspot.com.br/</p></div>
<p>&nbsp;</p>
<h3><b>Comparativo das arquiteturas Harvard e von Neumann</b></h3>
<table>
<tbody>
<tr>
<td><b>Arquitetura von Neumann</b></td>
<td><b>Arquitetura Harvard</b></td>
</tr>
<tr>
<td>Usada em processadores convencionais encontrados em PCs e Servers, e em alguns sistemas embarcados.</td>
<td>Usada em microcontroladores e DSPs encontrados em sistemas embarcados e sistemas de comunicação móveis</td>
</tr>
<tr>
<td>Dados e programas são armazenados na mesma memória.</td>
<td>Dados e programas são armazenados em memórias separadas.</td>
</tr>
<tr>
<td>O código é executado de forma serial e demora mais ciclos de clock.</td>
<td>O código é executado de forma paralela.</td>
</tr>
<tr>
<td>Os programas, geralmente, podem ser otimizados para diminuir de tamanho.</td>
<td>Os programas tendem a ser maiores com a complexidade.</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><b>Periféricos típicos de um MCU</b></h3>
<p>Um microcontrolador possui, tipicamente, os periféricos listados a seguir:</p>
<ul>
<li>Conversores ADC / DAC</li>
<li>Timers</li>
<li>Linhas PWM (Pulse Width Modulation)</li>
<li>Interface USB</li>
<li>Interfaces UART, I2C, SPI</li>
<li>Ethernet, CAN (Controller Area Network)</li>
</ul>
<p>Um CAN (Controller Area Network) é um barramento projetado para que microcontroladores e outros dispositivos, como sensores, se comuniquem entre si sem a necessidade de um computador host.</p>
<h3><b>Exemplos de Microcontroladores</b></h3>
<p>Vejamos alguns exemplos típicos de microcontroladores comuns encontrados no mercado e usados comumente em projetos eletrônicos:</p>
<ul>
<li>ARM Cortex-M</li>
<li>Atmel AVR / AVR 32</li>
<li>Intel 8051</li>
<li>Microchip PIC</li>
<li>NXP LCP 2000 / 3000</li>
<li>Paralax Propeller</li>
<li>Texas Instruments MSP430</li>
</ul>
<div id="attachment_3421" style="width: 581px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3421" class="wp-image-3421 size-full" title="Microcontroladores comuns - MCU" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/microcontroladores-MCU.jpg" alt="Microcontroladores comuns - MCU" width="571" height="280" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/microcontroladores-MCU.jpg 571w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/microcontroladores-MCU-420x206.jpg 420w" sizes="auto, (max-width: 571px) 100vw, 571px" /><p id="caption-attachment-3421" class="wp-caption-text">Alguns microcontroladores comuns</p></div>
<p>&nbsp;</p>
<h3><b>Programação de um Microcontrolador</b></h3>
<ul>
<li>Os microcontroladores não possuem, geralmente, um sistema operacional; os programas rodam diretamente no chip (bare metal).</li>
<li>O software que roda no microcontrolador é chamado de <b>Firmware</b>.</li>
<li>O software é programado em <a href="http://www.bosontreinamentos.com.br/category/programacao-em-linguagem-c/" target="_blank" rel="noopener noreferrer">linguagens C</a> ou Assembly na maior parte dos casos, embora seja possível usar outras linguagens em alguns MCUs.</li>
<li>A programação é feita como o uso de ferramentas instaladas em um PC (IDE)</li>
</ul>
<h3><b>Placas para estudo de microcontroladores</b></h3>
<p>Há no mercado diversos kits e placas para estudo e prototipagem de sistemas embarcados e programação de microcontroladores. Como exemplo, podemos citar:</p>
<ul>
<li>Plataforma <a href="http://www.bosontreinamentos.com.br/category/eletronica/arduino/" target="_blank" rel="noopener noreferrer">Arduino</a></li>
<li>Microchip PIC Starter Kit</li>
<li>Texas Instruments MSP430 Launchpad</li>
<li>Keil MCB900 (NXP)</li>
</ul>
<p>&nbsp;</p>
<div id="attachment_3422" style="width: 584px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3422" class="wp-image-3422 size-full" title="Placas para estudo de microcontroladores, com Arduino" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/placas-microcontrolador-arduino-texas-instruments.jpg" alt="Placas para estudo de microcontroladores, com Arduino" width="574" height="430" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/placas-microcontrolador-arduino-texas-instruments.jpg 574w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/placas-microcontrolador-arduino-texas-instruments-420x315.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/placas-microcontrolador-arduino-texas-instruments-174x131.jpg 174w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/04/placas-microcontrolador-arduino-texas-instruments-300x225.jpg 300w" sizes="auto, (max-width: 574px) 100vw, 574px" /><p id="caption-attachment-3422" class="wp-caption-text">Placas para estudo de microcontroladores.</p></div>
<h3><b>Próximos passos</b></h3>
<p>Após entender o que são microcontroladores e conhecer os tipos mais comuns, vamos aprender a utilizar kits de aprendizagem de Microcontroladores.</p>
<p>O que abordaremos na Bóson:</p>
<ul>
<li>Arduíno</li>
<li>Texas Instruments (Launchpad)</li>
<li>Microchip (PIC)</li>
<li>Intel 8051</li>
</ul>
<p>E mais alguns outros. Enquanto isso, assista a um vídeo de Introdução aos Microcontroladores:</p>
<p><iframe loading="lazy" src="https://www.youtube.com/embed/1R0VkYaYjLQ" width="640" height="480" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>&nbsp;</p>
<table style="height: 32px;" width="641">
<tbody>
<tr>
<td><iframe loading="lazy" style="width: 120px; height: 240px;" src="http://ws-na.amazon-adsystem.com/widgets/q?t=bosontreiname-20&amp;o=33&amp;p=8&amp;l=as1&amp;asins=8536502444&amp;ref=qf_sp_asin_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&amp;MarketPlace=BR&amp;ServiceVersion=20070822&amp;WS=1&amp;ID=8042_ProductLink&amp;Operation=GetProductLink&amp;" width="300" height="150" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></td>
<td><iframe loading="lazy" style="width: 120px; height: 240px;" src="http://ws-na.amazon-adsystem.com/widgets/q?t=bosontreiname-20&amp;o=33&amp;p=8&amp;l=as1&amp;asins=8571949352&amp;ref=qf_sp_asin_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&amp;MarketPlace=BR&amp;ServiceVersion=20070822&amp;WS=1&amp;ID=8042_ProductLink&amp;Operation=GetProductLink&amp;" width="300" height="150" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></td>
<td><iframe loading="lazy" style="width: 120px; height: 240px;" src="http://ws-na.amazon-adsystem.com/widgets/q?t=bosontreiname-20&amp;o=33&amp;p=8&amp;l=as1&amp;asins=8536501707&amp;ref=qf_sp_asin_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&amp;MarketPlace=BR&amp;ServiceVersion=20070822&amp;WS=1&amp;ID=8042_ProductLink&amp;Operation=GetProductLink&amp;" width="300" height="150" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></td>
<td><iframe loading="lazy" style="width: 120px; height: 240px;" src="http://ws-na.amazon-adsystem.com/widgets/q?t=bosontreiname-20&amp;o=33&amp;p=8&amp;l=as1&amp;asins=8571948712&amp;ref=qf_sp_asin_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr&amp;MarketPlace=BR&amp;ServiceVersion=20070822&amp;WS=1&amp;ID=8042_ProductLink&amp;Operation=GetProductLink&amp;" width="300" height="150" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></td>
</tr>
</tbody>
</table>
<p>O post <a href="https://www.bosontreinamentos.com.br/eletronica/eletronica-geral/introducao-aos-microcontroladores/">Introdução aos Microcontroladores</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/eletronica/eletronica-geral/introducao-aos-microcontroladores/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
