tag:blogger.com,1999:blog-87865663577000856962024-03-08T11:18:46.354-03:00Dnail.orgTecnologia, gadgets, engenharia elétrica, arquitetura, tutoriais, microcontroladores, projetos de eletrônica e outras coisas.Unknownnoreply@blogger.comBlogger18125tag:blogger.com,1999:blog-8786566357700085696.post-51652216087886053502016-09-09T01:13:00.001-03:002016-09-09T08:40:30.658-03:00Projetos - Gerando Senoides com o PIC - Parte 1Finalmente resolvi tirar essa postagem da gaveta de rascunhos e compartilhar um projeto de bancada que me foi útil na ocasião e pode também ser para outros. O Gerador de Onda Senoidal faz o que o nome diz, fornece um sinal tipo senoide modificada com resolução e frequência ajustáveis a nível de projeto. É possível também gerar outras formas de onda utilizando o mesmo conceito descrito e o Módulo de Tensão de Referência. Já falei sobre esse periférico do PIC aqui no blog quando utilizei ele em conjunto com o Comparador Analógico no projeto do <a href="http://www.dnail.org/2012/03/termometro-tipo-bargraph-com-pic.html" target="_blank">Termômetro Bargraph</a>. Agora vou mostrar como é possível gerar uma senoide ou outra forma de onda qualquer utilizando o VREF.<br />
<br />
Conceitos Básico e recursos do PIC:<br />
Muitos PICs, e outros microcontroladores em geral, possuem um módulo VREF que é um periférico bem versátil. É basicamente um conversor digital-analógico (CDA) e como tal, converte um valor binário em um nível tensão DC no pino de I/O do PIC. No caso do PIC, é possível escolher entre 26 valores distintos entre 0 e 5 Volts.<br />
<br />
A arquitetura do módulo VREF é baseada em uma associação com 16 resistores multiplexados. Um divisor de tensão controlado pelo bit <span style="font-family: "courier new" , "courier" , monospace;"><VRR></span> permite o módulo trabalhar com duas escalas (<i>ranges</i>) de tensões. Cada divisão (high e low) pode assumir 16 valores diferentes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-LNfZJXxr8fA/V1ng9m8vDUI/AAAAAAAAWZE/gJYGu4ZWVJUnQvkWaGcSd-hK6fNE5ilZACLcB/s1600/vref_diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="https://4.bp.blogspot.com/-LNfZJXxr8fA/V1ng9m8vDUI/AAAAAAAAWZE/gJYGu4ZWVJUnQvkWaGcSd-hK6fNE5ilZACLcB/s400/vref_diagram.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<i>figura 01 - Diagrama do Módulo de Tensão de Referência. </i></div>
<div class="separator" style="clear: both; text-align: center;">
<i>- retirado do datasheet do pic -</i></div>
<br />
Como se pode ver na figura, escrevendo um valor binário entre 0000 e 1111 nos bits <span style="font-family: "courier new" , "courier" , monospace;">VR0</span> a <span style="font-family: "courier new" , "courier" , monospace;">VR3</span> do registrador <span style="font-family: "courier new" , "courier" , monospace;">VCON</span>, você faz a multiplexação dos resistores que ficarão ativos e com isso, altera o valor da tensão de saída.<br />
Quando programando em C no MPLAB e com o compilador CCS, o controle é feito utilizando a função <span style="font-family: "courier new" , "courier" , monospace;">SETUP_VREF(arg1| arg2 | arg3)</span>que recebe 3 argumentos.<br />
Argumento1: <span style="font-family: "courier new" , "courier" , monospace;">VREF_HIGH</span> / <span style="font-family: "courier new" , "courier" , monospace;">VREF_LOW</span> / <span style="font-family: "courier new" , "courier" , monospace;">FALSE</span>- indica qual escala (range) deve ser usado. Alto ou baixo ou ainda se o módulo ficará desligado (false).<br />
Argumento2: <span style="font-family: "courier new" , "courier" , monospace;">VREF_A2</span> - determina onde a tensão de saída do módulo será disponível interna ou externamente. Nesse exemplo, VREF estará disponível no pino A2.<br />
Argumento3: Neste argumento deve ser passado um valor numérico de entre 0 e 15, que corresponde ao valor nos bits de controle <VR3:0>. O Efetivo valor da tensão DC é dado pelas equações mostradas abaixo.<br />
Quando na escala alta (<span style="font-family: "courier new" , "courier" , monospace;">VREF_HIGH</span>) o valor da tensão de saída é dado pela equação:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-yaDXW30omDo/V1oM-4iLbDI/AAAAAAAAWZk/MjfMjq_opnMuXxvrPIVwU8HlyJzA0dE0gCLcB/s1600/equacao_alto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="61" src="https://4.bp.blogspot.com/-yaDXW30omDo/V1oM-4iLbDI/AAAAAAAAWZk/MjfMjq_opnMuXxvrPIVwU8HlyJzA0dE0gCLcB/s400/equacao_alto.png" width="400" /></a></div>
<br />
Quando na escala baixa <span style="font-family: "courier new" , "courier" , monospace;">(</span><span style="font-family: "courier new" , "courier" , monospace;">VREF_LOW</span>), o valor da tensão é dado agora pela equação:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-oOwpqDkMYqs/V1oM-wjLNlI/AAAAAAAAWZo/n67P85ZXG7spv1jAG8_9H3gtGMuEHBYVQCKgB/s1600/equacao_baixo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="60" src="https://4.bp.blogspot.com/-oOwpqDkMYqs/V1oM-wjLNlI/AAAAAAAAWZo/n67P85ZXG7spv1jAG8_9H3gtGMuEHBYVQCKgB/s400/equacao_baixo.png" width="400" /></a></div>
<br />
Note que o módulo também utiliza VDD e VSS como alimentação e portanto, variações ou flutuações em VDD/VSS irão refletir em VREF. Com base nas equações mostradas criei uma tabela onde calculei todos os valores que VREF pode assumir para um valor de VDD igual a 5 volts. Uma outra limitação é o fato que alguns pontos dos dois <i>ranges</i> são coincidentes, e portanto, não é possível ter 32 pontos de resolução mas apenas 26.<br />
<br />
A tabela abaixo mostra todos as 32 tensões possíveis que podemos obter utilizando VDD = 5 Volts.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-OkMRJkSzooY/V1oLl_lm10I/AAAAAAAAWZY/eZ6YEwEoMzsCcd6_ik_Raq0NrHYpMNAVQCLcB/s1600/vref_tabela.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://4.bp.blogspot.com/-OkMRJkSzooY/V1oLl_lm10I/AAAAAAAAWZY/eZ6YEwEoMzsCcd6_ik_Raq0NrHYpMNAVQCLcB/s400/vref_tabela.PNG" width="387" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<i>figura 02 - Valores possíveis de VREF para ambos os ranges</i></div>
<br />
<br />
Lógica do Projeto: Uma vez que não estamos realmente gerando uma senoide pura, mas sim uma senoide modificada ou digitalizada. Configuramos VREF para fornecer a mínima tensão desejada na saída, fazemos um <i>delay</i> para que a tensão se estabilize, em seguida mudamos os argumentos da função <span style="font-family: "courier new" , "courier" , monospace;">SETUP_VREF()</span> para aumentar a tensão de saída para o próximo valor, repetimos o processo até atingimos o valor máximo desejado e então fazemos o caminho inverso, diminuindo a tensão à cada <i>delay</i>. A figura abaixo ilustra um caso particular, onde foram usados 5 patamares distintos.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-UujzisI0Nr8/V19HD5yR6VI/AAAAAAAAWdo/XgdIFzVNtBAoeQ3PZEw7PtYB5VmCEqCDwCLcB/s1600/senoide_modifi.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="306" src="https://1.bp.blogspot.com/-UujzisI0Nr8/V19HD5yR6VI/AAAAAAAAWdo/XgdIFzVNtBAoeQ3PZEw7PtYB5VmCEqCDwCLcB/s640/senoide_modifi.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">figura 03 - Senoide modificada, n=5</td></tr>
</tbody></table>
Aumentando o número de pontos, aumentamos a resolução e mais próximo vamos chegando da forma de uma senoide pura. Quanto a frequência da senoide, basta perceber que é preciso passar por todos os pontos, tanto de subida quanto de descida, no intervalo de tempo definido pelo período T=1/f. Nesse projeto eu queria obter a máxima resolução bem como e a máxima excursão da amplitude do sinal de saída e portanto os intervalos foram calculados para se obter uma senoide com frequência de 1 kHz (que era o que eu precisava na hora pra testar um outro projeto). Formas de onda diferentes e frequências maiores podem ser alcançadas, porém é preciso ficar atento às limitações do componente e principalmente com o tempo de estabilização necessário do módulo VREF.<br />
<br />
Software: Primeiro é feito a configuração dos registradores de controle do periférico em seguida, um laço garante a geração da senoide <i>ad infinitum</i>. O código abaixo foi escrito por meu colega Eng. Heitor M. Couto em 2014 na época, estudante de graduação e meu estagiário.<br />
<br />
<i>NOTA: Conforme o datasheet, quando configurado no modo de tensão de referência, o pino RA2 trabalha como uma saída de alta impedância. Antes de usa-lo é preciso configurá-lo como ENTRADA e conectar ao pino apenas cargas de alta impedância ligada ao pino. </i><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">void main() </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">{ </span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> SET_TRIS_A(0b00000100); //pino RA2 como ENTRADA!!!</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_comparator(NC_NC_NC_NC);//desabilita o módulo comparador</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;"> for(;;)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> {</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> senoide();</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> }</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">}</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">void senoide(void)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">{ </span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 9);//1,87</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(245);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 5);//2,03</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(82);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 10);//2,08</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(165);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 6);//2,18</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(167);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 11);//2,29</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(84);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 7);//2,34</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(257);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 12);//2,5</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(267);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 9);//2,656</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(92);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 13);//2,708</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(190);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 10);//2,81</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(199);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 14);//2,916</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(104);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 11);//2,96</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(333);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 15);//3,125</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(385);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 13);//3,28</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(489);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 14);//3,437</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(1149);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 15);//3,59</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(1149);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> //até aqui é 90°</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 14);//3,437</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(489);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 13);//3,28</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(385);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_low | VREF_A2 | 15);//3,125</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(333);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 11);//2,96</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(104);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 14);//2,916</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(199);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 10);//2,81</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(190);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 13);//2,708</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(92);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 9);//2,656</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(267);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 12);//2,5</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(257);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 7);//2,34</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(84);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 11);//2,29</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(167);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 |6);//2,18</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(165);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 10);//2,08</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(82);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 |5);//2,03</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(245);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> //ATÉ AQUI 180°</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> </span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 9);//1,87</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(245);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 3);//1,718</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(82);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 8);//1,667</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(166);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 |2);//1,5625</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(168);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 7);//1,4583</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(85);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 1);//1,4063</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(260);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 6);//1,25</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(365);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 5);//1,0417</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(398);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 4);//0,8333</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(455);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 3);//0,625</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(572);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 2);//,04167</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(1330);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 1);//0,2083</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(1330);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> //Até aqui 270°</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> </span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 2);//,04167</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(572);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 3);//0,625</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(455);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 4);//0,8333</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(398);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 5);//1,0417</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(365);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 6);//1,25</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(260);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 1);//1,4063</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(85);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 7);//1,4583</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(168);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 |2);//1,5625</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(166);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_LOW | VREF_A2 | 8);//1,667</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(82);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> setup_vref(VREF_HIGH | VREF_A2 | 3);//1,718</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> delay_us(245);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> //Até aqui 360°</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">}</span><br />
<br />
Hardware: A saída do módulo é feita no pino RA2/AN2, no caso do 16F628A corresponde ao pino 1 do CI. É preciso lembrar que o PIC não tem capacidade de corrente suficiente para a maioria das aplicações e portanto é preciso utilizar um <i>driver</i> ou <i>buffer</i> na saída para alimentar a sua carga. Se você não precisa de muita corrente, um simples transistor tipo BC ou BD com a base ligada através de um resistor de alto valor ao pino RA2 deve ser suficiente. Se o seu projeto necessita de mais corrente é mandatório o uso de mais estágios de amplificação filtros que podem melhorar a forma de onda, reduzindo as componentes harmônicas de alta frequência que sempre estão presentes quando se faz chaveamentos desse tipo.<br />
<br />
A senoide gerada possui um nível DC incorporado, já que só podemos excursionar o sinal gerado pelo PIC entre 0V e 5V. Isso pode ser contornado utilizando fontes simétricas no circuito de amplificação.<br />
<i><br /></i>
Utilização: Para utilizar o circuito basta compilar o código, gravar no chip, uma vez alimentado, o circuito já começa a funcionar e fica gerando o sinal eternamente. Para melhorar esse projeto O primeiro refinamento é incluir uma interface com LCD e pelo menos dois botões para visualizar e fazer a seleção da frequência de forma mais simples e não ter que ficar recompilando toda vez que precisar fazer alguma mudança. Isso vai exigir uma abordagem diferente também no código. As constantes usadas na rotina <span style="font-family: "courier new" , "courier" , monospace;">delay_us()</span>são transformadas em variáveis calculadas em uma rotina à parte que irá receber os argumentos via interface.<br />
<br />
Quando chegar nesse ponto, já fica ridiculamente fácil incluir também outras formas de onda e construir um pequeno gerador de funções.<br />
<br />
Na parte 2, vou mostrar as imagens obtidas com o código acima no osciloscópio e a análise no domínio da frequência da senoide gerada. Gostou, não gostou, achou um erro no projeto? deixe um comentário.Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-8786566357700085696.post-32619382734312826772015-06-12T17:45:00.003-03:002015-06-12T17:45:50.256-03:00Carro movido a água - A falácia<div style="text-align: justify;">
Resolvi escrever esse post depois de ver inúmeros vídeos circulando pela internet, primeiro de "inventores populares" oferecendo a oportunidade de rodar milhares de quilômetros com o seu automóvel utilizando apenas 1 litro de água. Logo esses videos caseiros viraram matéria de jornais, daqueles bem ruizinhos mesmo, pois como vou mostrar é fácil desmascarar esse charlatanismo. Por fim, já tem gente oferecendo comercialmente os kits de conversão de fácil instalação no seu automóvel.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
ÁGUA OU HIDROGÊNIO - O MILAGRE DA HIDRÓLISE - OU AQUELA EXPERIÊNCIA QUE VOCÊ FEZ NA QUINTA-SÉRIE.</div>
<div style="text-align: justify;">
Existe uma pequena confusão sobre o tal carro movido a água que algumas pessoas não se dão conta. Apesar de ser abastecido com água, o combustível no caso é o gás Hidrogênio H2, formado por duas moléculas do átomo de Hidrogênio. O gás é obtido fazendo a eletrólise da água, processo no qual ao passar uma corrente elétrica por uma solução aquosa, quebramos a molécula de água em seus componentes básicos Hidrogênio e Oxigênio. É exatamente como aquelas experiências que você fazia na quinta série, utilizando alguns fios, algumas pilhas, tubos de ensaio, água e sal. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A FALÁCIA.</div>
<div style="text-align: justify;">
Para desmascarar de uma vez por todas essa falácia, vou usar como base um vídeo no youtube. Observe nos comentários do vídeo que realmente existem pessoas que acreditam que o feito do cidadão é possível e que quem não acredita ou argumenta contra é considerado "limitado" por achar que as leis da física não podem ser mudadas, blá, blá, blá. Ou ainda aqueles que dizem que essa tecnologia é antiga e todos que de certa forma a reinventam são mortos... conspiração.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/_6kQIDbK-JY/0.jpg" src="https://www.youtube.com/embed/_6kQIDbK-JY?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Voltando ao vídeo. Perceba que é dito que:</div>
<div style="text-align: justify;">
O carro rodou 1.000 km com 1,5 litros de água destilada.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Agora, para efeitos de simplificação das contas, vou assumir que:</div>
<div style="text-align: justify;">
1) O Hidrogênio foi obtido DE GRAÇA, nenhum custo financeiro ou energético foi necessário para a sua obtenção.</div>
<div style="text-align: justify;">
2) O veículo usado como base será o mesmo do vídeo, que eu identifiquei como sendo um Chery S-18.</div>
<div style="text-align: justify;">
3) Não existe atrito, desgaste, forças resistivas ou outras que possam roubar potência, ou seja, toda energia da queima dos combustíveis citados será aproveitada para o MOVIMENTO do veículo e que o gasto de energia para deslocar o veículo é o mesmo independente do combustível utilizado (o que parece bem obvio).</div>
<div>
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
O primeiro ponto que eu vou mostrar é que o rendimento do hidrogênio não é assim tão incrível a ponto de 1 litro de água ser capaz de mover um veículo por uma distância tão grande. Vou mostrar ainda que não é preciso ser um gênio para resolver esse problema, todas os cálculos são resolvidos com regra-de-três.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A QUÍMICA DO PROCESSO.</div>
<div style="text-align: justify;">
Não confundir átomos com moléculas. O gás queimado é o gás hidrogênio (H2) que é uma molécula formada por DOIS átomos de hidrogênio.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Uma molécula de água, a famosa H2O tem 1 átomo de oxigênio e 2 átomos de hidrogênio. </div>
<div style="text-align: justify;">
Como a densidade de água é de 1:1 sabemos que 1 litro de água pesa exatamente 1 kg, mas a maior parte da massa que compõe a água se deve ao Oxigênio. Para achar quantas gramas de hidrogênio é possível extrair de um litro de água precisamos fazer algumas contas.</div>
<div style="text-align: justify;">
Se você não se lembra do segundo grau, pode consultar o São Google e confirmar que:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
1 mol de água pesa 18 gramas (16 g de Oxigênio e 2 g de Hidrogênio)</div>
<div style="text-align: justify;">
em 1 litro (1000 gramas) de água teremos 62,5 mols de moléculas o que dá também 62,5 mols de hidrogênio (gás).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
O hidrogênio tem massa molecular de 2,02 gramas/mol, logo em 1000 litro de água é possível extrair 125 gramas de H2.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Outro dado tabelado é a energia calorífica do H2 que é de 120.10^6 Joules/kg.</div>
<div style="text-align: justify;">
Logo no nosso litro de água, se queimarmos todo o H2 disponível, será possível extrair 15.10^6 Joules. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Legal, então sabemos agora que em 1 litro de água, podemos extrair no máximo 15.10^6 J de energia (isso sem levar em consideração que foi necessário gastar energia para extrair o hidrogênio da água). Mas será essa quantidade suficiente para mover um carro popular por 1.000 km? para responder essa pergunta e mostrar que tudo é uma farsa, vamos ver alguns dados da gasolina e do veículo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A GASOLINA</div>
<div style="text-align: justify;">
A gasolina tem densidade de 0,73g/L ou seja, 1 litro de gasolina pesam 730 gramas.</div>
<div style="text-align: justify;">
Outro dado (tabelado) é a energia calorífica da gasolina que é de 42,5.10^6 J/kg.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Considerando os dados que obtive do Chery S-18, o mais otimista de todos foi o que considerava o consumo do automóvel como sendo de 15,1 km/L de gasolina na estrada.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Com o consumo médio de 15,1 km/L para rodar os 1.000 km seriam necessários 66,22 litros de gasolina. E esse volume de gasolina corresponde a 48,33 kg do combustível (regra de três com a densidade).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Então se 1 kg de gasolina fornecem 42,5 .10^6 J , os 48,33 kg necessários para percorrer os 1.000 km fornecem 2.054,03 .10^6 Joules.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ou seja, fazendo todas as simplificações possíveis, seria necessário 2.054 .10^6 Joules para mover o carro por 1.000 km, que é uma quantidade de energia bem maior (136 vezes maior) que a fornecida pela queima do hidrogênio presente em 1 litro de água, que como vimos, é de apenas 15 .10^6 Joules.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Além disso, a simplificação 1) diz que não gastamos nada para obter o hidrogênio é a que mais pesa, uma vez que para se extrair o hidrogênio de água, vamos gastar a mesma quantidade de energia que ele vai devolver em sua queima (novamente, desprezando todo tipo de perda, resistência ou atrito.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
OUTROS CASOS:</div>
<div style="text-align: justify;">
Se você procurar mais, vai ficar ainda com mais raiva vendo que a quantidade de pessoas que tem propagando essas mentiras. Nesse outro, ainda mais mentiroso, eles vão além e dizem que o carro rodou 2.000 km com menos de 1 litro de água. Não sendo o bastante, ainda chamaram uns calouros de engenharia elétrica, pra corroborar a mentira. É tanta desinformação que reparem o que a repórter fala à partir dos 2:25 min do vídeo.... "...em apenas uma molécula de H2O são várias partículas partículas do gás que se transformam em combustível". Nota-se total desconhecimento de química básica, confundindo termos como partículas (átomos) e moléculas. Como vimos, cada molécula de H20 fornece uma (e não várias) moléculas de H2 que é o combustível.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/hoNQTlnncpI/0.jpg" src="https://www.youtube.com/embed/hoNQTlnncpI?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Conclusão. Não compre kit de conversão seja chines, americano ou brasileiro. Não acredite em quem disse que teve resultado. Não compartilhe tudo que você lê ou escuta sem antes fazer o mínimo de verificação, jornalistas dificilmente sabem algo (principalmente ciência) com o mínimo de profundidade necessária, então como se pode ver pelos vídeos, é muito fácil enganá-los e convence-los a fazer propaganda gratuita de algo que beira o estelionato. Lembre-se a burrice se propaga com uma velocidade muito maior que a sabedoria.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Fontes:</div>
<div style="text-align: justify;">
http://www.carrosnaweb.com.br/fichadetalhe.asp?codigo=1213</div>
<div style="text-align: justify;">
http://www.antoniolima.web.br.com/arquivos/podercalorifico.htm</div>
<div style="text-align: justify;">
<br /></div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-8786566357700085696.post-87509805523099045802015-01-09T17:48:00.001-02:002015-01-09T23:18:04.768-02:00Frequencímetro microprocessado com PIC<br />
<div style="text-align: justify;">
[REVISADO]<br />
Mais um projeto envolvendo microcontroladores PIC. Ele que já foi montado e testado no proto-board mas infelizmente não tive tempo de montar a placa final. A princípio é um circuito muito simples exigindo o mínimo de componentes externos além do microprocessador graças aos recursos do PIC, mais especificamente, do módulo do Timer 1 (TMR1) ativando os recursos de incremento externo e modo assíncrono. O circuito apresentado é capaz de medir frequências entre 10 Hz e 50 MHz, mesmo com o PIC trabalhando com o <i>Clock</i> de 4 MHz.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-wLvlmbUmZxE/VLAPMNkdWMI/AAAAAAAAKjQ/5QCb_KVngj4/s1600/Esquema01.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://1.bp.blogspot.com/-wLvlmbUmZxE/VLAPMNkdWMI/AAAAAAAAKjQ/5QCb_KVngj4/s1600/Esquema01.jpg" height="256" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Esquema Frequencímetro com PIC 16F628A e LCD</i></td></tr>
</tbody></table>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A medida do sinal é feita quase que diretamente no pino do processador e o resultado é exibido em um display de LCD 16X2 com resolução de 5 dígitos. É possível modificar o programa para se ter uma resolução maior e/ou o circuito para exibir o resultado em <i>diplays</i> de 7 segmentos, porém, dependendo da quantidade de dígitos que o projetista deseja exibir, pode ser necessário a adição de um CI decodificador (BCD-7seg) ou de um PIC com maior número de pinos para fazer a multiplexação dos <i>displays</i>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Lógica de Funcionamento:</b></div>
<div style="text-align: justify;">
O funcionamento do frequencímetro é baseado em "janelas de amostragem", que são intervalos de tempo muito pequenos (na casa dos milissegundos) onde é feito a contagem dos pulsos. Em seguida extrapola-se o valor dessa contagem para o tempo de 1 segundo. Ou seja, não contamos todos os pulsos que chegam durante um segundo inteiro.</div>
<div style="text-align: justify;">
Para cada faixa de frequência que se deseja medir, devemos escolher o tempo de amostragem adequado. Para frequências maiores (ordem de MHz), deve usar intervalos menores, já medições em faixas de frequências menores (ordem de kHz) deve-se utilizar intervalos de amostragem maiores.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
É possível fazer no programa, um sistema de "<i>auto-range</i>", onde programa determina a faixa de frequência de acordo com o sinal na entrada. Isso é obtido fazendo a amostragem dos pulsos começando pela escala mais baixa (intervalo de amostragem maior), caso a contagem estoure, o resultado é desprezado e é feita uma nova amostragem na escala seguinte (intervalo de amostragem menor) até que a contagem dos pulsos no sinal de entrada não estoure durante a amostragem.</div>
<div style="text-align: justify;">
Dividir o intervalo de medição em faixas pode ser útil para uma exibição melhor do resultado, principalmente quando se usa poucos dígitos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Exemplo:</div>
<div style="text-align: justify;">
O primeiro <i>range</i> (faixa ou intervalo de medição) corresponde a um janelamento de 1 segundo <span style="font-family: inherit;">(</span><span style="font-family: Courier New, Courier, monospace;">JANELA=1000 ms</span>). Logo vamos contar quantos pulsos recebemos do sinal de entrada durante um segundo. Caso a contagem do TMR1 estoure (ultrapasse 65535) significa que o sinal possui uma frequência maior que 65 kHz e neste caso o programa muda a janela para 500 ms e faz uma nova amostragem, se durante essa nova amostragem a contagem estourar novamente, significa que o sinal de entrada possui uma frequência maior que 131 kHz e deve-se utilizar um intervalo de amostragem menor ainda. O programa trabalha nesse <i>loop</i>, reduzindo o tempo de amostragem até que a contagem do TMR1 não exceda 65535, quando isso acontecer, basta fazer a conta de extrapolação dos pulsos e exibir o resultado.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>O Hardware:</b></div>
<div style="text-align: justify;">
O sinal de entrada é ligado ao pino de incremento externo do TMR1, para testes de bancada é possível ligar diretamente a entrada ao pino através de um resistor limitador, na prática é necessário utilizar algum circuito para adequar o sinal da entrada (amplitude, impedância de saída) a níveis seguros para o PIC. Existem diversos projetos na internet de circuitos de condicionamento de sinal e proteção. O projetista deve selecionar o circuito para cada caso, lembrando que: A amplitude máxima do sinal suportável pelo processador é de 5 V. Aconselho o uso de acoplamento óptico para evitar interferências e isolar eletricamente o sinal de entrada do processador.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>O software:</b></div>
<div style="text-align: justify;">
O firmware foi escrito em C. Utilizando o compilador CCS e o MPLAB.</div>
<div style="text-align: justify;">
As funções são bem simples, segue abaixo uma breve explicação de delas.</div>
<br />
<span style="font-family: Courier New, Courier, monospace;"><b>Função de amostragem</b> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;">int16 amostragem(int16 janela)</span><br />
<span style="font-family: Courier New, Courier, monospace;">{<span class="Apple-tab-span" style="white-space: pre;"> </span>int16 TEMP=0; //inicializa variavel TEMP</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>output_low(RB7); </span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>SET_TRIS_B(0b11000000); //inicia o janelamento por //hardware.</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>set_timer1(0);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>delay_ms(janela); //Aguarda por X milissegundos //enquanto o TMR1 recebe a //contagem.</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>TEMP=get_timer1(); //Captura o valor da contagem na //variável no TMR1 e passa para a //</span><span style="font-family: 'Courier New', Courier, monospace;">variável </span><span style="font-family: 'Courier New', Courier, monospace;">TEMP.</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>output_low(RB7); //encerra o janelamento por //hardware.</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>SET_TRIS_B(0b01000000);<span class="Apple-tab-span" style="white-space: pre;"> </span></span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>return TEMP; //Repassa o valor da contagem</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<div style="text-align: justify;">
O "janelamento por hardware" é opcional e é feito ligando se o pino RB7 juntamente com a entrada do sinal. Quando não estamos amostrando o sinal de entrada, o pino RB7 força a entrada do sinal para nível baixo, quando queremos fazer a contagem colocamos o pino RB7 como entrada (alta impedância) e com isso o TMR1 só é incrementado dentro desta rotina. </div>
<br />
<span style="font-family: Courier New, Courier, monospace;"><b><br /></b></span>
<span style="font-family: Courier New, Courier, monospace;"><b>Função BINÁRIO-BCD</b></span><br />
<span style="font-family: 'Courier New', Courier, monospace;">//CONVERTE UM VALOR BINÁRIO PURO DE UMA VARIÁVEL</span><br />
<span style="font-family: Courier New, Courier, monospace;">//EM 4 DÍGITOS BCD</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">void binario_BCD(int16 TEMP)</span><span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"> </span><span style="font-family: 'Courier New', Courier, monospace;">// formato 012.34 </span><br />
<span style="font-family: Courier New, Courier, monospace;">{<span class="Apple-tab-span" style="white-space: pre;"> </span>digits[0]=((TEMP/10000))+0X30; //soma 30H para a</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>digits[1]=((TEMP/1000)%10)+0X30; //adequar a ROM do LCD</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>digits[2]=((TEMP/100)%10)+0X30; // 30H = 0, 31H= 1,...</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>digits[3]=((TEMP/10)%10)+0X30;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>digits[4]=((TEMP)%10)+0x30;<span class="Apple-tab-span" style="white-space: pre;"> </span>//</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<div style="text-align: justify;">
No caso de se trabalhar com display de LCD, pode-se passar o valor diretamente em binário e a rotina se encarrega de fazer a conversão, devendo o programador apenas ajustar a vírgula (parte decimal), eu prefiro transformar tudo em caractere para se manter a compatibilidade em caso de uso de <i>displays</i> de 7-segmentos.</div>
<br />
<span style="font-family: Courier New, Courier, monospace;"><b>Rotina de Interrupção por estouro de contagem do TIMER1</b></span><br />
<span style="font-family: Courier New, Courier, monospace;">#INT_TIMER1<span class="Apple-tab-span" style="white-space: pre;"> </span>//interrupção do timer1</span><br />
<span style="font-family: Courier New, Courier, monospace;">void inter_timer1(void)</span><br />
<span style="font-family: Courier New, Courier, monospace;">{<span class="Apple-tab-span" style="white-space: pre;"> </span>FAIXA++;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if(FAIXA>7){FAIXA=0;}</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<span style="font-family: inherit; text-align: justify;">A rotina acima ocorre sempre que o valor da contagem dos pulsos do sinal de entrada excede 65.535. Neste caso, a variável </span><span style="font-family: Courier New, Courier, monospace; text-align: justify;">FAIXA</span><span style="font-family: inherit; text-align: justify;"> é incrementada, o que altera o janelamento para um valor menor em outra parte do programa com é visto abaixo. </span><br />
<span style="font-family: inherit; text-align: justify;"><br /></span>
<span style="font-family: inherit; text-align: justify;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">void main()</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">{</span><span style="font-family: 'Courier New', Courier, monospace;">setup_oscillator(OSC_4MHZ); //pic16f628A possui cristal interno</span><br />
<span style="font-family: Courier New, Courier, monospace;">SETUP_COMPARATOR(NC_NC_NC_NC); //comparadores desligados</span><br />
<span style="font-family: Courier New, Courier, monospace;">SETUP_VREF(FALSE); //tensão de referência desligada</span><br />
<span style="font-family: Courier New, Courier, monospace;">SETUP_TIMER_2(T2_DISABLED,0,1); //TMR2 desabilitado</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">SET_TRIS_A(0b00000000);</span><br />
<span style="font-family: Courier New, Courier, monospace;">SET_TRIS_B(0b01000000);</span><br />
<span style="font-family: Courier New, Courier, monospace;">lcd_init(); //invoca rotina de inicialização LCD</span><br />
<span style="font-family: Courier New, Courier, monospace;">lcd_gotoxy(1,1);</span><br />
<span style="font-family: Courier New, Courier, monospace;">ENABLE_INTERRUPTS(INT_TIMER1); //habilita interrupção TMR1</span><br />
<span style="font-family: Courier New, Courier, monospace;">ENABLE_INTERRUPTS(GLOBAL); //chave geral das interupções</span><br />
<span style="font-family: Courier New, Courier, monospace;">FAIXA = 0; //carrega com valor incial</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">SETUP_TIMER_1(T1_EXTERNAL|T1_DIV_BY_1); //configura TMR1</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: 'Courier New', Courier, monospace;">while(true)</span><br />
<span style="font-family: Courier New, Courier, monospace;">{<span class="Apple-tab-span" style="white-space: pre;"> </span>delay_ms(1000);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>switch (FAIXA)</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>{case 0:{JANELA=500; </span><span style="font-family: 'Courier New', Courier, monospace;"> </span><span style="font-family: 'Courier New', Courier, monospace;"> //tempo de amostragem 500 ms</span><span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"> </span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> FREQUENCIA=amostragem(JANELA);<span class="Apple-tab-span" style="white-space: pre;"> </span></span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> if(FREQUENCIA==0){FAIXA=7; break;}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> if(FREQUENCIA<30000)</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> {<span class="Apple-tab-span" style="white-space: pre;"> </span>binario_BCD(FREQUENCIA*2);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>imprime_LCD();</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>faixa_0();<span class="Apple-tab-span" style="white-space: pre;"> </span>// 655,35 hz = 655,35 kHz</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>break;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>else</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>{FAIXA=1;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>JANELA=250;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>break;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>break;}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>case 1:{JANELA=250; //tempo de amostragem 250 ms</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>FREQUENCIA=amostragem(JANELA);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if(FREQUENCIA==0){FAIXA=7; break;}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>if(FREQUENCIA<15000)</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>{<span class="Apple-tab-span" style="white-space: pre;"> </span>binario_BCD(FREQUENCIA*4);</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>imprime_LCD();</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>faixa_0();</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>break;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>else</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>{<span class="Apple-tab-span" style="white-space: pre;"> </span>FAIXA=2;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>JANELA=200;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>break;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>break;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span style="font-family: Courier New, Courier, monospace;">...</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;">A rotina acima, que não está completa, é o </span><i style="text-align: justify;">loop</i><span style="text-align: justify;"> principal no qual o programa fica rodando, ela é chamada na função </span><span style="font-family: Courier New, Courier, monospace; text-align: justify;">main </span><span style="font-family: inherit; text-align: justify;">após as instruções de inicialização do PIC. O caso zero, corresponde à faixa de medida mais baixa (variável </span><span style="font-family: Courier New, Courier, monospace; text-align: justify;">FAIXA=0</span><span style="font-family: inherit; text-align: justify;">) que corresponde a um janelamento de 500 ms. Se a contagem for menor que 30.000 pulsos, o valor a ser exibido é simplesmente o número de pulsos multiplicado por 2. Se a contagem for maior que 30.000 pulsos, a contagem é desprezada, a variável faixa é incrementada e na próxima passagem pela função o programa irá pular para o caso 1 que utiliza uma janela de 250 ms e assim por diante. </span><br />
<span style="font-family: inherit; text-align: justify;"><br /></span>
<span style="font-family: inherit; text-align: justify;">As rotinas abaixo fazem a exibição do resultado no LCD, nas três situações possíveis. Não confundir com a variável </span><span style="font-family: Courier New, Courier, monospace; text-align: justify;">FAIXA</span><span style="font-family: inherit; text-align: justify;"> (falta criatividade as vezes pra nomear variáveis e rotinas).</span><br />
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">void faixa_0(void)</span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">{ printf(lcd_putc,"%c%c.%c%c%c.%c%c%c Hz",digits[0],digits[1],digits[2],digits[3],digits[4]);</span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">}</span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">void faixa_2(void)</span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">{<span class="Apple-tab-span" style="white-space: pre;"> </span>printf(lcd_putc,"ERRO: f > 60MHZ",);</span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">}</span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">void faixa_1(void)</span></div>
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">{<span class="Apple-tab-span" style="white-space: pre;"> </span>printf(lcd_putc,"ERRO: sem sinal",);</span></div>
<span style="font-family: Courier New, Courier, monospace; text-align: justify;"></span><br />
<div style="text-align: left;">
<span style="font-family: Courier New, Courier, monospace;">}</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Os arquivos para o projeto podem ser obtidos no link abaixo.</div>
<div style="text-align: justify;">
<a href="https://drive.google.com/file/d/0B75-w3b4wDQwZDRrbmtzUk9jclU/view?usp=sharing" target="_blank">Arquivos Fonte</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Considerações: </div>
<div style="text-align: justify;">
1) Lembrar de setar o TMR1 para trabalhar com incrementos externos, modo assíncrono e sem <i>prescaler</i>. É possível medir frequências até 50 MHz com esse circuito sem muitos problemas. </div>
<div style="text-align: justify;">
2)Para testar o frequencímetro pode-se montar um circuito oscilador composto de um CI 555, um capacitor e um potenciômetro ou trimpot. Se você tiver um cristal e algumas portas lógicas é possível montar um oscilador para a frequência nominal do cristal. </div>
<div style="text-align: justify;">
3) Em muitos casos o circuito de entrada precisa amplificar o sinal que queremos, pois o mesmo pode estar em uma amplitude muito baixa e o PIC não irá conseguir fazer a contagem dos pulsos, Em outros casos, o sinal de entrada precisará ser atenuado (se o intuito for, por exemplo, medir a frequência da rede elétrica), Fica a cargo do projetista escolher e projetar seu próprio circuito de entrada. </div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-mhJKGpYadag/VLAo4PosBGI/AAAAAAAAKjg/hpRaFhtrqj0/s1600/teste_frequencimetro_555.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://3.bp.blogspot.com/-mhJKGpYadag/VLAo4PosBGI/AAAAAAAAKjg/hpRaFhtrqj0/s1600/teste_frequencimetro_555.jpg" height="285" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><i>Circuito para teste do frequencímetro</i></td></tr>
</tbody></table>
<span style="font-family: inherit;"><br /></span>
4) É possível transformar o frequencímetro em um capacímetro ou em um indutímetro com pouquíssimas modificações.<br />
<span style="font-family: inherit;">Se tiver alguma dúvida ou sugestão sobre o projeto deixe um comentário que você será respondido.</span><br />
<span style="font-family: inherit;">5) Senha do arquivo: dnail.org</span>
<span style="font-family: inherit;"><br /></span>Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-8786566357700085696.post-42741058962238575762014-11-26T12:50:00.001-02:002014-11-26T12:50:43.404-02:00Back to live IIIMais de um ano desde a última postagem.... Mais um pouco e esse blog pode mudar o nome para "Apenas uma Postagem por Ano". Desde a última atualização muita coisa aconteceu na minha vida (o principal acontecimento foi o nascimento da minha filha) e espero que boas mudanças ainda possam ocorrer em 2014.<br />
<br />
Em breve, pretendo reformular o blog, deve ser algo que vai acontecer de forma gradual, quero deixar ele mais atual com as propostas que tenho em mente e com os projetos que venho desenvolvendo ao longo do tempo. Introduzir novas seções, novos enfoques. Há muita coisa rascunhada, muitos projetos usando <i>PIC</i>, dicas de montagem, tudo esperando um folga pra ser revisada e postada. Uma das novas seções que serão apresentadas no blog serão matérias referente a <i>crowdfunding</i> ou financiamento coletivo (a popular vaquinha), onde pretendo fazer algumas apresentações breves das plataformas disponíveis (para os neófitos) bem como apresentação de projetos envolvendo tecnologia e design que estejam em campanha. Não obstante, pretendo fazer alguns reviews de "recompensas" obtidas de financiamentos que tenho feito frequentemente no <i>Kickstarter. </i><br />
<br />
P.S.: Ainda não consegui terminar a impressora 3D que comecei a montar no ano passado, todas as peças foram adquiridas, mas como sempre, falta tempo pra montar tudo.<br />
<br />
Até a próxima atualização. Enquanto isso abaixo uma motivação para se manter focado. (espero que a imagem não tenha copyright)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-w7z8M7m5bXg/VHXnVkZEngI/AAAAAAAAKiQ/qVLRVnM5qUQ/s1600/Uqnkadk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-w7z8M7m5bXg/VHXnVkZEngI/AAAAAAAAKiQ/qVLRVnM5qUQ/s1600/Uqnkadk.png" height="320" width="319" /></a></div>
<br />
<br />
<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-48953247885024202342013-08-16T13:37:00.000-03:002013-08-16T13:37:27.466-03:00Residência Antônio Teófilo de Andrade Orth<div style="text-align: justify;">
Devido a quantidade de acessos na postagem da <a href="http://www.dnail.org/2012/03/residencia-james-king.html" target="_blank">Residência James King</a>, resolvi colocar mais uma modelagem do Sketch-Up. É mais uma das residências mostradas no livro <a href="http://docomomobsb.files.wordpress.com/2011/11/acayaba_residc3aancias_capa.jpg" target="_blank">Residências de São Paulo: 1947 a 1975</a>. Hoje é a vez da Residência Antônio Teófilo de Andrade Orth, do Arquiteto <a href="http://www.deciotozzi.com.br/" target="_blank">Décio Tozzi</a>. No site do profissional existe um portfólio onde é possível admirar diversas imagens dessa belíssima residência, vale muito a pena conferir. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
No fim da postagem existe o link para o arquivo .rar contendo os seguintes documentos:</div>
<div style="text-align: justify;">
-Arquivo de modelagem no sketch-up</div>
<div style="text-align: justify;">
-Plantas baixa e corte em formato .dwg</div>
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-nHosadwkwl4/UgwNQTJYkCI/AAAAAAAAHVA/pHRfvViHfAc/s1600/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+esquerda.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="127" src="http://2.bp.blogspot.com/-nHosadwkwl4/UgwNQTJYkCI/AAAAAAAAHVA/pHRfvViHfAc/s320/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+esquerda.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Vista Frontal</td></tr>
</tbody></table>
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-2H631tDbsqk/UgwNOMqufYI/AAAAAAAAHU4/lcRcFITkxos/s1600/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+direita.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="127" src="http://4.bp.blogspot.com/-2H631tDbsqk/UgwNOMqufYI/AAAAAAAAHU4/lcRcFITkxos/s320/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+direita.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Vista Posterior</td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-vsneHk0ZpkE/UgwNmx2xQHI/AAAAAAAAHVQ/nLvTsLRtkqQ/s1600/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+topo.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="127" src="http://3.bp.blogspot.com/-vsneHk0ZpkE/UgwNmx2xQHI/AAAAAAAAHVQ/nLvTsLRtkqQ/s320/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+topo.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Vista Superior</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-oShmJEhkfw0/UgwN3B25KTI/AAAAAAAAHVY/p_wQvMYL604/s1600/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+iso.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="127" src="http://2.bp.blogspot.com/-oShmJEhkfw0/UgwN3B25KTI/AAAAAAAAHVY/p_wQvMYL604/s320/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+iso.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Perspectiva</td></tr>
</tbody></table>
</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-CQ-x3kj45Mc/UgwNRk0DMXI/AAAAAAAAHVI/rnWASo8Mqdg/s1600/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+iso2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="127" src="http://3.bp.blogspot.com/-CQ-x3kj45Mc/UgwNRk0DMXI/AAAAAAAAHVI/rnWASo8Mqdg/s320/Resid%C3%AAncia+Ant%C3%B4nio+Te%C3%B3filo+-+iso2.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Outra Perspectiva</td></tr>
</tbody></table>
<br />
Como engenheiro, não me acho na competência de ficar julgando obras de arte, me contento em aprecia-las, no entanto, é fácil perceber a semelhança entre as residências A.T.A.O e J.K. pelo uso predominante do concreto aparente. Nada mais comum, uma vez que ambos os projetistas são contemporâneos e, ao lado de Niemeyer, representantes da arquitetura moderna brasileira.<br />
<br />
<br />
Download dos arquivos:<br />
<a href="http://www.4shared.com/rar/M16C8HCM/Residncia_Antonio_Tefilo.html">http://www.4shared.com/rar/M16C8HCM/Residncia_Antonio_Tefilo.html</a><br />
<span style="text-align: justify;">Os créditos da modelagem são da minha amiga Engenheira Eletricista Márcia Senna.</span><br />
<br />
<br />Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-8786566357700085696.post-77634321680948866272013-08-14T21:13:00.000-03:002013-08-14T21:13:11.882-03:00Back to live... parte IIÉ isso ai, mais de um ano sem nenhuma postagem. Ideias e projetos não faltam... falta é tempo de colocar tudo <strike>no papel</strike> na tela. Vou tirar a noite pra consertar os links onde estavam hospedados os arquivos (minha conta no 4shared foi cancelada por inatividade, eles tentaram me alertar em Fevereiro mas só agora vi o e-mail) e tentar voltar as postagens regulares, se é que elas um dia existiram.<br />
<br />
Pra começar, vou publicar a maior parte dos rascunhos que estavam no servidor, são vários projetos com PIC que já estavam praticamente prontos pra publicar, mas a minha preocupação excessiva com os detalhes não deixavam os posts irem para o ar.<br />
<br />
Vou também começar uma nova série de publicações sobre a minha experiência com uma impressora 3D. Resolvi que já tinha passado da hora de montar uma dessas pra facilitar na prototipagem de peças na minha empresa. Nos próximos meses irei, aos poucos, adquirindo as peças e pretendo compartilhar essa experiência.<br />
<br />
Boa noite.<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-36704457322947880182012-03-25T23:44:00.001-03:002016-06-06T22:16:00.601-03:00Termômetro tipo Bargraph com PICEste é mais um pequeno projeto utilizando PIC. Trata-se de um termômetro, na verdade um indicador de temperatura, por faixas, através de um arranjo de LEDs, tipo <i>Bargraph.</i> Este circuito pode ser útil para se medir variações de temperatura, e evitar sobreaquecimento ou congelamento de equipamentos, motores, ambientes, etc. Na verdade, este projeto é bem flexível, os leitores podem e devem altera-lo conforme as suas necessidades. A base do circuito é o PIC 16F268A, mas pode ser implementado em qualquer microcontrolador da família 16F que possua os módulos de tensão de referência e comparador analógico.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-Q4xrCtspsQo/T2_KIzt6-zI/AAAAAAAAFgo/2QFiF2mP3Q8/s1600/esquema.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://2.bp.blogspot.com/-Q4xrCtspsQo/T2_KIzt6-zI/AAAAAAAAFgo/2QFiF2mP3Q8/s320/esquema.png" width="320" /></a></div>
<br />
A sonda utilizada é do tipo NTC, mas qualquer outro tipo de transdutor de temperatura (PTC, PT100, LM35X, termopar, ...) pode ser utilizado com pequenas alterações no código fonte.<br />
<b><br /></b>
<b>Funcionamento: </b>Basicamente o programa compara a tensão nos terminais do sensor (Vin-) com uma tensão gerada pelo módulo de referencia de tensão (Vref) do PIC, que pode gerar até 32 tensões distintas. O comparador analógico produz a saída: setando ou limpando o bit C2OUT, sendo assim, C2OUT=1 quando Vref >Vin- , ou C2OUT=0 quando Vref < Vin-.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-5ODzdMq7LS8/T2-8k_YtTwI/AAAAAAAAFgY/HTYUlWR5yV4/s1600/comparador.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="186" src="https://1.bp.blogspot.com/-5ODzdMq7LS8/T2-8k_YtTwI/AAAAAAAAFgY/HTYUlWR5yV4/s320/comparador.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Esquema módulo de comparação analógica do PIC utilizando também a tensão de referência interna.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-upWi1oaFU20/T2_Rwl6wQrI/AAAAAAAAFg4/okDn61FeBz4/s1600/comparador2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="274" src="https://1.bp.blogspot.com/-upWi1oaFU20/T2_Rwl6wQrI/AAAAAAAAFg4/okDn61FeBz4/s320/comparador2.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Funcionamento do comparador. As áreas pretas indicam a faixa de incerteza na saída.</td></tr>
</tbody></table>
<br />
COMPARAÇÃO: Considerando a lógica do NTC, carregamos o maior valor possível no módulo de tensão de referência. Assim, se Vin > Vref(x) significa que a temperatura da sonda está acima da faixa, neste caso o processador vai acender o led da primeira faixa e depois mudar a Vref(x) para um valor mais baixo Vref(x-1). Depois compara novamente a entrada com a referência, sempre que Vin > Vref(x) um led acende e Vref(x) diminui para um valor menor até chegar a ultima faixa, quando todos os leds terão acendido. Se numa determinada faixa Vin < Vref(x) o processador vai apagar todos os leds correspondentes as faixas inferiores ao Vref(x) atual e manter os leds correspondentes as faixas superiores acessos.<br />
<br />
Observe a tabela abaixo, ela evidencia o comportamento não linear do NTC, a curva exponencial porém, pode ser linearizada colocando-se um resistor de 10k em série, fazendo um divisor de tensão. a terceira coluna mostra isso. (plote os gráficos temperatura vs. resistência do NTC e temperatura vs. tensão no divisor).<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-gv7q3mWjG4g/T2_Nxn-zUwI/AAAAAAAAFgw/bEZe1-vKGb8/s1600/tabela+NTC.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://1.bp.blogspot.com/-gv7q3mWjG4g/T2_Nxn-zUwI/AAAAAAAAFgw/bEZe1-vKGb8/s320/tabela+NTC.png" width="185" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Resposta do NTC e tensão de saída do divisor utilizando um resistor de 10k</td></tr>
</tbody></table>
<br />
<br />
Deve-se fazer ajustes no programa fonte para que ele funcione de acordo com a sua aplicação e faixa de monitoramento pretendida. Como exemplo de monitoramento da temperatura do motor do carro, pode-se selecionar alguns valores na faixa de 40 à 110°C.<br />
<br />
Pode-se eventualmente incluir um sinal de saída, programar um pino de I/O do PIC para mudar de estado (alto/baixo) quando determinada faixa for atingida. Esse sinal pode ser utilizado para acionar (através de um relê ou SSR) um ventilador, resistência ou compressor para aumentar/diminuir a temperatura do equipamento que estamos monitorando ou simplesmente desligar a carga. Uma típica aplicação seria colocar a sonda junto ao bloco do motor do carro e quando o mesmo atingir determinada temperatura, o programa aciona a ventoinha do radiador automaticamente, forçando a redução da temperatura. Isso é muito útil em alguns veículos que não tem sensor de temperatura (apenas aquela luz que acende depois que o carro já ferveu!).<br />
<br />
O bargraph utilizado foi do tipo catôdo comum, isto é: acende quando colocamos nível alto no pino de I/O e apaga quando colocamos nível baixo. Essa lógica pode ser facilmente invertida no código fonte caso o display disponível seja do tipo anôdo comum, ou invertendo os componentes caso seja utilizados LEDs discretos. O número de Leds no arranjo é limitado apenas pela quantidade de pinos do microcontrolador, caso seja necessário, pode-se utilizar um processador com mais pinos ou alterar a programação para acionar decodificadores de 3 para 8.<br />
<br />
Encorajo fortemente a inclusão de filtros, para reduzir os ruídos e evitar variações espúrias, principalmente quando se trabalha em algum nível próximo da faixa de incerteza do comparador.<br />
<br />
<br />
Por enquanto vou ficar devendo o leiaute da placa de circuito. Ela não é difícil de rotear, uma vez que são poucos os componentes utilizados. Os conectores J1 e J2 mostrados no esquema, servem justamente para a conexão da fonte e do sensor, que não ficarão na placa e precisam aparecer no ARES quando geramos a leiaute da placa.<br />
<br />
<br />
<b><u>Ficha técnica:</u></b><br />
Processador: PIC(R) 16F628A - microchip(TM)<br />
Esquemático, simulação: Proteus 7.8 (ISIS + ARES)<br />
IDE programação, gravação: MPLAB 8 (http://www.microchip.com/)<br />
compilador C: CCS<br />
Programador: ICD-2 - MultiPROG<br />
As figuras 02 e 03 foram retiradas do datasheet do PIC<br />
<br />
<u><b>Arquivos:</b></u><br />
Código fonte, esquemas, hex, etc..<br />
-<a href="https://drive.google.com/open?id=0B75-w3b4wDQwRTJOSWRvcG95b1E" rel="nofollow" target="_blank">Termobar</a> (escrito em assembly)<br />
-<a href="https://drive.google.com/open?id=0B75-w3b4wDQwWXo4c3E5RnJRWjA" rel="nofollow" target="_blank">Termobar_C</a> (escrito em C)<br />
<br />
<br />
<br />Unknownnoreply@blogger.com21tag:blogger.com,1999:blog-8786566357700085696.post-15308393284771189842012-03-23T20:42:00.003-03:002012-03-23T20:42:39.128-03:00<span style="font-size: large;">Chegou! </span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-0nxVSTqJ1RA/T20F1kWVAqI/AAAAAAAAFfc/-JyCej_-BB8/s1600/chronos_caixa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-0nxVSTqJ1RA/T20F1kWVAqI/AAAAAAAAFfc/-JyCej_-BB8/s320/chronos_caixa.jpg" width="320" /></a></div>
<br />
E com apenas 4 dias úteis desde o pedido até a entrega.<br />
A nossa <a href="http://www.correios.com.br/" target="_blank">ECT</a> deveria aprender com a <a href="http://www.fedex.com/" target="_blank">Fedex</a>.<br />
<br />
Lado ruim: Não tive como escapar da taxa de importação e do ICMS, mas mesmo assim ainda saiu pela metade do que eu pagaria aqui no Brasil.<br />
<br />
Agora é ler o manual, instalar os softwares e programar alguma coisa.<br />
Assim que eu tiver feito um "hello world" eu digo como foi.<br />
<br />
Mancada: Na hora de fazer o pedido, acabei me enganando e só agora vi que fiz o pedido de um modelo que trabalha na faixa de 868 MHz. Enquanto o padrão para América do Norte/Sul é o de 915 MHz. :-(<br />
Bom, já vi que tem como reprogramar ele pra funcionar na frequência mais alta. O hardware é o mesmo. Difere por um resistor de 0 Ohms na entrada da antena. : -)<br />
<br />
O Conteúdo da caixa:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-te8lHcd-Wbk/T20IBNuFJpI/AAAAAAAAFfk/mlTakXzXE8c/s1600/chronos_conteudo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-te8lHcd-Wbk/T20IBNuFJpI/AAAAAAAAFfk/mlTakXzXE8c/s320/chronos_conteudo.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Chronos, Chave Philips, Ponto de acesso USB-RF,para comunicar com o relógio e poder configura-lo, e finalmente o Programador, para reprogramar completamente o MSP430, o processador central do Chronos. (pra isso é preciso abrir o relógio e essa é explicação para a chave philips).</div>
<div class="separator" style="clear: both; text-align: left;">
Além do itens acima, veio junto o um CD-ROM com a documentação e os softwares de desenvolvimento, e dois parafusos sobressalentes.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Agora vou brincar um pouco com ele.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-8786566357700085696.post-60493905582669585232012-03-20T00:23:00.000-03:002012-03-24T12:32:46.235-03:00Reciclando velhos projetos<br />
<div style="text-align: center;">
<b><span style="font-family: inherit; font-size: large;">O EZ430 Chronos</span></b> </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-KV2zIiPerUA/T2f1uKKi6BI/AAAAAAAAFeI/XbxzLvJXDUo/s1600/chronos.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="313" src="http://4.bp.blogspot.com/-KV2zIiPerUA/T2f1uKKi6BI/AAAAAAAAFeI/XbxzLvJXDUo/s400/chronos.jpg" width="400" /></a></div>
<br />
<br />
A bancada irá mostrar em breve os primeiros projetos com o <strike>novo</strike> Chronos eZ430, da Texas Instruments. Uma incrível ferramenta, para o desenvolvimento de uma infinidade de aplicações, desde monitores cardíacos e treinadores pessoais até comando remoto de dispositivos. As aplicações são inúmeras, principalmente na área médica e esportiva; graças aos diversos sensores que ele possui integrados: acelerômetro de 3-eixos, Temperatura, Pressão atmosférica, medidor de tensão da bateria.<br />
<br />
Para adquirir o Chronos, você tem duas opções: ou desembolsa em média R$ 289,00 (+ frete, pra quem não é de Sampa como eu) pra conseguir esse kit aqui nas terras tupiniquis, ou encomenda dos EUA por $49,00 USD com frete incluso.<br />
<br />
O Chronos foi lançado em 2009, então, já com 3 anos de atraso, vamos ver se consigo tirar ele do limbo para <strike>o purgatório</strike> a gaveta de projetos.<br />
<br />
Para saber mais sobre o Chronos EZ430 existe uma página wiki: <a href="http://processors.wiki.ti.com/index.php/EZ430-Chronos" target="_blank">clique aqui</a><br />
<br />
Mais informações em breve.<br />
<br />
Enquanto isto, que horas são?<br />
<br />
Atualizando: A estimativa de entrega, está para o dia 23/03. Espero que não tenha nenhum problema de desembaraço ou tarifas na Receita. Assim que por as mãos nele, vou preparar um post de "unboxing".<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-24111869927767433302012-03-19T18:32:00.000-03:002016-09-08T17:58:49.781-03:00A Residência James King<div style="text-align: justify;">
Neste post, vou compartilhar um trabalho que fiz na disciplina de Desenho Técnico, durante minha graduação em engenharia elétrica. Trata-se de uma modelagem em Sketch-Up, da Residência James King, uma bonita residência projetada pelo arquiteto Paulo Mendes da Rocha.</div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-RTy22n7rax4/T2SrUCPIlbI/AAAAAAAAFbI/KrHj_1TvcZ0/s1600/James_king_iso.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="140" src="https://2.bp.blogspot.com/-RTy22n7rax4/T2SrUCPIlbI/AAAAAAAAFbI/KrHj_1TvcZ0/s320/James_king_iso.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Residência James King - Arquiteto Paulo Mendes da Rocha</td></tr>
</tbody></table>
<br />
<br />
<div style="text-align: justify;">
O trabalho em si, não é lá grandes coisas. Digo isso agora, mas na época foi F... de fazer. Primeiro porque pouco eu conhecia do Sketch up e de arquitetura e segundo, pelo pouco tempo que tivemos na época para concluir o trabalho.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A proposta que foi apresentada aos alunos, era que cada um deveria escolher uma residência diferente de um livro de páginas amareladas,<strike> que agora já não recordo o nome </strike> chamado <i><a href="http://docomomobsb.files.wordpress.com/2011/11/acayaba_residc3aancias_capa.jpg" target="_blank">Residências em São Paulo: 1947 a 1975</a> </i> de Marlene Milan e criar o modelo 3D no sketch up e as plantas baixas, cortes e fachadas no AutoCad. O livro, como o nome diz, é uma compilação de projetos de residências, com cunho modernista, da cidade de São Paulo, construídas entre 1947 e 1975, se não me engano.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Resolvi de antemão, que escolheria uma casa que realmente me desse vontade de morar, alguma com que eu me identificasse. Após folhear as quase 500 páginas, me deparei com a Residência James King, Uma casa grande, construída sobre pilotis, toda em concreto aparente, com uma abertura central, rampas, subsolo, espelho d´água na cobertura, enfim, uma residência de alto padrão para ninguém botar defeito. Olhei mais algumas outras páginas, mas nem precisava, já havia me decidido. Talvez por conta do pilotis, coisa muito comum em Brasília. Quando indiquei a minha escolha ao professor, ele (Doutor em Arquitetura) soltou logo: "Hum... Paulo Mendes da Rocha, boa escolha, você tem bom gosto, mas não vai ser fácil, tem certeza que quer fazer esta?". Fiquei ainda mais animado em fazer o trabalho. Na época, eu nem fazia ideia de quem era <a href="http://pt.wikipedia.org/wiki/Paulo_Mendes_da_Rocha" target="_blank">Paulo Mendes da Rocha</a> e foi por ai que comecei o trabalho.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A modelagem que fiz pode até ser chamada de grosseira, se comparada com algum trabalho de alunos de arquitetura, as medidas não estão muito fidedignas à realidade. De fato, as fotos retiradas do livro base, não tinham nenhuma cota e apenas uma escala gráfica que ficou deformada após a cópia das páginas, como o leitor pode verificar abaixo. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-W4GGENd6kY4/T2SyukpV91I/AAAAAAAAFbw/2W9NtTpXV9o/s1600/daniel0001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://4.bp.blogspot.com/-W4GGENd6kY4/T2SyukpV91I/AAAAAAAAFbw/2W9NtTpXV9o/s320/daniel0001.jpg" width="313" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-HCkeF-dhaXs/T2SvyHs9uRI/AAAAAAAAFbo/xEcMvRLANRM/s1600/daniel0005.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="242" src="https://4.bp.blogspot.com/-HCkeF-dhaXs/T2SvyHs9uRI/AAAAAAAAFbo/xEcMvRLANRM/s320/daniel0005.bmp" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-EPNH_wk3JIU/T2Syw5I2lDI/AAAAAAAAFcQ/Km3u0e4YGBw/s1600/daniel0006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://2.bp.blogspot.com/-EPNH_wk3JIU/T2Syw5I2lDI/AAAAAAAAFcQ/Km3u0e4YGBw/s320/daniel0006.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-9bej7lhtVxI/T2Syz54pRmI/AAAAAAAAFcY/Oe_pNzS78G4/s1600/daniel0007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://2.bp.blogspot.com/-9bej7lhtVxI/T2Syz54pRmI/AAAAAAAAFcY/Oe_pNzS78G4/s320/daniel0007.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-aZfm80vmMG0/T2Sy1RttLUI/AAAAAAAAFco/zLkf6WCshsM/s1600/daniel0011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="265" src="https://2.bp.blogspot.com/-aZfm80vmMG0/T2Sy1RttLUI/AAAAAAAAFco/zLkf6WCshsM/s320/daniel0011.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-BLCqa1a1dbc/T2SyvqwudtI/AAAAAAAAFcA/oABNPXrb0AI/s1600/daniel0004.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="236" src="https://1.bp.blogspot.com/-BLCqa1a1dbc/T2SyvqwudtI/AAAAAAAAFcA/oABNPXrb0AI/s320/daniel0004.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-tuL7wG_bM9A/T2Sz-sbVNXI/AAAAAAAAFc4/ltQ4KWNgYt4/s1600/daniel0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="243" src="https://4.bp.blogspot.com/-tuL7wG_bM9A/T2Sz-sbVNXI/AAAAAAAAFc4/ltQ4KWNgYt4/s320/daniel0003.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
Estas eram as imagens que eu dispunha para começar o trabalho. Cheguei a procurar o endereço no google maps, e encontrei o local, porém a imagem de satélite não revela muita coisa, já que o terreno é bem arborizado e as árvores cobre quase tudo.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-GJ4dxjam1zI/T2egRP0UaBI/AAAAAAAAFd8/rcdqLS26Yjc/s1600/foto_satelite.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://3.bp.blogspot.com/-GJ4dxjam1zI/T2egRP0UaBI/AAAAAAAAFd8/rcdqLS26Yjc/s320/foto_satelite.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Realmente foi muito prazeroso fazer este trabalho; até então eu nunca tinha tido contato com o sketch-up e depois de duas semanas já tinha modelado uma residência inteira, e uma assinada por um renomado arquiteto. Desde então, nunca mais modelei outro objeto no sketch-up, fiz algumas plantas baixas no Autocad e mais nada. </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyJuYzqJJsuyUsj-O68I4pwXD_w-arFOut-atWjkvZYNdv9Ujp87mA4GUj2KrTRIfDJpy9KdO1_gVS8cZDRCQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
LINKS:</div>
<div class="separator" style="clear: both; text-align: justify;">
[EDITADO 08/09/2016] </div>
<div class="separator" style="clear: both; text-align: justify;">
Caros leitores, não sei dizer ao certo o motivo, mas não tenho recebido as notificações dos comentários dessa postagem. Assustei com tanta gente pedindo os arquivos, em geral, as pessoas que responderam diretamente para mim, ou me encontraram via Google+ receberam os arquivos no mesmo dia ou no dia seguinte. Peço desculpa à todos que não foram atendidos.</div>
<div class="separator" style="clear: both; text-align: justify;">
Eu desisti de usar o 4Shared, então se você tem interesse nos arquivos, mande um email para dnail@dnail.org e solicite os arquivos que respondo em no máximo 24 horas.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Livro: <a href="https://sualivrariaonline.com.br/artes/90892-resid%C3%AAncias-em-s%C3%A3o-paulo-1947-1975" target="_blank">Residências em São Paulo: 1947 - 1975</a> (reeditado recentemente e relançado pela autora)</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Coletânea de Imagens em cores <a href="http://issuu.com/leonardofinotti/docs/07826saopaulobr" target="_blank">Residência James King</a>, na época do trabalho, não tive acesso à essas fotos, uma pena... </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<br />
<br />Unknownnoreply@blogger.com20tag:blogger.com,1999:blog-8786566357700085696.post-15846165496349271402012-03-14T17:15:00.001-03:002012-03-14T17:15:35.338-03:00A bancada<div class="separator" style="clear: both; text-align: center;">
A bancada do Dnail está uma bagunça, em breve mais conteúdo e mais organização </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-1z_-gdOYXMc/T2D7ruJ1M0I/AAAAAAAAFao/iYx4uXGjl_k/s1600/IMG190.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="39" src="http://4.bp.blogspot.com/-1z_-gdOYXMc/T2D7ruJ1M0I/AAAAAAAAFao/iYx4uXGjl_k/s320/IMG190.jpg" width="320" /></a></div>
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-40169991786854630132012-03-14T11:25:00.002-03:002012-03-14T11:25:55.005-03:00Enfim, uma atualizaçãoPraticamente dois anos sem postar nada. Neste meio tempo até criei outro blog, (<a href="http://www.meltingtronics.tumblr.com/">www.meltingtronics.tumblr.com</a>) a proposta era a mesma: coisas do meu dia-a-dia que merecessem menção, circuitos eletrônicos, engenharia elétrica, pensamentos, tirinhas do Dilbert(r), etc.. Analisando, nem sei ao certo porque resolvi criar outro do zero, invés de retomar este projeto antigo. Ontem quase criei um outro blog (domínio registrado e o escambau) porém, resolvi desativar os outros blogs antes. Para minha surpresa, este blog até tinha um tráfego considerável (em torno de 6 visitas por dia) e sei que não fui eu quem gerou estes acessos, pois eu não entro nem pra ler faz dois anos... Tanto que só vi agora que tinham dois comentários em uma postagem que fiz do circuito de controle de potência com o PIC, solicitando mais informações. Minhas desculpas a estas pessoas, acredito que agora, depois de dois anos, vocês não devem mais estar precisando dos arquivos.<br />
Resumindo, fiquei com pena de acabar com o blog, já que ele está ao menos sendo útil para alguém.<br />
O outro blog, bem, ele também tem algumas postagens legais e também estou com pena de deleta-lo, e agora estou com este dilema. Não consigo postar regularmente nem no mural do facebook, quanto mais manter dois blogs sobre praticamente a mesma coisa...<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-72247523881539802782010-04-14T15:44:00.001-03:002010-04-19T11:31:04.786-03:00Back to Live...Depois de um hiato de quase 1 ano sem postar, vai aqui algo produtivo:<br /><br />O DIMER ELETRONICO MICRO-PROCESSADO<br /><br />Com ele é possível controlar quanta potência elétrica desejamos entregar a determinada carga.<br /><br />A idéia foi tirada de um experimento de laboratório da diciplina de Arquitetura de Processadores Digitais que cursei em 2009, e utilizava o microcontrolador 8051. Este experimento tem por base um exemplo do livro <a href="http://www.mzeditora.com.br/">"Microcontroladores -Programação e projetos com a família 8051" - Mendonça/Zelenovsky</a><br />De lá pra cá, eu fiz diversas alterações no projeto original, a principal delas foi a mudança do 8051 para o PIC que é bem melhor de se trabalhar.<br /><br />Síntese:<br />O projeto consiste em duas placas de circuito uma de controle e outra de potência para o acionamento da carga. Na placa de controle existem 3 'blocos' principais: O circuito de detecção de passagem por zero (cross-zero), O microcontrolador e o bloco da interface. O circuito de detecção por zero é extemamente simples e exatamente como descrito no livro, seu coração é um acoplamento optico 4N25, sem muitos detalhes o que ele faz é enviar um pulso para um pino do microcontrolador toda vez que a tensão senoidal da rede doméstica passa por zero. (no final das contas o sinal é um trem de pulsos com frequencia de 120Hz sincronizado com a rede) O microcontrolador detecta essa passagem por zero dispara um contador. No final da contagem ele dá um pulso num outro pino que dispara o circuito de potencia, o valor guardado no contador determina a potencia entregue a carga (maior valor, menor potencia). A interface consiste em um botão de ajuste da potencia e 8 leds que indicam essa potencia.<br /><br /><p><a href="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YdCCXjlKI/AAAAAAAAACs/rP42xu35cHM/s1600/esquema_eletrico_placa_controle_potencia.bmp"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 225px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460083519065920674" border="0" alt="" src="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YdCCXjlKI/AAAAAAAAACs/rP42xu35cHM/s320/esquema_eletrico_placa_controle_potencia.bmp" /></a> A placa de potencia também é muito simples e exatamente como mostrada no livro. Consiste em um num foto-triac MOC3020 que recebe o pulso vindo do PIC e transmite para o gate de um TRIAC de potencia (BTA-16 600B). A razão do foto-triac é desacoplar eletricamente o circuito de comando do circuito de potencia e seus ruidos, principalmente aqueles oriundo do BTA-16. Repare que R4 no circuito representa a CARGA, ou seja, o que você deseja controlar (ex.: lâmpada, resistencia, etc...)<br /><br /><a href="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YdsJ8L8wI/AAAAAAAAAC0/jP9XdAXu_CM/s1600/esquema_eletrico_placa_acionamento_potencia.bmp"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 225px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460084242653115138" border="0" alt="" src="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YdsJ8L8wI/AAAAAAAAAC0/jP9XdAXu_CM/s320/esquema_eletrico_placa_acionamento_potencia.bmp" /></a><br />O programa foi escrito em C e bastou algumas linhas apenas. O conceito básico como falei é utilizar as interrupções. A interrupção por mudança de estado no pino RB0 esta ligada ao cross-zero, ela ativa/carrega o contador timer1 = (65535-SETPOINT) e também ativa a interrupção deste contador. Quando o timer estoura, (atinge 65536) a rotina de interrupção é chamada que apena cria um pulso positivo no pino RB1 (RB1=0; RB1=1; delay x micro-segundos; RB1=0), é esse pulso que dispara o triac no estagio de potencia, em seguida pára o timer1. Durante todo o tempo o programa fica apenas aguardando uma interrupção ou a outra, além de monitorar quando o botão é pressionado. Cada vez que o botão é pressionado um valor diferente é carregado na variável SETPOINT que só assume 8 valores distintos, cada valor corresponde a uma intensidade de potencia ou nível (0 a 100%), o nível atual é indicado pelos LEDs, além disso o valor do ultimo nível utilizado é sempre salvo na EEPROM, assim ao se religar o aparelho ele voltará ao ultimo estado.<br /><br /><br />As imagens a seguir são simulações feitas no proteus.<br /></p><p><a href="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YlhnjVMOI/AAAAAAAAADE/6k3KAGYR89s/s1600/simulacao_1.jpg"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 207px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460092857716388066" border="0" alt="" src="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YlhnjVMOI/AAAAAAAAADE/6k3KAGYR89s/s320/simulacao_1.jpg" /></a><br />O traço amarelo (canal A), está ligado a rede 220V ele mostra a tensão senoidal disponível e esta ai apenas para fins de comparaçã, passando esse sinal pelo transformador (para abaixar a tensão pra uns 6V ) e depois pelos diodos, obtem-se o sinal correspondente ao traço azul (canal B) e ele que é aplicado na entrada do acoplamento optico (4n25), o traço vermelho (canal C) é o pulso transmitido do 4n25 ao PIC, note que ele acontece toda vez que a senoide da rede (traço amarelo) cruza a linha do zero. Por fim o traço verde (canal D) é o pulso gerado pelo PIC e que vai para a placa de potencia. Neste caso ele acontece quase no final de cada semi-ciclo, e equivale ao nível de potencia mais baixo, quando se aumenta a potencia, esse pulso se desloca para a esquerda do gráfico. Abaixo o pulso para uma potencia ajustada em aproximadamente 50%.</p><br /><a href="http://1.bp.blogspot.com/_j8YDP-grH2A/S8Yosive0VI/AAAAAAAAADM/Gx7tImPhawM/s1600/simulacao_2.jpg"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 207px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460096343938617682" border="0" alt="" src="http://1.bp.blogspot.com/_j8YDP-grH2A/S8Yosive0VI/AAAAAAAAADM/Gx7tImPhawM/s320/simulacao_2.jpg" /></a><br /><br />Abaixo uma imagem que eu acho muito legal, é um modelo 3D da placa gerada pelo software ARES, onde é feito o layout de circuito impresso. Repare que o transformador não vai na placa, as conexão a ele e a placa de potencia são feitas pelos conectores tipo KRE.<br /><br /><br /><p><a href="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YjaJ3DQnI/AAAAAAAAAC8/QMYgtfVtjfU/s1600/prot%C3%B3tipo_3D.jpg"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 174px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460090530463695474" border="0" alt="" src="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YjaJ3DQnI/AAAAAAAAAC8/QMYgtfVtjfU/s320/prot%C3%B3tipo_3D.jpg" /></a><br /></p><p>Agora umas fotos do protótipo em funcionamento: Testei tanto para carga resistiva (lâmpada) quando indutiva (motor). Para a lâmpada o pulso de disparo pode ocorrer basicamente a qualquer momento do semi-ciclo (isso determina a intensidade com que a mesma acende). Porém para o motor isso não é possível, nos meus testes eu verifiquei que o pulso de disparo não pode acontecer antes do ponto de máximo/minimo da senoide, caso contrário o motor fica travado ou batendo (tentando girar para um lado e para ao outro), isso acontece porque para conseguirmos controlar um motor de indução devemos variar tanto a frequencia quanto a tensão fornecida o que não acontece neste circuito.</p><br /><a href="http://3.bp.blogspot.com/_j8YDP-grH2A/S8Ysi61PsDI/AAAAAAAAADs/UB5KXhfxttM/s1600/Imagem0407.jpg"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 240px; DISPLAY: block; HEIGHT: 320px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460100576653062194" border="0" alt="" src="http://3.bp.blogspot.com/_j8YDP-grH2A/S8Ysi61PsDI/AAAAAAAAADs/UB5KXhfxttM/s320/Imagem0407.jpg" /></a><br /><a href="http://1.bp.blogspot.com/_j8YDP-grH2A/S8YsYp8qdoI/AAAAAAAAADk/lknn-wtJWY8/s1600/Imagem0408.jpg"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 240px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460100400322082434" border="0" alt="" src="http://1.bp.blogspot.com/_j8YDP-grH2A/S8YsYp8qdoI/AAAAAAAAADk/lknn-wtJWY8/s320/Imagem0408.jpg" /></a><br /><br /><div><a href="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YsQm0d-9I/AAAAAAAAADc/DcHuEpCFaLs/s1600/Imagem0406.jpg"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 240px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460100262043450322" border="0" alt="" src="http://4.bp.blogspot.com/_j8YDP-grH2A/S8YsQm0d-9I/AAAAAAAAADc/DcHuEpCFaLs/s320/Imagem0406.jpg" /></a><br /><br /><br /><div><a href="http://3.bp.blogspot.com/_j8YDP-grH2A/S8YsHLECtnI/AAAAAAAAADU/cIRgQQzuTtg/s1600/Imagem0405.jpg"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 240px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5460100099973756530" border="0" alt="" src="http://3.bp.blogspot.com/_j8YDP-grH2A/S8YsHLECtnI/AAAAAAAAADU/cIRgQQzuTtg/s320/Imagem0405.jpg" /></a> <p>Ficha técnica: </p><p>Processador: PIC(R) 16f628A - microchip(TM)<br />Esquemático, simulação, layout PCI: Proteus 7.6-sp4 (ISIS + ARES)</p><p>IDE programação, gravação: MPLAB 8 (<a href="http://www.microchip.com/">http://www.microchip.com/</a>)</p><p>compilador C: CCS</p><p>Programador: ICD-2 - MultiPROG</p><p>A versão anterior deste projeto era um pouco mais elaborada, nela eu utilizava um PIC16F877A e um display de LCD que informava: "POTENCIA: XXX%". além disso havia 2 botões, um de incremento e outro de decremento da potencia. Nele era possível ajustar qualquer valor de 0 a 100% e não apenas 8 posições distintas como é o caso. O código fonte foi todo escrito em assembly e deu várias e várias linhas de código... além de alguns bugs não resolvidos. </p></div></div>Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-8786566357700085696.post-38040490941525150052009-05-29T14:50:00.001-03:002009-05-29T14:52:41.525-03:00Ritalina com Red BullSexta-feira...<br />Não vou nem comentar sobre a prova de Controle.<br />De repente tive a idéia de mudar o nome deste blog para Ritalina com Red Bull...Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-9000806320985613882009-05-27T14:19:00.000-03:002009-05-27T14:22:11.982-03:00Minha busca por conhecimento, não passa de uma busca por tempo.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-6986151231241264122009-05-26T20:23:00.000-03:002009-05-26T20:43:11.359-03:00Ainda sem assunto...<br />Manter um blog não é nada fácil.<br />A princípio sequer estou com tempo pra postar, e acho que pra ser um bom blogueiro, é preciso ou ter tempo de sobra ou assunto de sobra. Os dois estão atualmente em falta pra mim.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-23183525579288433182009-05-15T21:41:00.000-03:002009-05-15T22:23:00.056-03:00No post anterior, apresentei uma pequena paródia, inspirada numa camiseta do curso de Física da UnB. Interessante pensar como certas coisas (propriedades, eventos, objetos, pessoas...) estão por ai a anos, séculos ou milênios esperando por serem descobertas. E o quanto essas descobertas são capazes de transformar o mundo.<br />Como nem todo mundo é iniciado no assunto, eu até pensei e comecei a digitar um texto explicando de maneira sucinta do que se tratam as Equações de Maxwell, porém tem um artigo muito bom na wikipédia e sugiro aos neófitos que acessem e dêem uma boa lida no texto.<br /><br />Como já fizeram o trabalho por mim, vou aproveitar o tempo economizado e fazer algo mais produtivo.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8786566357700085696.post-87757421060491912452009-05-14T20:58:00.000-03:002009-05-14T22:19:26.863-03:00Gênesis 1:1No princípio não existia nada, criou Deus os céus e a terra.<div>A terra, porém, estava vazia e sem forma, havia trevas sobre a face do abismo,</div><div>e o Espírito de Deus pairava por sobre as águas.</div><div>Disse Deus:</div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_j8YDP-grH2A/Sgy7RiRZlEI/AAAAAAAAAAM/OeZS6oOQRzI/s1600-h/maxwell.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 286px; height: 320px;" src="http://2.bp.blogspot.com/_j8YDP-grH2A/Sgy7RiRZlEI/AAAAAAAAAAM/OeZS6oOQRzI/s320/maxwell.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5335845568459150402" /></a><div>E houve luz.</div>Unknownnoreply@blogger.com0