tag:blogger.com,1999:blog-31944462400585873352024-03-13T21:26:40.253-07:00PK2LabPlaca de desenvolvimento para microcontroladores PICAnonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-3194446240058587335.post-56809872360433926742013-09-29T07:54:00.001-07:002013-09-29T16:16:01.613-07:00Interface PPM - Usando rádio controle de modelismo<p> </p> <p align="justify"><font face="Trebuchet MS">E ai pessoal, tudo certo? estou voltando aos post’s e gostaria de apresentar a vocês um projeto bacana para quem pretende conciliar duas áreas distintas porém que trazem muitas alegrias a quem lhes concede tempo e empenho, são elas a eletrônica embarcada e o modelismo!</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="center"><a href="http://lh6.ggpht.com/-C0nVzVqI_Ng/Ukg_LGexgaI/AAAAAAAABj8/gnFlXnj9Loc/s1600-h/foto%25255B5%25255D.jpg"><img title="foto" style="display: inline" alt="foto" src="http://lh5.ggpht.com/-1nIhHtViKtw/Ukg_L_kN0pI/AAAAAAAABkE/Q6kHj6aunms/foto_thumb%25255B3%25255D.jpg?imgmax=800" width="375" height="201"></a></p> <p align="center"> </p> <p align="justify"><font face="Trebuchet MS">Que tal desenvolvermos um software para agregarmos funções aos nossos modelos? ou quem sabe incrementarmos aquele robô em desenvolvimento para que possamos obter distâncias maiores além de podermos utilizar vários rádios disponíveis no mercado a preço atraentes… bora lá!!!</font></p> <p align="justify"><font face="Trebuchet MS">Bom para tanto precisamos entender como funciona o sistema de rádio controle destes utilizados no modelismo, não importando qual área de modelismo se aplica, tanto auto, aero ou helimodelismo utilizam a mesma técnica de controle que se dá através de controle PPM.</font></p> <p align="justify"><strong><font color="#ff0000" face="Trebuchet MS">Controle PPM</font></strong></p> <p align="justify"><font face="Trebuchet MS">PPM (Pulse Position Modulation) é a técnica de controle de servos e outros dispositivos utilizados em modelismo que consiste da modulação por posicionamento de pulso, esta técnica já foi vista anteriormente no blog quando abordamos o <a href="http://pk2lab.blogspot.com/2011/10/controle-de-servomotores.html" target="_blank">controle de servomotores</a> e mostramos como gerar os pulsos para controlarmos os dispositivos atuadores (servos).</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="center"><a href="http://lh4.ggpht.com/-WZX5nUCRiH0/UkhJmnuBQxI/AAAAAAAABkU/8ku1wRlserc/s1600-h/servo-pwm_w400%25255B5%25255D.jpg"><img title="servo-pwm_w400" style="display: inline" alt="servo-pwm_w400" src="http://lh6.ggpht.com/-pPWhEKRcez8/UkhJnKSZL2I/AAAAAAAABkc/WKALSdazwpY/servo-pwm_w400_thumb%25255B2%25255D.jpg?imgmax=800" width="380" height="208"></a></p> <p align="center"> </p> <p align="justify"><font face="Trebuchet MS">A abordagem desta vez será inversa, ou seja, iremos aprender a ler um pulso proveniente de um receptor de aeromodelismo a fim de criarmos nossos próprios atuadores, que podem ser chaves digitais On-Off, saídas de tensão proporcionais aos valores dos Sticks do rádio, sistemas de iluminação, automáticos para trens de pouso, sequenciadores de portas, enfim, o que sua imaginação lhe proporcionar!</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="justify"><strong><font color="#ff0000" face="Trebuchet MS">Rádios e Receptores</font></strong></p> <p align="justify"><font color="#ffffff" face="Trebuchet MS">Atualmente os sistemas de radio controle para modelismo sofreram uma merecida atualização no que diz respeito ao meio de comunicação entre rádio e receptor, várias técnicas já foram utilizadas, sendo elas AM(Amplitude Modulada), FM (Frequência Modulada) muito comum até então e por fim a mais utilizada atualmente, a 2.4GHz que utiliza um protocolo baseado em salto de frequência, mais isso no momento não é o foco do nosso projeto, iremos nos concentrar apenas no sinal PPM já processado pelo receptor.</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="center"><a href="http://lh4.ggpht.com/-uu2_suj01O4/UkiRtccWLSI/AAAAAAAABks/O5BybeO6Vr0/s1600-h/SPM18800-GAL01%25255B4%25255D.jpg"><img title="SPM18800-GAL01" style="display: inline" alt="SPM18800-GAL01" src="http://lh4.ggpht.com/-GPtBFdEHifA/UkiRt39ghfI/AAAAAAAABk0/8e0HVf5zTVk/SPM18800-GAL01_thumb%25255B2%25255D.jpg?imgmax=800" width="443" height="261"></a></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="justify"><font face="Trebuchet MS">Neste exemplo vamos utilizar um receptor DSMX2 da marca Orange, que possui uma taxa de repetição de frames a cada 22ms, cada frame varia então de 1ms a 2ms correspondentes a posição do Stick do rádio, a alimentação do receptor é de 5V sendo alimentado pela própria placa PK2Lab.</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="center"><a href="http://lh3.ggpht.com/-i06CryQ-k1A/UkioCxQztpI/AAAAAAAABlE/9T1-erJIewY/s1600-h/70170%25255B3%25255D.jpg"><img title="70170" style="display: inline" alt="70170" src="http://lh4.ggpht.com/-aPi1KcpdAP4/UkioDbnqpgI/AAAAAAAABlM/r9lzOwutw3A/70170_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="176"></a></p> <p align="justify"> </p> <p align="justify"> </p> <p align="justify"><font color="#ff0000" face="Trebuchet MS"><strong>Processamento do sinal PPM</strong></font></p> <p align="justify"><font color="#ffffff" face="Trebuchet MS">Para efetuarmos a análise do sinal PPM pelo microcontrolador podemos efetuar a medição do tempo em que o sinal permanece em nível alto, para isto vamos utilizar o recurso CAPTURE do modulo CCP1 do PIC 16F887.</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="center"><font face="Trebuchet MS"><a href="http://lh3.ggpht.com/-ofc-llx4sgM/Ukionsh0HQI/AAAAAAAABlU/SYnGxuteb3E/s1600-h/foto%25255B10%25255D.jpg"><img title="Sinal PPM" style="display: inline" alt="Sinal captura com Stick centrado" src="http://lh5.ggpht.com/-TDuKfIqQPDQ/UkiooVuzXAI/AAAAAAAABlc/XSG8z3uYB_U/foto_thumb%25255B6%25255D.jpg?imgmax=800" width="395" height="302"></a></font></p> <p align="center"><font face="Trebuchet MS"></font> </p> <p align="justify"><font face="Trebuchet MS">Bom, temos agora que começar configurando o TMR1 do PIC16F887 para incremento a cada 1us, e a borda de interrupção do módulo CCP1 para captura na borda de subida, assim que este evento for detectado, zeramos os contadores de 16 bits do TMR1 e alteramos a borda de captura para detectar o momento exato em que esse sinal volta a nível baixo, quando isso ocorrer os registradores do TMR1 irão conter o valor exato correspondente diretamente ao tempo em que o sinal permaneceu alto, esse tempo é um espelho do posicionamento do stick do controle.</font></p> <p align="justify"><font face="Trebuchet MS">Vale observar que a mudança de sensibilidade de borda do módulo CCP1 gera o disparo errôneo desta interrupção, portanto, temos que tomar a precaução de manter desabilitada essa interrupção durante esta mudança de borda.</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="justify"><font color="#ff0000" face="Trebuchet MS"><strong>Programa</strong></font></p> <p align="justify"><strong><font color="#ff0000" face="Trebuchet MS"></font></strong> </p> <p><font color="#00ff00">/******************************************************************************</font></p> <p><font color="#00ff00"> JL Audio Manutenção Eletrônica</font></p> <p><font color="#00ff00">Data: 09/2013<br>Autor: Jean Carlos<br>Projeto: Decodificador de sinais PPM<br>Microprocessador: PIC16F887<br>Clock do processador: 8MHz<br>Estação de desenvolvimento: PK2Lab<br>Compilador: MikroC PRO V4.60.0.0<br>Versão atual: 1.0<br>Descrição:</font></p> <p><font color="#00ff00"> Este projeto consiste em decodificar os sinais PPM<br> provenientes da saída de um receptor de rádio controle</font></p> <p><br><font color="#00ff00">*******************************************************************************/<br>// Configuração do LCD da placa PK2Lab V.1.1</font></p> <p><font color="#00ff00">sbit LCD_RS at RB2_bit;<br>sbit LCD_EN at RB3_bit;<br>sbit LCD_D4 at RB4_bit;<br>sbit LCD_D5 at RB5_bit;<br>sbit LCD_D6 at RB6_bit;<br>sbit LCD_D7 at RB7_bit;</font></p> <p><font color="#00ff00">sbit LCD_RS_Direction at TRISB2_bit;<br>sbit LCD_EN_Direction at TRISB3_bit;<br>sbit LCD_D4_Direction at TRISB4_bit;<br>sbit LCD_D5_Direction at TRISB5_bit;<br>sbit LCD_D6_Direction at TRISB6_bit;<br>sbit LCD_D7_Direction at TRISB7_bit;</font></p> <p><br><font color="#00ff00">//Variáveis Globais</font></p> <p><font color="#00ff00">char txt[7];<br>unsigned int Tempo_L, Tempo_H, Pulso;</font></p> <p><font color="#00ff00">//Interrupções</font></p> <p><font color="#00ff00">void interrupt()<br>{<br>if(CCP1IF_bit && CCP1CON.B0) // Captura por CCP1 e borda como subida...<br> {<br> CCP1IF_bit = 0; // Limpa a flag para nova captura<br> CCP1IE_bit = 0; // Desabilita interrupção por periféricos(CCP1)<br> CCP1CON = 4; // Configura a borda de captura para DESCIDA.<br> CCP1IE_bit = 1; // Habilita interrupção por periféricos(CCP1)<br> TMR1H = 0; // Zera registradores do TMR1 para contagem de tempo<br> TMR1L = 0;<br> TMR1ON_bit = 1; // Habilita contagem de tempo.<br> }</font></p> <p><font color="#00ff00">else if(CCP1IF_bit)<br> {<br> CCP1IF_bit = 0; // Limpa a flag para nova captura<br> TMR1ON_bit = 0; // Desabilita contagem de tempo.<br> CCP1IE_bit = 0; // Desabilita interrupção por periféricos(CCP1)<br> CCP1CON = 5; // Configura a borda de captura para SUBIDA. <br> CCP1IE_bit = 1; // Habilita interrupção por periféricos(CCP1)<br> Tempo_H = CCPR1H; </font></p> <p><font color="#00ff00"> Tempo_L = CCPR1L; <font color="#00ff00">// Carrega valores de tempo capturado </font><font color="#00ff00"> </font><br> }</font></p> <p><font color="#00ff00">}</font></p> <p><font color="#00ff00">//Rotina Principal</font></p> <p><font color="#00ff00">void main()<br>{<br>TRISD = 0b00000000;<br>TRISE = 0b00000000;<br>TRISC = 0b00000100; // Entrada CCP1<br>PORTC = 0b00000000;<br>ANSEL = 0b00000000; // Entradas digitais.<br>ANSELH = 0b00000000; // Entradas digitais.<br>INTCON = 0b11000000; // Liga interruptores GIE e PEIE<br>TMR1IE_bit = 0; // Desabilita interrpções de TMR1<br>CCP1IE_Bit = 1; // Habilita interrupções por CAPTURA(CCP1)<br>CCP1CON = 5; // CCP1 para CAPTURA borda de SUBIDA.</font></p> <p><font color="#00ff00">T1CKPS1_bit = 0; // Prescaller TMR1 2:1<br>T1CKPS0_bit = 1;<br>TMR1CS_bit = 0; // Clock selecionado -> OSC/4<br>TMR1ON_bit = 0; // Timer -> 1 = Habilita contagem</font></p> <p><br><font color="#00ff00">Lcd_Init();<br>Lcd_Cmd(_Lcd_Cursor_Off);<br>Lcd_Cmd(_LCD_CLEAR);<br>Lcd_Out(1,1,"*** PK2Lab ***");<br>Lcd_Out(2,1,"Pulso us: ");<br>Delay_ms(100);</font></p> <p><font color="#00ff00">while(1)<br>{<br> Delay_ms(100); // Intervalo entre leituras.<br> Pulso = (Tempo_H<<8)+ Tempo_L; // Obtenção do pulso PPM<br> IntToStr(Pulso, txt); // Converte texto para impressão<br> Lcd_Out(2,11,txt); // Mostra Pulso em us no display</font></p> <p><font color="#00ff00"> if(Pulso > 1600) PORTE.B1 = 1;<br> else PORTE.B1 = 0;</font></p> <p><font color="#00ff00"> if(Pulso > 1100) PORTD.B0 = 1;<br> else PORTD.B0 = 0;</font></p> <p><font color="#00ff00"> if(Pulso > 1200) PORTD.B1 = 1;<br> else PORTD.B1 = 0;</font></p> <p><font color="#00ff00"> if(Pulso > 1300) PORTD.B2 = 1;<br> else PORTD.B2 = 0;<br> <br> if(Pulso > 1400) PORTD.B3 = 1;<br> else PORTD.B3 = 0;</font></p> <p><font color="#00ff00"> if(Pulso > 1500) PORTD.B4 = 1;<br> else PORTD.B4 = 0;</font></p> <p><font color="#00ff00"> if(Pulso > 1600) PORTD.B5 = 1;<br> else PORTD.B5 = 0;</font></p> <p><font color="#00ff00"> if(Pulso > 1700) PORTD.B6 = 1;<br> else PORTD.B6 = 0;</font></p> <p><font color="#00ff00"> if(Pulso > 1800) PORTD.B7 = 1;<br> else PORTD.B7 = 0;<br> <br> <br>}//while(1)<br>}//main</font></p> <p align="justify"><font color="#00ff00">/******************************************************************************</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="justify"><strong><font color="#ff0000" face="Trebuchet MS">Vídeo do projeto</font></strong></p> <div id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:8d4d79ae-d568-460c-ae3d-49373a75784e" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; width: 448px; margin-right: auto"><div id="923babbc-225d-4b68-b0f8-cf344fe12ef1" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=K6MO8kmhkqg&feature=youtube_gdata_player" target="_new"><img src="http://lh5.ggpht.com/-U12qpsGTUes/UkizuwJtN9I/AAAAAAAABmU/GQfWr0hX3hY/video86b2772090a1%25255B10%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('923babbc-225d-4b68-b0f8-cf344fe12ef1'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/K6MO8kmhkqg?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/K6MO8kmhkqg?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com8tag:blogger.com,1999:blog-3194446240058587335.post-26700105043685670832013-01-19T18:12:00.001-08:002013-01-20T05:57:06.044-08:00Acelerômetro Digital via I²C<p align="justify"><font face="Trebuchet MS">Olá pessoal… depois do jejum de post’s resolvi postar algo um pouco mais complexo para me redimir um pouco… se bem que acredito que a leitura será interessante e muito agradável pois se trata de uma tecnologia atual e que já faz parte do nosso cotidiano, vamos implementar o uso de um acelerômetro digital com comunicação via I²C.</font></p> <p align="justify"><font color="#ff0000" size="3" face="Trebuchet MS"><strong>Acelerômetro</strong></font></p> <p align="justify"><font face="Trebuchet MS">O acelerômetro consiste em um dispositivo micro eletromecânico (MEMS) que utiliza-se de nanotecnologia para construção de sensores que medem a grandeza de aceleração em objetos.</font></p> <p align="center"><font face="Trebuchet MS"><a href="http://lh6.ggpht.com/--n1CfGajB48/UPtSdQvhQfI/AAAAAAAABSw/0n0wPCRhY7M/s1600-h/Acelerometro_GLB%25255B4%25255D.png"><img style="display: inline" title="Acelerometro_GLB" alt="Acelerometro_GLB" src="http://lh6.ggpht.com/-eAr2NmT-qtA/UPtSeBPuYaI/AAAAAAAABS4/QBINOdH7vpM/Acelerometro_GLB_thumb%25255B2%25255D.png?imgmax=800" width="282" height="306"></a></font></p> <p align="justify"><font face="Trebuchet MS">Para conseguir efetuar a leitura desta grandeza, este componente possui em seu interior uma massa móvel contendo várias placas que interagem com placas fixas ao ci, formando desta maneira um sistema capacitivo que altera o valor da capacitância conforme o movimento da massa móvel, ou seja, a cada movimento no componente temos uma informação disponível relacionada a um dos eixos.</font></p> <p align="center"><a href="http://lh4.ggpht.com/-x5NknKyFb6U/UPtSe955OxI/AAAAAAAABTA/YxTUllDfSI0/s1600-h/mems%25255B4%25255D.jpg"><img style="display: inline" title="mems" alt="Zoom de 1500x em um MEMS da ST" src="http://lh4.ggpht.com/-8CI9UM_HbZw/UPtSflUeHrI/AAAAAAAABTI/4gxJXUVIAtc/mems_thumb%25255B2%25255D.jpg?imgmax=800" width="357" height="293"></a></p> <p align="center"><a href="http://lh3.ggpht.com/-U1zpRGG_kAI/UPtSgvEJZ5I/AAAAAAAABTQ/-vCxbpaVa0Y/s1600-h/mems%252520II%25255B10%25255D.jpg"><img style="display: inline" title="mems II" alt="mems II" src="http://lh4.ggpht.com/-DsLfosnbh4g/UPtShsXOacI/AAAAAAAABTY/FDtyPygo-gQ/mems%252520II_thumb%25255B8%25255D.jpg?imgmax=800" width="354" height="345"></a></p> <p align="justify"><font face="Trebuchet MS">A empresa ST Microeletronics desenvolve a muitos anos essa tecnologia e hoje conta com seus MEMS instalados em muitos equipamentos, desde pequenos brinquedos e controle de video games até os telefones de ultima geração. </font></p> <p align="justify"><font face="Trebuchet MS">Para este post, vamos utilizar o <font color="#ff0000"><a href="http://www.jlaudioeletronica.com.br/LIS3VL02DL.pdf" target="_blank">LIS3LV02DL</a></font> que possui muitos recursos embutidos além de medir aceleração em três eixos e possuir comunicação via barramento I²C que é um dos mais utilizados para comunicação entre microcontroladores e seus periféricos, além de ter duas escalas de medição, uma medindo até 2 g e outra medindo até 6 g, sendo 1.0025 g o equivalente a uma aceleração de 9.8310 m/s².</font></p> <p align="justify"><font face="Trebuchet MS">Este componente é fornecido pela ST Microeletronics em uma placa de avaliação comercializada pelo código STEVAL-MKI009V1.</font></p> <p align="center"><a href="http://lh6.ggpht.com/-q6MlH0X495Q/UPvpvIHOOMI/AAAAAAAABUs/3NUvrYP0wzw/s1600-h/image_steval-mki009v1%25255B1%25255D.jpg"><img style="display: inline" title="image_steval-mki009v1" alt="image_steval-mki009v1" src="http://lh3.ggpht.com/-VlPrlte9iNQ/UPtSipWpwLI/AAAAAAAABU0/Koy760nXVWc/image_steval-mki009v1_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="145"></a></p> <p align="center"><a href="http://lh6.ggpht.com/-pySOmi2Q-pA/UPvpxIH-eJI/AAAAAAAABU4/EvM2ZZjnz7M/s1600-h/DSC01323%25255B4%25255D.jpg"><img style="display: inline" title="DSC01323" alt="DSC01323" src="http://lh5.ggpht.com/-QAlTQTZe3tE/UPvpxrnH-rI/AAAAAAAABVA/kx5snZH7Hmc/DSC01323_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="180"></a></p> <p align="justify"><font face="Trebuchet MS">Abaixo podemos observar a foto do acelerômetro LIS331, utilizado no iPhone 3GS comparado a uma moeda.</font></p> <p align="center"><font face="Trebuchet MS"><a href="http://lh3.ggpht.com/-SePyS-XDeco/UPvpyp5J5ZI/AAAAAAAABVI/DqcqoYjR0XQ/s1600-h/LIS331%25255B12%25255D.jpg"><img style="display: inline" title="LIS331" alt="LIS331" src="http://lh5.ggpht.com/-JHGn_O1OuVM/UPvpzaBIV7I/AAAAAAAABVQ/Y9ORLlQFms0/LIS331_thumb%25255B10%25255D.jpg?imgmax=800" width="240" height="133"></a></font></p> <p align="justify"><font face="Trebuchet MS">Os acelerômetros podem apresentar duas formas de interfaceamento, sendo, digital ou analógico, nos analógicos as saídas correspondentes aos eixos informam a grandeza variando o nível de tensão DC no pino correspondente ao seu eixo, já no caso dos acelerômetros digitais, esses valores são transferidos via comunicação serial, podendo ser utilizado I²C ou SPI.</font></p> <p align="center"><a href="http://lh3.ggpht.com/-qhR4ErCJM3Y/UPtSjW_K5pI/AAAAAAAABTw/lGmVtmiJ1uM/s1600-h/mems3%25255B4%25255D.jpg"><img style="display: inline" title="mems3" alt="mems3" src="http://lh6.ggpht.com/-eGNWj10VlMc/UPtSj7JrSsI/AAAAAAAABT4/FCok1FIQtD0/mems3_thumb%25255B2%25255D.jpg?imgmax=800" width="482" height="188"></a></p> <p align="left"><font face="Trebuchet MS">Este componente ainda conta com uma interrupção por movimentos, sendo possível efetuar o ajuste do nível de sensibilidade.</font></p> <p align="left"><font color="#ff0000" size="3" face="Trebuchet MS">Curiosidade!!!</font></p> <p align="justify"><font face="Trebuchet MS">Alguns computadores antigos da Apple, contam com uma função que detecta uma possível queda de nível, fazendo com que a agulha do HD fosse para a posição de descanso a fim de não danificar o disco antes do impacto acontecer, pois bem, como é possível efetuar a detecção de queda livre? </font></p> <p align="justify"><font face="Trebuchet MS">R. Como todos sabemos, todos os corpos na terra sofrem a ação da gravidade, portanto o acelerômetro sempre estará sofrendo esta força, quando em queda livre de maneira linear, esta força tende a se anular pois o corpo acelera em relação ao eixo da terra e é neste momento que se pode detectar a queda livre ou free fall.</font></p> <p align="center"><a href="http://lh4.ggpht.com/--Ua6-toyuUE/UPvp0YODPXI/AAAAAAAABVY/Q3jDcevBb04/s1600-h/free%252520fall%25255B5%25255D.gif"><img style="display: inline" title="free fall" alt="free fall" src="http://lh5.ggpht.com/-FyQ-3Zk4YII/UPvp1JjJZSI/AAAAAAAABVg/6YF2R7vlEm4/free%252520fall_thumb%25255B3%25255D.gif?imgmax=800" width="446" height="338"></a></p><font color="#ff0000" size="3" face="Trebuchet MS"> <p align="left"> <hr> <p align="left">Interfaceamento</font> </p> <div align="justify"><font face="Trebuchet MS">Para interfacear o acelerômetro, temos que atentar para o fato da tensão de alimentação do mesmo que é de 3.3V ser diferente da tensão de alimentação da placa, para isto vamos utilizar um regulador externo de 3.3V além de dois resistores de pull up, este é um diferencial da placa PK2Lab, pois foi construída com o intuito de trabalhar com periféricos I²C com tensões de 3.3V ou 5V de forma simples e direta.</font></div> <div align="justify"><font face="Trebuchet MS"></font> </div> <div align="justify"><font face="Trebuchet MS">Vale lembrar que os microcontroladores PIC quando alimentados com uma tensão de 5V, entendem como nível lógico alto uma tensão superior a 2V, portanto podemos conectar os pinos TX e RX do acelerômetro nos pinos do microcontrolador que os níveis lógicos serão entendidos.</font></div> <div align="justify"><font face="Trebuchet MS"></font> </div> <div align="justify"><font color="#ff0000" size="3" face="Trebuchet MS">Comunicação I²C</font></div> <div align="justify"><font color="#ff0000" size="3" face="Trebuchet MS"></font> </div> <div align="justify"><font face="Trebuchet MS">A comunicação foi estabelecida pelo protocolo I²C na frequência de 100Khz a 3.3V sendo respeitado a tabela de tempos conforme datasheet.</font></div> <div align="justify"><font face="Trebuchet MS"></font> </div> <div align="justify"><font face="Trebuchet MS">Para efetuarmos as leituras referentes aos eixos, primeiro precisamos configurar o acelerômetro para informar como desejamos receber os dados, para isto devemos seguir a seguinte sequência.</font></div> <div align="justify"><font face="Trebuchet MS"></font> </div> <p align="justify"><font face="Trebuchet MS"># Inicializar o barramento</font></p> <p align="justify"><font face="Trebuchet MS"># Informar o comando de escrita para o LIS3LV02DL</font></p> <p><font face="Trebuchet MS"># Escrever o conteúdo do registrador CTRL_REG1 (Já vem indexado) </font></p> <p><font face="Trebuchet MS"># Escrever o conteúdo do registrador CTRL_REG2 </font></p> <p><font face="Trebuchet MS"></font> </p> <p><font face="Trebuchet MS">Após este procedimento podemos efetuar as leituras propriamente ditas seguindo a sequência abaixo.</font></p> <p align="justify"><font face="Trebuchet MS"># Inicializar o barramento</font></p> <p align="justify"><font face="Trebuchet MS"># Informar o comando de escrita para o LIS3LV02DL</font></p> <p align="justify"><font face="Trebuchet MS"># Informar qual o endereço desejamos ler inicialmente</font></p> <p align="justify"><font face="Trebuchet MS"># Reinicializar o barramento novamente </font></p> <p align="justify"><font face="Trebuchet MS"># Informar o comando de leitura para o LIS3LV02DL</font></p> <p align="justify"><font face="Trebuchet MS"># Efetuar a leitura de forma sequencialmente dos eixos</font></p> <p align="justify"><font face="Trebuchet MS">Por fim, como a leitura do acelerômetro se dá em 12 bits, precisamos concatenar esses dois bytes para obtermos a informação desejada para enfim apresentarmos os resultados no display LCD e via porta serial.</font></p> <ul><!--EndFragment--></ul> <div align="justify"><font face="Trebuchet MS"></font> </div> <div align="justify"><font color="#ffc000" face="Trebuchet MS">Alguns registradores internos ao Acelerômetro</font></div> <ul> <li> <div align="justify"><font face="Trebuchet MS"><font color="#4f81bd">WHO_AM_I</font> </font></div><font face="Trebuchet MS">Endereço padrão deste CI no barramento I²C…</font> <li> <div align="justify"><font color="#4f81bd" face="Trebuchet MS">CTRL_REG1</font></div><font face="Trebuchet MS">Configurações para habilitação de leitura dos eixos, self test…</font> <li> <div align="justify"><font color="#4f81bd" face="Trebuchet MS">CTRL_REG2</font></div><font face="Trebuchet MS">Seleção de escala, interrupções…</font> <li> <div align="justify"><font color="#4f81bd" face="Trebuchet MS">CTRL_REG3</font></div><font face="Trebuchet MS">Ajuste de clock e filtros passa alta…</font></li></ul> <p><font face="Trebuchet MS"></font> </p> <p> <hr> <p><font color="#ff0000" size="3" face="Trebuchet MS">Software</font></p> <p align="justify"><font face="Trebuchet MS">O software para este exemplo mede a aceleração dos 3 eixos em 12 bits apresentando os valores lidos no display LCD, e envia os dados periodicamente via porta serial para o terminal serial do PC a 9600bps.</font></p> <p><font color="#00ff00">/******************************************************************************</font></p> <p><font color="#00ff00"> JL Audio Manutenção Eletrônica</font></p> <p><font color="#00ff00">Data: 23/04/2011<br>Autor: Jean Carlos<br>Projeto: MEMS ST - Acelerômetro ( LIS3LV02DL )<br>Microprocessador: PIC18F4550<br>Clock do processador: 8MHz<br>Estação de desenvolvimento: PK2Lab V1.1<br>Versão atual: V 1.0<br>Descrição:</font></p> <p><font color="#00ff00"> Este projeto demonstra o uso de um MEMS(Sistema Micro eletromecânico)<br> da ST, modelo LIS3LV02DL que se trata de um acelerômetro digital<br> de 3 eixos (2G e 6G)</font></p> <p><font color="#00ff00"></font><br><font color="#00ff00">*******************************************************************************/<br>//Variáveis Globais</font></p> <p><font color="#00ff00">unsigned char XL,XH,YL,YH,ZL,ZH;<br>unsigned int X,Y,J;<br>char txt[7];</font></p> <p><br><font color="#00ff00">//****************************************************************<br>//Rotinas Auxiliares</font></p> <p><font color="#00ff00">void Le_Acelerometro()<br> {<br> I2C_Start();<br> I2C_Wr(0x3A); // Endereço do acelerômetro para escrita.<br> I2C_Wr(0xA8); // Endereço do registrador Eixo X Lower (0x28), ainda foi setado o sétimo bit do registrador para indicar a indexação automática do endereço.<br> I2C_Repeated_Start();<br> I2C_Wr(0x3B); // Endereço do acelerômetro para leitura.<br> XL = I2C_Rd(1);<br> XH = I2C_Rd(1);<br> YL = I2C_Rd(1);<br> YH = I2C_Rd(1); // Carrega as informações referentes aos eixos<br> ZL = I2C_Rd(1);<br> ZH = I2C_Rd(0);<br> I2C_Stop();<br> }<br> <br> <br>void Envia_Serial()<br> {<br> Usart_Write(X);<br> Usart_Write(Y);<br> Usart_Write(J);<br> }<br> <br>//****************************************************************<br>//Rotina Principal</font></p> <p><font color="#00ff00">void main() // Início do programa principal<br>{<br>TRISA = 0b00000000;<br>PORTA = 0b00000000;<br>TRISB = 0b00000000;<br>PORTB = 0b00000000;<br>TRISC = 0b00000000;<br>PORTC = 0b00000000;<br>TRISD = 0b00000000;<br>PORTD = 0b00000000;<br>TRISE = 0b00000000;<br>PORTE = 0b00000000;<br>ADCON1 = 0X0F; // Entradas digitais.</font></p> <p><font color="#00ff00">Lcd_Config(&PORTB,2,3,1,7,6,5,4); // Configuração PK2Lab V.1.1<br>Lcd_Cmd(Lcd_Cursor_Off);<br>Lcd_Cmd(Lcd_Clear);<br>Lcd_Out(1,1,"*** PK2Lab ***");<br>Lcd_Out(2,1," Acelerometro ");<br>Delay_ms(3000);<br>Lcd_Cmd(Lcd_Clear);<br>Lcd_Out(1,1,"X:");<br>Lcd_Out(2,1,"Y:");<br>Lcd_Out(2,9,"Z:");</font></p> <p><font color="#00ff00">Usart_Init(9600); // Inicia comunicação RS232<br>I2C_Init(100000); // Inicia comunicação I2C</font></p> <p><br><font color="#00ff00"> I2C_Start(); // Inicia comunicação I2C<br> I2C_Wr(0x3A); // Endereço do LIS3LV02DL para escrita<br> I2C_Wr(0xA0); // Primeira palavra de endereço inicia pelo registrador CTRL_REG1 (0x20) , escrita contínua…<br> I2C_Wr(0xC7); // 11000111 ---> CTRL_REG1 C7<br> I2C_Wr(0x04); // 00000100 ---> CTRL_REG2 04<br> I2C_Stop();</font></p> <p><font color="#00ff00"></font> </p> <p><font color="#00ff00">while(1)<br>{<br>Le_Acelerometro(); // Efetua a leitura de aceleração dos 3 eixos <br>Delay_ms(100);</font></p> <p><font color="#00ff00">X = (XH); // Concatena as partes altas e baixas dos registradores.<br>X = (X<<8) + XL;</font></p> <p><font color="#00ff00">Y = (YH);<br>Y = (Y<<8) + YL;</font></p> <p><font color="#00ff00">J = (ZH); <font color="#ffc000">// Foi usado J no lugar de Z pois Z o compilador usa como Zero <br></font>J = (J<<8) + ZL;</font></p> <p><font color="#00ff00">intToStr(X,txt); <br>Lcd_Out(1,3,txt);<br>intToStr(Y,txt);<br>Lcd_Out(2,3,txt);<br>intToStr(J,txt);<br>Lcd_Out(2,11,txt);</font></p> <p><font color="#00ff00">Envia_serial(); // Envia os dados pela porta serial a 9600bps</font></p> <p><font color="#00ff00">}//while(1)<br>}//main</font></p> <p> <hr> <p><font color="#ff0000" size="3" face="Trebuchet MS">Vídeos do projeto</font></p> <p align="justify"><font face="Trebuchet MS">Neste vídeo podemos observar o projeto em funcionamento.</font></p> <div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:bd4beb3e-da01-4bff-8524-5008113c5d3a" class="wlWriterEditableSmartContent"><div id="855ef797-ffef-4ecf-b458-3d1027ade35f" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=UHBp9ND19_Q&feature=youtube_gdata_player" target="_new"><img src="http://lh5.ggpht.com/-cMcLFTzWf7Y/UPtSkilfR8I/AAAAAAAABWM/cs44hhkWtyY/video3f5174ed511f%25255B61%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('855ef797-ffef-4ecf-b458-3d1027ade35f'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/UHBp9ND19_Q?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/UHBp9ND19_Q?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p align="justify"><font face="Trebuchet MS">Neste outro vídeo, vemos o acelerômetro controlando um equipamento de iluminação profissional (Moving Head) onde controlamos PAN e TILT através da leitura dos eixos X e Y respectivamente.</font></p> <div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:0b725d17-45f4-4295-a813-03ac70b1c936" class="wlWriterEditableSmartContent"><div id="4fdc1aaa-1938-4629-ae87-0b367cfe1871" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=6_0OIImSAyU&feature=youtube_gdata_player" target="_new"><img src="http://lh4.ggpht.com/-r-F-0zPntV4/UPtSlTwD7OI/AAAAAAAABWQ/zNR8GYivOGw/video88bdc885f30a%25255B61%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('4fdc1aaa-1938-4629-ae87-0b367cfe1871'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/6_0OIImSAyU?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/6_0OIImSAyU?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p><font face="Trebuchet MS"></font><font face="Trebuchet MS"></font> </p> <p align="justify"><font face="Trebuchet MS">Gostaria de agradecer imensamente ao Eng. André Braz, representante da empresa ST Microelectronics no Brasil, que gentilmente cedeu algumas peças destas incríveis máquinas assim como muita informação técnica! Valeu André!!!</font></p> <p><font face="Trebuchet MS">Bom pessoal, por hoje é isto, grande abraço a todos e bons projetos!</font></p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com2tag:blogger.com,1999:blog-3194446240058587335.post-53821270018466466872012-12-16T17:29:00.001-08:002012-12-16T17:47:17.846-08:00PK2Lab - Como adquirir sua placa.<p align="justify"><font face="Trebuchet MS">E ai galera, mais um ano que finda, com muitas coisas boas para serem comemoradas e muitas histórias a serem contadas, para mim particularmente foi uma ano de conquistas e abertura de novos horizontes espero que todos possam compartilhar do mesmo sentimento!</font></p> <p align="justify"><font face="Trebuchet MS">Apresento a vocês o novo site da minha empresa JL Audio Manutenção Eletrônica, através do qual serão comercializados os produtos por mim desenvolvidos, entre eles a placa <a href="http://www.jlaudioeletronica.com.br/produtos.html" target="_blank">PK2Lab</a> e o <a href="http://www.jlaudioeletronica.com.br/produtos.html" target="_blank">Curso de microcontroladores PIC</a>.</font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="justify"><font face="Trebuchet MS"><a href="http://www.jlaudioeletronica.com.br/produtos.html" target="_blank"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Site" alt="Site" src="http://lh5.ggpht.com/-M713xBxXkT0/UM51gyFrp6I/AAAAAAAABSE/OrAq5siJeAM/Site%25255B6%25255D.jpg?imgmax=800" width="405" height="345"></a></font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="justify"><font face="Trebuchet MS">Todo o processo de compra pode ser efetuado pelo próprio site, onde é possível ainda simular o valor de frete.</font></p> <p align="justify"><font face="Trebuchet MS">Para compras em maior quantidade, empresas ou instituições de ensino, enviar e-mail para <a href="mailto:contato@jlaudioeletronica">contato@jlaudioeletronica</a> com o assunto PK2Lab, para ter acesso a descontos especiais.</font></p> <p align="justify"><font face="Trebuchet MS">Para facilitar o acesso do hardware ao aluno ou hobbysta, o valor da placa pode ser parcelado em até 18 vezes no cartão de crédito, tornando a tecnologia acessível a todos.</font></p> <p align="center"><font color="#ffff00" face="Trebuchet MS"><strong>Tire seus projetos da tela do PC… crie realmente aplicações reais em tempo real !</strong></font></p> <p align="justify"><font face="Trebuchet MS">É isso ai, grande abraço a todos, um feliz Natal e um próspero Ano Novo! </font></p> <p align="justify"><font face="Trebuchet MS">Em 2013 teremos vários projetos bacanas envolvendo muitos periféricos interessantes… até breve!</font></p> <p align="center"><font face="Trebuchet MS">Jean Carlos</font></p> <p align="center"><font face="Trebuchet MS"><strong>PK2Lab Team! @2012</strong></font></p> <p align="justify"><font face="Trebuchet MS"></font> </p> <p align="justify"><font face="Trebuchet MS"></font></p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-9914042341980882712012-10-27T17:02:00.000-07:002012-10-28T15:28:53.879-07:00Expansão de I/O - 74HC595<p><font face="Trebuchet MS">Pessoal, continuando com os posts relacionados aos CI’s de expansão de I/O, apresento a vocês o CI 74HC595, tal como o CI 74LS164, consiste em um conversor serial paralelo de 8 bits (Shift Register) porém com características que ao meu ver o tornam muito mais interessante que o 74164.</font></p> <p align="center"><a href="http://lh4.ggpht.com/-94dN8bwF3Z0/UI2xmK7OquI/AAAAAAAABKI/9whlzLbqAi0/s1600-h/74595%25255B14%25255D.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="74595" border="0" alt="74595" src="http://lh4.ggpht.com/-RpoeR6qKA6E/UI2xmtloZ1I/AAAAAAAABKQ/aR992P-scak/74595_thumb%25255B9%25255D.jpg?imgmax=800" width="239" height="133"></a></p> <p align="justify"><font face="Trebuchet MS">Uma das características que o tornam tão especial é o fato de possuir dois registradores para manuseio dos dados, sendo:</font></p> <ul> <li> <div align="justify"><font face="Trebuchet MS"><font color="#ff0000" size="3"><strong>Shift Register</strong></font></font></div><font face="Trebuchet MS">Armazena as informações transferidas serialmente como registrador temporário, a cada pulso de clock no pino SRCLK este registrador é carregado bit a bit conforme o nível lógico disponível no pino SER (Entrada Serial).</font></li></ul> <ul> <li> <div align="justify"><font color="#ff0000" size="3" face="Trebuchet MS"><strong>Storage Register</strong></font></div><font face="Trebuchet MS">Este registrador é carregado com as informações disponíveis no registrador Shift Register quando o pino RCLK é pulsado com um nível lógico alto (Latch), ou seja, podemos manusear o envio dos bits um a um e ao término habilitamos o latch. Isto nos trás uma vantagem enorme na simplificação do hardware, pois no caso do uso do 74164 teríamos que providenciar um mecanismo eletrônico que durante a atualização dos dados apagasse o display para evitar que a serialização fosse percebida.</font></li></ul> <p><font face="Trebuchet MS">Além desses dois registradores, o 74595 possui um pino que habilita a operação do mesmo (OE), sendo que quando garantimos um nível alto neste pino temos todas as saídas configuradas como tri-state, ou seja, não drena e nem fornece corrente alguma ao circuito, portando fica configurada como alta impedância.</font></p> <p align="justify"><font face="Trebuchet MS">Outra característica importante é que este CI é capaz de trabalhar com cargas de +- 6ma sendo suficiente para por exemplo, alimentarmos pequenos leds para uso em painéis de IHMs diretamente pelos I/Os do CI.</font></p> <p align="left"><font face="Trebuchet MS">Lógica de operação:</font></p> <p align="left"><font face="Trebuchet MS"><a href="http://lh5.ggpht.com/-GMASj07MyRY/UI2tgftKV1I/AAAAAAAABIc/N_nI3MAyocg/s1600-h/Diagrama-temporal6.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Diagrama temporal" alt="Diagrama temporal" src="http://lh3.ggpht.com/-9Xmk4tTOqD0/UI2tgyWudKI/AAAAAAAABIk/5t17i24gyyI/Diagrama-temporal_thumb4.jpg?imgmax=800" width="415" height="374"></a></font></p> <p align="center"><a href="http://conductiveresistance.com/interactive-595-shift-register-simulator/" target="_blank"><font size="2" face="Trebuchet MS"><strong>Aqui podemos observar o funcionamento deste CI passo a passo!</strong></font></a></p> <p> <hr> <p><font size="4" face="Trebuchet MS"><font color="#ff0000"><strong>Exemplo de uso</strong></font></font></p> <h1><font size="4" face="Trebuchet MS"><font color="#ff0000"></font></font></h1> <p align="justify"><font face="Trebuchet MS">Para exemplificar o uso deste componente, vamos criar uma aplicação junto a PK2Lab, que consiste num contador de 0 à 99 com o uso de dois displays de sete segmentos conectados aos shift registers 74595 em cascata (Daisy Chain), assim podemos criar posteriormente projetos maiores como por exemplo um relógio com horas, minutos e segundos… tendo apenas como limite a sua imaginação!</font></p> <p><font face="Trebuchet MS">Esquema:</font></p> <p align="center"><a href="http://lh4.ggpht.com/-8xEPWDPkxEo/UI2thXkFEwI/AAAAAAAABIs/bfQH68nnOos/s1600-h/Esquema%25255B10%25255D.jpg"><img style="display: inline" title="Esquema" alt="Esquema" src="http://lh6.ggpht.com/-W3eBGk_YvbU/UI2tiGXgdmI/AAAAAAAABI0/uJLXMnWCwE4/Esquema_thumb%25255B8%25255D.jpg?imgmax=800" width="468" height="422"></a></p> <p align="justify"><font face="Trebuchet MS">Podemos observar que além dos pinos de alimentação, são utilizados apenas 3 pinos de I/O para controlar os dois displays, e mesmo aumentando a quantidade de CIs, continuamos utilizando apenas 3 pinos, esta é a grande vantagem de se utilizar a comunicação serial para transferência de dados.</font></p> <p align="center"><a href="http://lh4.ggpht.com/-z2pHaJPdnEc/UI2tkHHyd0I/AAAAAAAABI8/Otpw-DXEHtM/s1600-h/DSC01053%25255B5%25255D.jpg"><img style="display: inline" title="DSC01053" alt="DSC01053" src="http://lh4.ggpht.com/-XX29GBmkXEM/UI2tklLwc_I/AAAAAAAABJE/h7fwokgaUdM/DSC01053_thumb%25255B2%25255D.jpg?imgmax=800" width="469" height="359"></a></p> <p align="justify"><font face="Trebuchet MS">Poderíamos ainda ter utilizado os pinos de Reset e Operational Enable para controlar mais algumas funcionalidades, porém no exemplo não foram implementadas ficando estas a cargo do leitor caso queira implementar.</font></p> <p> <hr> <p align="justify"><font color="#ff0000" size="4" face="Trebuchet MS"><strong>Software</strong></font></p> <p align="justify"><font face="Trebuchet MS">A parte de software deste exemplo já foi explorado anteriormente nos outros posts, apenas temos o acréscimo de um pino de latch que fará com que os dados previamente setados no Shift Register sejam transferidos para os pinos do CI acionando os segmentos dos displays.</font></p> <p align="justify"><font face="Trebuchet MS">Uma prática interessante que podemos adotar ao construir software é o cuidado utilizado ao criar nomes de variáveis dentro de funções, por exemplo, podemos criar uma função chamada Display() e utiliza-lá em muitos projetos com grande facilidade, basta apenas que as variáveis internas desta função utilizem características próprias da função de origem, neste exemplo podemos observar que foi criada a função SN74HC595() e todas as variáveis internas desta função começam com SN74HC595_ seguido do nome da variável propriamente dito, a primeira vista temos a impressão de que o programa fica carregado, porém, facilita muito o inter-relacionamento das variáveis como um todo.</font></p> <p align="justify">Outro ponto interessante é a chamada recorrente de funções, na linha abaixo podemos ver que chamamos a função display() duas vezes dentro da função SN74HC595().</p> <p align="justify"><font color="#ffc000">SN74HC595(Display(Unidade), Display(Dezena));</font></p> <p align="justify"><font color="#ffffff" face="Trebuchet MS">Com esta única linha de comando montamos os dois bytes referentes aos dígitos de dezena e unidade e enviamos serialmente essas informações.</font></p> <p align="justify"><font color="#00ff00">/******************************************************************************</font></p> <p><font color="#00ff00"> JL Audio Manutenção Eletrônica</font></p> <p><font color="#00ff00">Data: 10/2012<br>Autor: Jean Carlos<br>Projeto: Registrador de deslocamento SN74HC595<br>Microprocessador: PIC18F4520<br>Clock do processador: 8MHz<br>Estação de desenvolvimento: PK2Lab V 1.1<br>Compilador: MikroC PRO V 4.60.0.0<br>Versão atual: 1.0<br>Descrição:</font></p> <p><font color="#00ff00"> Demonstração do uso de shift register para expansão de I/O</font></p> <p><br><font color="#00ff00">*******************************************************************************/<br>// Inicializações do programa</font></p> <p><font color="#00ff00">// Configuração do LCD da placa PK2Lab V.1.1</font></p> <p><font color="#00ff00">sbit LCD_RS at RB2_bit;<br>sbit LCD_EN at RB3_bit;<br>sbit LCD_D4 at RB4_bit;<br>sbit LCD_D5 at RB5_bit;<br>sbit LCD_D6 at RB6_bit;<br>sbit LCD_D7 at RB7_bit;</font></p> <p><font color="#00ff00">sbit LCD_RS_Direction at TRISB2_bit;<br>sbit LCD_EN_Direction at TRISB3_bit;<br>sbit LCD_D4_Direction at TRISB4_bit;<br>sbit LCD_D5_Direction at TRISB5_bit;<br>sbit LCD_D6_Direction at TRISB6_bit;<br>sbit LCD_D7_Direction at TRISB7_bit;</font></p> <p><font color="#00ff00">//******************************************************************************<br>// Variáveis Globais</font></p> <p><font color="#00ff00">short Contador = 0; // Variável para contagem de 0 a 99.<br>short Dezena = 0, Unidade = 0;</font></p> <p><font color="#00ff00">#define Latch PORTC.B0<br>#define Clock PORTC.B1<br>#define Ser_Out PORTC.B2</font></p> <p><font color="#00ff00">//******************************************************************************<br>// Rotinas Auxiliares<br>//******************************************************************************<br>// Driver de display de 7 segmentos, número a ser impresso é passado como<br>// argumento da função.</font></p> <p><font color="#00ff00">unsigned char Display(unsigned char no)<br>{<br> unsigned char Pattern;<br> unsigned char SEGMENT[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,<br> 0x7D,0x07,0x7F,0x6F};</font></p> <p><font color="#00ff00"> Pattern = SEGMENT[no]; // Segmento a retornar<br> return (Pattern);<br>}</font></p> <p><font color="#00ff00">void SN74HC595(char SN74HC595_Display1, char SN74HC595_Display2)<br>{<br> short SN74HC595_Aux; // Variável local de controle do laço for<br> for(SN74HC595_Aux = 0; SN74HC595_Aux < 8; SN74HC595_Aux ++)<br> {<br> if( SN74HC595_Display1 & 0b10000000) Ser_Out = 1;// Máscara o sétimo bit<br> else Ser_Out = 0; // e verifica se é zero ou um.<br> SN74HC595_Display1 = SN74HC595_Display1 << 1; // Rotaciona o próximo bit<br> Clock = 1; // Pulsa o clock para envio do bit<br> Delay_us(1);<br> Clock = 0;<br> }<br> Ser_Out = 0; // Mantém a linha de dados em nivel baixo<br> <br> for(SN74HC595_Aux = 0; SN74HC595_Aux < 8; SN74HC595_Aux ++)<br> {<br> if( SN74HC595_Display2 & 0b10000000) Ser_Out = 1;// Máscara o sétimo bit<br> else Ser_Out = 0; // e verifica se é zero ou um.<br> SN74HC595_Display2 = SN74HC595_Display2 << 1; // Rotaciona o próximo bit<br> Clock = 1; // Pulsa o clock para envio do bit<br> Delay_us(1);<br> Clock = 0;<br> }<br> Ser_Out = 0; // Mantém a linha de dados em nivel baixo<br> <br> Latch = 1;<br> Delay_us(1);<br> Latch = 0;<br>}</font></p> <p><font color="#00ff00"></font> </p> <p><font color="#00ff00">//******************************************************************************<br>//Rotina Principal</font></p> <p><font color="#00ff00">void main()<br>{<br>TRISA = 0b00000000;<br>PORTA = 0b00000000;<br>TRISB = 0b00000000;<br>PORTB = 0b00000000;<br>TRISC = 0b00000000;<br>PORTC = 0b00000000;<br>TRISD = 0b00000000;<br>PORTD = 0b00000000;<br>TRISE = 0b00000000;<br>PORTE = 0b00000000;<br>ADCON1 = 0X0F; // Entradas digitais.<br>OSCCON.B5 = 1; // Ajusta oscilador interno para 8MHz<br>OSCCON.B4 = 1; // Ajusta oscilador interno para 8MHz</font></p> <p><font color="#00ff00">Lcd_Init();<br>Lcd_Cmd(_Lcd_Cursor_Off);<br>Lcd_Cmd(_LCD_CLEAR);<br>Lcd_Out(1,1,"*** PK2Lab ***");<br>Lcd_Out(2,1,"Shift SN74HC595");<br>Sound_Init(&PORTE,0);<br>Sound_Play(1000,200);<br>Delay_ms(100);<br>Sound_Play(1000,200);</font></p> <p><font color="#00ff00">while(1)<br>{<br> Dezena = Contador / 10;<br> Unidade = Contador % 10;<br> SN74HC595(Display(Unidade), Display(Dezena));<br> Delay_ms(200);<br> Contador ++;<br> if(Contador == 100)<br> {<br> Contador = 0;<br> Sound_Play(1000,200);<br> Delay_ms(100);<br> Sound_Play(1000,200);<br> Delay_ms(100);<br> Sound_Play(1000,200);<br> while(1){}; // Trava o programa até ser pressionado o reset<br> }<br> <br>}//while(1)<br>}//main</font></p> <hr> <p align="center"><a href="http://www.esquemas.org/SN74HC595.c" target="_blank">Download do código</a></p> <p align="left"><font face="Trebuchet MS">Abaixo podemos observar os sinais de controle que foram capturados no analisador lógico, o primeiro sinal é referente ao pino de DADOS, o segundo é o clock e por fim temos o pino de habilitação de transferência(Latch) que é onde efetivamente carregamos os novos valores nos displays.</font></p> <p align="justify"><font face="Trebuchet MS">Analisando as informações podemos ver o número “00” no display, onde os dois pulsos baixos iniciais correspondem aos segmentos “g” e “.” (ponto decimal) apagados e os outros segmentos acesos.</font></p> <p align="center"><a href="http://lh4.ggpht.com/-RL_7piQGvpk/UI2tldeJOsI/AAAAAAAABKY/1aehDVQxiWA/s1600-h/Analisador%25255B6%25255D.jpg"><img style="display: inline" title="Analisador" alt="Analisador" src="http://lh3.ggpht.com/-56zO8d7Pj-s/UI2tl3TCiPI/AAAAAAAABKc/Y9SUASscTTY/Analisador_thumb%25255B4%25255D.jpg?imgmax=800" width="477" height="270"></a></p> <p><font face="Trebuchet MS">Protótipo montado</font></p> <p align="center"><a href="http://lh5.ggpht.com/-h5avUcSgEP4/UI2un6YU_bI/AAAAAAAABJc/jmk8qkAzXdA/s1600-h/Montagem%25255B5%25255D.jpg"><img style="display: inline" title="Montagem" alt="Montagem" src="http://lh4.ggpht.com/-qCsEbLtpgyE/UI2uoR6NQLI/AAAAAAAABJk/iM-1AgLJih8/Montagem_thumb%25255B3%25255D.jpg?imgmax=800" width="482" height="252"></a></p> <p><font face="Trebuchet MS"></font> </p> <p><font face="Trebuchet MS">Vídeo do projeto</font></p> <div style="padding-bottom: 0px; padding-left: 0px; width: 491px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:3001889d-5919-428f-aa99-48a9f73b376a" class="wlWriterEditableSmartContent"><div id="8bb692ab-c429-40bf-83f8-b02ffb6787ce" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=eoGpfCZuCTI&feature=youtube_gdata_player" target="_new"><img src="http://lh5.ggpht.com/-TjQW78qAcXo/UI2uo52oYoI/AAAAAAAABKg/rEsmPYmpqw8/videoae04d75702ef%25255B25%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('8bb692ab-c429-40bf-83f8-b02ffb6787ce'); downlevelDiv.innerHTML = "<div><object width=\"491\" height=\"276\"><param name=\"movie\" value=\"http://www.youtube.com/v/eoGpfCZuCTI?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/eoGpfCZuCTI?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"491\" height=\"276\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p><font face="Trebuchet MS">Bom pessoal, é isso, grande abraço a todos e ótimos projetos!!!</font></p> <p><font face="Trebuchet MS"></font></p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com14tag:blogger.com,1999:blog-3194446240058587335.post-38258528463563543102012-09-12T18:32:00.001-07:002012-09-16T07:25:35.652-07:00Expansão de I/O - 74HC164<p> </p> <p align="justify"><font face="Trebuchet MS">Dando prosseguimento ao último post, venho apresentar um componente bem conhecido dos entusiastas da eletrônica digital, trata-se do circuito integrado SN74HC164, um conversor de dados serial para paralelo de 8 bits também conhecido por registrador de deslocamento ou apenas shift register, sendo este componente facilmente encontrado no mercado brasileiro.</font></p> <p align="center"><a href="http://lh3.ggpht.com/-JZ3XKffivig/UFSV5vIElFI/AAAAAAAABDM/IdEvjLsnAks/s1600-h/ic164131.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="ic164(1)" border="0" alt="ic164(1)" src="http://lh5.ggpht.com/-MtDwNVip46E/UFE3p1bAO1I/AAAAAAAABDU/UTpPtFO1Zyw/ic1641_thumb29.jpg?imgmax=800" width="205" height="161"></a></p> <p align="justify"><font color="#ff0000" size="4" face="Trebuchet MS"><strong>SN74HC164</strong></font></p> <p align="justify"><font face="Trebuchet MS">Este Ci possui um pino para entrada de dados, sendo esta entrada disponibilizada por meio de uma porta AND (entradas A e B), o que facilita o controle de entrada dos dados.</font></p> <p align="center"><a href="http://lh4.ggpht.com/-JDyeQ9jbJ8Q/UFE3qcsZybI/AAAAAAAABCc/M1G9y_afafo/s1600-h/L%2525C3%2525B3gica%25255B6%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Lógica" alt="Lógica" src="http://lh4.ggpht.com/-hymTDfGyDuA/UFE3qzCvczI/AAAAAAAABCk/w8bFf0JF19Q/L%2525C3%2525B3gica_thumb%25255B4%25255D.jpg?imgmax=800" width="460" height="153"></a></p> <p align="justify"><font face="Trebuchet MS">Além dos pinos de entrada de dados, A e B, podemos encontrar um pino para entrada do sinal de clock, podendo operar até 25MHz com a alimentação de 5V, um pino de /CLR que recebe a função de limpar todas as saídas do shift register além dos 8 pinos de saída, pinos estes que podem fornecer uma corrente máxima de 25mA o que já é suficiente para acender de forma eficiente um LED, porém devemos atentar para o fato da corrente máxima admissível entre VDD e VSS que é de 50mA não seja ultrapassada.</font></p> <p align="justify"><font face="Trebuchet MS">Lógica de operação:</font></p> <p align="justify"><a href="http://lh5.ggpht.com/-9py-P18oIdo/UFE3ru_h-JI/AAAAAAAABCs/HYSS5oacqu4/s1600-h/TimeChart%25255B7%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="TimeChart" alt="TimeChart" src="http://lh6.ggpht.com/-6iNrLPO7ueI/UFE3sJdMupI/AAAAAAAABC0/Q8UMaDDbP0o/TimeChart_thumb%25255B5%25255D.jpg?imgmax=800" width="460" height="329"></a></p> <p> <p align="justify"><font face="Trebuchet MS">Como podemos observar, este CI não possui um pino para controle de ativação das saídas, ou seja, assim que enviarmos o conteúdo dos bits serialmente, estas informações aparecerão nos pinos de saída de forma indesejável, podendo causar danos ao hardware ou mão funcionamento do mesmo. Uma alternativa ao SN74HC164 é o circuito integrado CD4094 que abordaremos em um próximo post.</font></p> <p> <hr> <p><strong><font color="#ff0000" size="4" face="Trebuchet MS">Exemplo de Uso</font></strong></p> <p align="justify"><font face="Trebuchet MS">Neste exemplo vamos utilizar o SN74HC164 para adicionar 8 LEDs à placa PK2Lab utilizando apenas 2 pinos do microcontrolador, n<font face="Trebuchet MS">este caso não será utilizado o pino de reset e o mesmo deverá ser conectado ao VCC, este recurso seria interessante no caso de controlarmos displays de 7 segmentos onde teríamos a possibilidade de efetuar o apagamento de todos os dígitos simultaneamente ao aplicarmos um nível lógico baixo no pino 9.</font></font></p> <p align="center"><a href="http://lh5.ggpht.com/-0tbQ7uqldO8/UFSV60nFW4I/AAAAAAAABDY/MJnWPWPv1qY/s1600-h/Esquema9.jpg"><img style="display: inline" title="Esquema" alt="Esquema" src="http://lh3.ggpht.com/-Ia-xU60dxAs/UFSV7WlRq_I/AAAAAAAABDg/TvCyNKYs61c/Esquema_thumb7.jpg?imgmax=800" width="268" height="292"></a></p> <p align="justify"><font face="Trebuchet MS">Caso seja necessário aumentar a quantidade de saídas podemos interligar mais de um shift register em cascata, basta interligarmos o pino 13 (MSB) ao pino de entrada de dados do próximo SN74HC164, assim sucessivamente. </font></p> <p align="center"><a href="http://lh4.ggpht.com/-OZemVx1V_8I/UFSV786AmmI/AAAAAAAABDo/OyJN3YA6uJY/s1600-h/Esquema-29.jpg"><img style="display: inline" title="Esquema 2" alt="Esquema 2" src="http://lh5.ggpht.com/-O0qIVhRR4lc/UFSV8bsDUqI/AAAAAAAABDw/ufKJEq-muQ0/Esquema-2_thumb7.jpg?imgmax=800" width="316" height="502"></a></p> <p align="justify"><font face="Trebuchet MS">Um exemplo de utilização em cascata deste componente pode ser visto na placa DE-DP011, comercializada pela Sure Electronics, que consiste de um conjunto de cinco shift registers serializados para a apresentação de 40 Leds.</font></p> <p align="center"><a href="http://lh5.ggpht.com/-kkTNoNO-WWQ/UFSV86aRuYI/AAAAAAAABD4/fcii8UxBkN8/s1600-h/Sure%252520Foto%25255B6%25255D.jpg"><img style="display: inline" title="Sure Foto" alt="Sure Foto" src="http://lh6.ggpht.com/-oWI1kJJEGdc/UFSV9aFcB3I/AAAAAAAABEA/N503YjlTJxs/Sure%252520Foto_thumb%25255B2%25255D.jpg?imgmax=800" width="232" height="240"></a></p> <p align="justify"><font face="Trebuchet MS">Abaixo podemos observar o funcionamento desta placa em uma IHM, fornecendo indicação visual sobre distância e tensão de bateria.</font></p> <div style="padding-bottom: 0px; margin: 0px auto; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:f4b57477-b77f-48c7-b43c-68d296cc60f0" class="wlWriterEditableSmartContent"><div id="21b65496-5ad7-42a2-ac0b-bb4332edf69e" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=nxT5a9Q5TAI&feature=youtube_gdata_player" target="_new"><img src="http://lh4.ggpht.com/-RBVgIAD6Prc/UFXhW7_jwFI/AAAAAAAABGw/z1ZSOBk2I_0/videoa6b2ff2c870b%25255B3%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('21b65496-5ad7-42a2-ac0b-bb4332edf69e'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"336\"><param name=\"movie\" value=\"http://www.youtube.com/v/nxT5a9Q5TAI?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/nxT5a9Q5TAI?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"336\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p align="left"><font size="3" face="Trebuchet MS"><a href="http://www.esquemas.org/DE-DP011.pdf" target="_blank"><strong>Esquema DE-DP011</strong></a></font></p> <p align="justify"><font face="Trebuchet MS">Para nosso exemplo utilizaremos apenas um CI e 8 Leds para simular um PORT auxiliar, para isto vamos usar o primeiro esquema apresentado neste post.</font></p> <p align="center"><a href="http://lh5.ggpht.com/-_Jwv5qUY6Z8/UFXcNVsClvI/AAAAAAAABF4/bcdTHE0U6xY/s1600-h/Foto_1%25255B5%25255D.jpg"><img style="display: inline" title="Foto_1" alt="Foto_1" src="http://lh5.ggpht.com/-YOdicoulCUU/UFXcOH9Dj3I/AAAAAAAABGA/sxMGA2sgDSU/Foto_1_thumb%25255B3%25255D.jpg?imgmax=800" width="469" height="310"></a></p> <p> <hr> <p><font color="#ff0000" size="3" face="Trebuchet MS"><strong>Software</strong></font></p> <p align="justify"><font face="Trebuchet MS">O Software desenvolvido para este exemplo consiste basicamente de uma função que irá transmitir os dados a serem exibidos no “PORTAux” e uma rotina principal que incrementa uma variável contador a cada 100ms, mostrando o valor de forma binária nos Leds conectados ao SN74HC164.</font></p> <p align="justify"><font face="Trebuchet MS">Para a utilização de mais de um CI cascateado, basta efetuar a chamada da função na mesma proporção de CIs utilizados.</font></p> <p><font color="#00ff00">/******************************************************************************</font></p> <p><font color="#00ff00"> JL Audio Manutenção Eletrônica</font></p> <p><font color="#00ff00">Data: 09/2012<br>Autor: Jean Carlos<br>Projeto: Registrador de deslocamento SN74HC164<br>Microprocessador: PIC18F4520<br>Clock do processador: 8MHz<br>Estação de desenvolvimento: PK2Lab V 1.1<br>Compilador: MikroC PRO V 4.60.0.0<br>Versão atual: 1.0<br>Descrição:</font></p> <p><font color="#00ff00"> Demonstração do uso de shift register para expansão de saídas</font></p> <p><br><font color="#00ff00">*******************************************************************************/<br>// Inicializações do programa</font></p> <p><font color="#00ff00">// Configuração do LCD da placa PK2Lab V.1.1</font></p> <p><font color="#00ff00">sbit LCD_RS at RB2_bit;<br>sbit LCD_EN at RB3_bit;<br>sbit LCD_D4 at RB4_bit;<br>sbit LCD_D5 at RB5_bit;<br>sbit LCD_D6 at RB6_bit;<br>sbit LCD_D7 at RB7_bit;</font></p> <p><font color="#00ff00">sbit LCD_RS_Direction at TRISB2_bit;<br>sbit LCD_EN_Direction at TRISB3_bit;<br>sbit LCD_D4_Direction at TRISB4_bit;<br>sbit LCD_D5_Direction at TRISB5_bit;<br>sbit LCD_D6_Direction at TRISB6_bit;<br>sbit LCD_D7_Direction at TRISB7_bit;</font></p> <p><font color="#00ff00">//******************************************************************************<br>// Variáveis Globais</font></p> <p><font color="#00ff00">unsigned short contador = 0; // Variavel para contagem de 0 a 255.<br>char txt[4]; // Variavel para conversão de dados.</font></p> <p><font color="#00ff00">//******************************************************************************<br>// Rotinas Auxiliares</font></p> <p><font color="#00ff00">#define Clear PORTC.B0<br>#define Clock PORTC.B1<br>#define Ser_Out PORTC.B2</font></p> <p><font color="#00ff00">void SN74HC164(char SN74HC164_Value)<br>{<br>short SN74HC164_Aux; // Variável local de controle do laço for<br>for(SN74HC164_Aux = 0; SN74HC164_Aux < 8; SN74HC164_Aux ++)<br> {<br> if( SN74HC164_Value & 0b10000000) Ser_Out = 1; // Máscara o sétimo bit…<br> else Ser_Out = 0; // e verifica se é zero ou um.<br> SN74HC164_Value = SN74HC164_Value << 1; // Rotaciona o próximo bit<br> Clock = 1; // Pulsa o clock para envio do bit<br> Delay_us(1);<br> Clock = 0;<br> }<br>Ser_Out = 0; // Mantém a linha de dados em nível baixo<br>}</font></p> <p><font color="#00ff00">//******************************************************************************<br>//Rotina Principal</font></p> <p><font color="#00ff00">void main()<br>{<br>TRISA = 0b00000000;<br>PORTA = 0b00000000;<br>TRISB = 0b00000000;<br>PORTB = 0b00000000;<br>TRISC = 0b00000000;<br>PORTC = 0b00000000;<br>TRISD = 0b00000000;<br>PORTD = 0b00000000;<br>TRISE = 0b00000000;<br>PORTE = 0b00000000;<br>ADCON1 = 0X0F; // Entradas digitais.<br>OSCCON.B5 = 1; // Ajusta oscilador interno para 8MHz<br>OSCCON.B4 = 1; // Ajusta oscilador interno para 8MHz</font></p> <p><font color="#00ff00">Lcd_Init();<br>Lcd_Cmd(_Lcd_Cursor_Off);<br>Lcd_Cmd(_LCD_CLEAR);<br>Lcd_Out(1,1,"*** PK2Lab ***");<br>Lcd_Out(2,1,"Shift SN74HC164");<br>Delay_ms(1000);<br>Lcd_Out(2,1,"Contador: ");</font></p> <p><br><font color="#00ff00">while(1)<br>{<br>ByteToStr(Contador, txt); // Converte o byte numa string para impressão no LCD<br>Lcd_Out(2, 11, txt);<br>SN74HC164(Contador); // Envia os dados para o SN74HC164<br>Delay_ms(100); // Delay entre incrementos<br>Contador ++; // Incremento da variável em uma unidade<br>}//while(1)<br>}//main</font></p> <p><font color="#00ff00">//**********************************************************************************************</font></p> <p align="justify"><font face="Trebuchet MS">Abaixo podemos observar os níveis lógicos capturados através do analisador lógico da própria PK2Lab. O pino de dados está conectado ao CH1 e o pino de clock está conectado ao CH2. Nesta captura podemos observar o valor do contador igual a 1.</font></p> <p align="center"><a href="http://lh4.ggpht.com/-fovKVAj7Dt0/UFU8xYPVdoI/AAAAAAAABEk/q9yUyhrNuLM/s1600-h/Logic%252520Analiser%25255B16%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Logic Analiser" alt="Logic Analiser" src="http://lh4.ggpht.com/-8rp89MdDRFA/UFU8xxDfidI/AAAAAAAABEs/Npxx4AnLIj8/Logic%252520Analiser_thumb%25255B12%25255D.jpg?imgmax=800" width="466" height="331"></a></p> <p align="justify"><font face="Trebuchet MS">Na tela abaixo podemos verificar a captura do contador igual a 128, podemos notar que o formato de envio dos dados é enviando primeiro o bit menos significativo (LSB).</font></p> <p align="center"><font face="Trebuchet MS"><a href="http://lh6.ggpht.com/-oiWBtWgYGPc/UFU8yiQ-W6I/AAAAAAAABE0/87YyF0VtPmQ/s1600-h/Logic%252520Analiser_128%25255B10%25255D.jpg"><img style="display: inline" title="Logic Analiser_128" alt="Logic Analiser_128" src="http://lh4.ggpht.com/-jGN0pDOA3Ms/UFU8zeYxIMI/AAAAAAAABE8/UZOIVr_s5cs/Logic%252520Analiser_128_thumb%25255B8%25255D.jpg?imgmax=800" width="468" height="350"></a></font></p> <p align="justify"><font face="Trebuchet MS">Bom pessoal, segue o vídeo do projeto em funcionamento, qualquer dúvida ou sugestão deixem um comentário pois será muito bem vindo!</font></p> <div style="padding-bottom: 0px; padding-left: 0px; width: 459px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:09c9929c-ea89-45ba-a374-76c6aced97a7" class="wlWriterEditableSmartContent"><div id="d71f836b-16f8-4ac5-a686-954ee224887c" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=gmXjRVe0Wqs&feature=youtube_gdata_player" target="_new"><img src="http://lh3.ggpht.com/-iNsuSgbMY6A/UFXcOr9n8oI/AAAAAAAABG4/XHm852QSZRg/videof7c3f5a40215%25255B3%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('d71f836b-16f8-4ac5-a686-954ee224887c'); downlevelDiv.innerHTML = "<div><object width=\"459\" height=\"258\"><param name=\"movie\" value=\"http://www.youtube.com/v/gmXjRVe0Wqs?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/gmXjRVe0Wqs?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"459\" height=\"258\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p align="center"><a href="http://www.esquemas.org/SN74HC164.rar" target="_blank"><font color="#ff0000" size="3" face="Trebuchet MS"><strong>Código do projeto</strong></font></a></p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com5tag:blogger.com,1999:blog-3194446240058587335.post-33046782158650989232012-08-02T17:40:00.000-07:002012-08-02T19:14:53.847-07:00Expansão de I/O - 74HC165<p align="justify"><font face="Trebuchet MS">Quando precisamos utilizar um grande número de pinos de I/O em um microcontrolador e não os dispomos, podemos fazer uso de vários recursos, dentre eles a técnica de multiplexação de pinos ou a utilização de registradores de deslocamento.</font></p> <p align="justify"><font face="Trebuchet MS">A última técnica foi utilizada neste projeto com o intuito de demonstrar como conectar cinco teclas e um encoder rotativo (potenciômetro sem fim) ao microcontrolador utilizando apenas 3 pinos de I/O.</font></p> <p align="center"><a href="http://lh3.ggpht.com/-vkDiAw_uTzc/UBsyOgfZjlI/AAAAAAAAA9k/LaDLdZm8VFk/s1600-h/74HC1657.jpg"><img style="display: inline" title="74HC165" alt="74HC165" src="http://lh6.ggpht.com/-QyLzxw2y_TI/UBsyPicMDzI/AAAAAAAAA9s/7xzOfteJkKg/74HC165_thumb3.jpg?imgmax=800" width="240" height="147"></a></p> <p align="justify"><font color="#ff0000" size="4" face="Trebuchet MS"><strong>74HC165</strong></font></p> <p align="justify"><font face="Trebuchet MS">O circuito integrado 74HC165, consiste de um conversor paralelo serial de 8 bits que pode funcionar em uma frequência máxima de operação de 10MHz, possui dois pinos de clock, sendo um deles atribuído para inibição do mesmo possui ainda, um pino responsável pelo carregamento das informações contidas em suas entradas para um latch interno que é transferido posteriormente de forma serial a cada pulso de clock.</font></p> <p align="justify"><font face="Trebuchet MS">Portanto, para transferirmos a informação contida em suas entradas, precisamos primeiramente carregar estas informações e depois aplicar 8 pulsos de clock.</font></p> <p align="justify"><font face="Trebuchet MS">Neste exemplo conectamos um encoder rotativo com push-botton e mais 4 chaves tact, onde a cada 1ms obtemos seus estados que ficam armazenados na variável <font color="#ff0000">Teclas_8bits</font><font color="#ffffff">.</font></font></p> <p align="center"><a href="http://lh5.ggpht.com/-gFlyzCe9t38/UBsyQPttL5I/AAAAAAAAA90/DWr0Y0RpyQM/s1600-h/Encoder3.jpg"><img style="display: inline" title="Encoder" alt="Encoder" src="http://lh3.ggpht.com/-RnCSAZGgbFs/UBsyQ_qAKBI/AAAAAAAAA98/KBPIDj3LItw/Encoder_thumb1.jpg?imgmax=800" width="240" height="159"></a></p> <p align="center"><font face="Trebuchet MS">O esquema abaixo utiliza um CI 74HC165 conectado ao hardware escolhido.</font></p> <p align="center"><a href="http://lh6.ggpht.com/-b9-1rlmPGyQ/UBsyRgxw3gI/AAAAAAAAA-E/WBf7JAd3wVs/s1600-h/Esquema3.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Esquema" border="0" alt="Esquema" src="http://lh3.ggpht.com/-DtqrRhBdzjE/UBsySDs_6DI/AAAAAAAAA-M/SeyM5Jonp8g/Esquema_thumb1.jpg?imgmax=800" width="487" height="288"></a></p> <p align="justify"><font face="Trebuchet MS">Podemos efetuar a conexão de mais de um CI 74HC165 para obtermos um maior número de I/Os disponíveis, no exemplo abaixo podem se ver a utilização de dois CIs contendo o total de 16 chaves tacts.</font></p> <p align="justify"><a href="http://lh6.ggpht.com/-CSPHViNFUNA/UBsySjHMp6I/AAAAAAAAA-U/9Bi8SGL48t0/s1600-h/2x74hc1659.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="2x74hc165" alt="2x74hc165" src="http://lh3.ggpht.com/-KwJWWFWda8Q/UBsyTYg-VPI/AAAAAAAAA-c/oKrZaWySNQk/2x74hc165_thumb7.jpg?imgmax=800" width="477" height="271"></a></p> <p> <hr> </p> <p><font color="#ff0000" size="4" face="Trebuchet MS"><strong>Software</strong></font></p> <h1><strong><font color="#ffffff" size="4" face="Trebuchet MS"></font></strong></h1> <p align="justify"><font face="Trebuchet MS">O software responsável pela leitura do 74HC165 consiste basicamente de um loop for para deslocar os bits e armazenar os valores na variável que irá conter os estados das entradas, neste processo efetuamos o uso de lógica digital para trabalhar os bits da variável, isto é feito dentro da rotina <font color="#ff0000">SN74165_8bits()</font><font color="#ffffff">.</font></font></p> <p><font color="#00ff00">unsigned char SN74165_8bits()<br>{<br>char count;<br>char bitval;<br>char teclas_8bits = 0;<br>Clock = 1;<br>Load = 0;<br>Load = 1;<br>Clock = 0;<br>for(count=0; count<8; count++)<br> {<br> bitval = Ser_in;<br> teclas_8bits |= (bitval << (7-count));<br> Clock = 1;<br> Clock = 0;<br> }<br>return(teclas_8bits);<br>}</font></p> <p align="justify"><font face="Trebuchet MS">Na linha abaixo podemos observar a aplicação de diversos recursos </font><font face="Trebuchet MS">disponibilizados pelo compilador, para que seja possível maximizar a eficiência do código gerado, sendo a utilização de agrupamentos de operadores e a análise de mais de uma condição na mesma linha de comando.</font></p> <p><font color="#00ff00">teclas_8bits<font color="#ffffff"> |=</font><font color="#ff0000"> </font>(bitval << (7-count));</font></p> <p> <hr> </p> <p align="justify"><font color="#ff0000" size="4" face="Trebuchet MS"><strong>Análise dos sinais de controle</strong></font></p> <p align="justify"><font face="Trebuchet MS">Utilizando a ferramenta de Analisador Lógico disponível na placa PK2Lab podemos observar o funcionamento do código e obter os tempos de clock e load aplicados no CI.</font></p> <p align="justify"><a href="http://lh6.ggpht.com/-Q5u1uuYYGEk/UBsyUJ3iyxI/AAAAAAAAA-k/GsB7IvOHedc/s1600-h/Captura%2525201%25255B5%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Captura 1" alt="Captura 1" src="http://lh4.ggpht.com/-LVzGf3P1Mxo/UBsyUx2pDpI/AAAAAAAAA-s/FmElmkOr_Uw/Captura%2525201_thumb%25255B3%25255D.jpg?imgmax=800" width="471" height="331"></a></p><font color="#00ff00"> <p align="justify"><br></p></font> <p align="justify"><font face="Trebuchet MS">Nesta tela acima podemos observar os sinais <font color="#ffff00">Load</font> no canal 1, o sinal<font color="#ff0000"> </font><font color="#ffff00">Clock</font> no canal 2 e a resposta do CI 74HC165 através do sinal <font color="#ffff00">Ser_in </font><font color="#ffffff">no canal 3</font>, neste caso os bits dos dois últimos pinos estão em nível alto.</font></p> <p align="justify"><font face="Trebuchet MS"><a href="http://lh3.ggpht.com/-gXzOWq_mITo/UBsyVqetj0I/AAAAAAAAA-0/rC3BHQJzRCE/s1600-h/Captura%2525202%25255B7%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Captura 2" alt="Captura 2" src="http://lh4.ggpht.com/-MhBqkXZ2t-4/UBsyWE2gYnI/AAAAAAAAA-8/_7CZWUMYM1c/Captura%2525202_thumb%25255B5%25255D.jpg?imgmax=800" width="475" height="348"></a></font></p> <p align="justify"><font face="Trebuchet MS">Nesta tela podemos ver o primeiro e último pino em nível alto.</font></p> <p align="justify"><font face="Trebuchet MS">Na aba de trigger, o ajuste [ Ch1=\ ] indica que o sinal começará a ser capturado quando o pino <font color="#ffff00">Load</font>, passar do nível alto para o nível baixo, ou seja, o sinal de trigger ou disparo é sensível a borda de descida.</font></p> <p> <hr> </p> <p align="center"><a href="http://lh3.ggpht.com/-Aib3x0HDm88/UBsyXEkfZvI/AAAAAAAAA_E/P8dAo51wZvA/s1600-h/DSC00948%25255B7%25255D.jpg"><img style="display: inline" title="DSC00948" alt="DSC00948" src="http://lh4.ggpht.com/-uAL4uaia8Q4/UBsyX8F1lfI/AAAAAAAAA_M/1vrMf_RUfEk/DSC00948_thumb%25255B4%25255D.jpg?imgmax=800" width="471" height="290"></a></p> <div style="padding-bottom: 0px; padding-left: 0px; width: 484px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:15803ca4-9486-40e0-a5e6-b8306a9c3f38" class="wlWriterEditableSmartContent"><div id="24be3bf7-c5f2-4223-b3e5-163686ee03ca" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=KEG1_Dml5Bk&feature=youtube_gdata_player" target="_new"><img src="http://lh4.ggpht.com/--5lfuSrbIlU/UBsyY2uZG_I/AAAAAAAAA_s/XpReK5iACGw/videof710e9933368%25255B47%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('24be3bf7-c5f2-4223-b3e5-163686ee03ca'); downlevelDiv.innerHTML = "<div><object width=\"484\" height=\"271\"><param name=\"movie\" value=\"http://www.youtube.com/v/KEG1_Dml5Bk?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/KEG1_Dml5Bk?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"484\" height=\"271\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p align="center"><font color="#ff0000" face="Trebuchet MS"><u><a href="http://www.esquemas.org/74HC165.rar" target="_blank">Código do projeto</a></u></font></p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-44239634800222929302012-07-17T18:56:00.000-07:002012-07-19T15:07:46.683-07:00Relógio LCD com números grandes<p align="justify"><font face="Trebuchet MS">Durante o desenvolvimento do projeto de um robô de sumô para a disciplina de projeto integrado II do curso de Engenharia de Controle e Automação, me deparei com a necessidade de mostrar informações numa tela de LCD caractere de 20X4, porém uma grande limitação destes displays facilmente encontrados a venda no comércio é o tamanho efetivo do caractere.</font></p> <p align="justify"><font face="Trebuchet MS">Pensando nisto busquei um artigo que havia me deparado na internet, em que o programador utilizava mais de um caractere para a construção dos dígitos a serem exibidos. O artigo em questão pode ser visto <a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1213319639" target="_blank">aqui</a>.</font></p> <p align="justify"><font face="Trebuchet MS">Utilizando a técnica descrita anteriormente, <a href="http://www.pk2lab.blogspot.com.br/2012/01/caracteres-especiais-no-lcd.html" target="_blank">aqui</a> mesmo neste blog foram criados alguns caracteres especiais que formam os dez algarismos utilizados para a criação deste relógio que apresento hoje a vocês.</font></p> <p align="justify"><a href="http://lh6.ggpht.com/-ysWoG6XIyoA/UAYXwNLX8HI/AAAAAAAAA8U/znB9TQNcT7o/s1600-h/Caracteres%252520Especiais%25255B7%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Caracteres Especiais" alt="Caracteres Especiais" src="http://lh6.ggpht.com/-LmE95SHZCnA/UAYXwhiBL1I/AAAAAAAAA8c/N-TQ2WW3tes/Caracteres%252520Especiais_thumb%25255B5%25255D.jpg?imgmax=800" width="296" height="100"></a></p> <p align="justify"><font face="Trebuchet MS">A junção de quatro destes caracteres especiais formam um numeral decimal que ocupa o lugar de seis caracteres do display com exceção dos dois últimos caracteres que formam os pontos para divisão dos dígitos do relógio.</font></p> <p align="justify"><font face="Trebuchet MS">Para a base de tempo utilizamos o RTC PCF8583 contido na placa PK2Lab, que nos retorna de forma serial as informações referentes a hora, minutos e segundos e ainda gera um sinal de clock de 1Hz para a atualização dos dados no display a cada segundo.</font></p> <p align="center"><img src="http://www.dzsc.com/icstock/uploadfile/200911816059504.jpg" width="186" height="149"></p> <p align="justify"><font face="Trebuchet MS">O microcontrolador escolhido para este exemplo é o PIC18F4520, por ser o microcontrolador escolhido pela Microchip como substituto natural ao PIC16F877 sendo a pinagem totalmente compatível com os microcontroladores da linha 16F, portanto os pinos de comunicação I2C também seguem esta regra, consequentemente a placa tem que estar com os jumpers na posição 16F e não na posição 18F como usual.</font></p> <p align="justify"><a href="http://lh4.ggpht.com/-r36sAUUTcX0/UAYXwy5WZxI/AAAAAAAAA8k/vUQMVxrYUzY/s1600-h/1%25255B6%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="1" alt="1" src="http://lh4.ggpht.com/-vmHK-npukaM/UAYXxTJM1CI/AAAAAAAAA8s/D2eq5hqW3wU/1_thumb%25255B4%25255D.jpg?imgmax=800" width="189" height="156"></a></p> <p align="justify"><font face="Trebuchet MS">Os pinos de enables dos leds devem estar dasabilitados para não influenciarem na comunicação serial I2C.</font></p> <p align="justify"><font face="Trebuchet MS">O programa foi desenvolvido utilizando a ferramenta MikroC PRO e foi baseado no código exemplo do RTC que acompanha a placa, apenas foram feitas algumas modificações para a inserção do código que gera os caracteres maiores no LCD.</font></p> <p align="justify"><font face="Trebuchet MS">Para este projeto foi utilizado o oscilador interno de 8MHz do microcontrolador, é importante observar que por default o microcontrolador opera com uma frequência de 1MHz e é necessário que sejam setados dois bits do registrador OSCCON para configurar a frequência de 8MHz.</font></p> <p><font color="#00ff00">OSCCON.B5 = 1; // Ajusta oscilador interno para 8MHz<br>OSCCON.B4 = 1; // Ajusta oscilador interno para 8MHz</font></p> <p><font color="#ffffff" face="Trebuchet MS">Foram criadas algumas funções para conversão e exibição dos números no LCD.</font></p> <p><font color="#00ff00">void Caracter_Especial() </font></p> <p><font color="#ffffff" face="Trebuchet MS">Cria os caracteres especiais na CGRAM do display LCD</font></p> <p><font color="#00ff00">void Converte_Numeros(char numero,char lin, char col) </font></p> <p><font color="#ffffff" face="Trebuchet MS">Efetua a conversão dos numeros do RTC para os digitos grandes</font></p> <p><font color="#00ff00">void Display_Time()</font></p> <p><font color="#ffffff" face="Trebuchet MS">Mostra os digitos na tela do display LCD</font></p> <p><font color="#00ff00">void ZERO(char linha, char coluna)</font></p> <p><font color="#ffffff" face="Trebuchet MS">Prepara os caracteres especias para exibição dos digitos grandes</font></p> <p><font color="#00ff00">void PONTOS(char linha, char coluna)</font></p> <p><font color="#ffffff" face="Trebuchet MS">Prepara os caracteres especiais para exibição dos pontos</font></p> <hr> <p align="justify"><font face="Trebuchet MS">O resultado pode ser visto abaixo:</font></p> <p align="justify"><a href="http://lh5.ggpht.com/-xclBcWEZFjA/UAYXx7Onm6I/AAAAAAAAA80/vMAmCpKFRtk/s1600-h/DSC00926%25255B11%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="DSC00926" alt="DSC00926" src="http://lh3.ggpht.com/-f8yluvCOj30/UAYXyeYrCdI/AAAAAAAAA88/g5FJX53CQVs/DSC00926_thumb%25255B8%25255D.jpg?imgmax=800" width="473" height="279"></a></p> <p><font face="Trebuchet MS"></font> </p> <div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:a21d2329-4546-4b1e-bc03-5438ce987654" class="wlWriterEditableSmartContent"><div id="7c3ba089-a81c-4399-874a-ac4f676c36fc" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=fVVDQBIIcDA&feature=youtube_gdata_player" target="_new"><img src="http://lh6.ggpht.com/-vnE2_fOm7uc/UAiEIR0sxvI/AAAAAAAAA9U/dO8e1sUwO7E/videod9ba58e66ec3%25255B13%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('7c3ba089-a81c-4399-874a-ac4f676c36fc'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/fVVDQBIIcDA?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/fVVDQBIIcDA?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p> </p> <p align="center"><strong><font face="Trebuchet MS"><a href="http://www.esquemas.org/Relogio_LCD.rar" target="_blank">Código do projeto</a></font></strong></p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com5tag:blogger.com,1999:blog-3194446240058587335.post-40438709264324578822012-06-19T18:33:00.001-07:002012-06-21T17:46:20.579-07:00Conversor Digital Analógico R2R<p> </p> <p align="justify"><font color="#ff0000" size="3" face="Trebuchet MS"><strong>Conversores Digitais</strong></font></p> <p align="justify"><font face="Trebuchet MS">Durante muito tempo fiquei intrigado com a eletrônica no que diz respeito a conversão de grandezas entre o mundo real e o mundo digital. No mundo real, as grandezas podem ser analisadas de forma contínua, já no mundo digital, onde temos a representação de grandezas em formado binário (temos apenas bits que podem valer 0 ou 1) estas grandezas devem ser discretizadas, ou seja, tanto o tempo (amostragem) quanto a amplitude (quantização) devem ser analisados.</font></p> <p align="justify"><font face="Trebuchet MS">O processo de amostragem do sinal consiste em obter instantâneamente o valor do sinal a ser processado em intervalos regulares, sendo que a frequência destes intervalos definem a taxa de amostragem do conversor.</font></p> <p align="justify"><font face="Trebuchet MS">Para que a resposta de um conversor digital possa ser substâncialmente eficiente em relação a entrada (conversor AD) ou a saída (conversor DA), se faz necessário que se respeite o teorema de Nyquist, que diz que a frequência de amostragem deve ser de pelo menos duas vezes maior que a maior frequência a ser amostrada. Um exemplo prático da aplicação desta teoria pode ser observada em aparelhos reprodutores de CD em que normalmente se informa a taxa de seu conversor interno que é de 44100Hz, ou seja mais de 2 vezes a maior frequência audível ao ser humano que está na faixa dos 20000Hz.</font></p> <p align="justify"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Harry Nyquist (1889–1976)" alt="Harry Nyquist (1889–1976)" src="http://upload.wikimedia.org/wikipedia/en/thumb/b/b4/Harry_Nyquist.jpg/200px-Harry_Nyquist.jpg" width="137" height="161"></p> <p align="center">Harry Nyquist (1889–1976)</p><strong><font color="#ff0000" size="3" face="Trebuchet MS"> <p align="left"> <hr> </p> <p align="left">Conversor DA R2R</font></strong></p> <p align="justify"><font face="Trebuchet MS">Neste projeto vamos efetuar a implementação de um conversor Digital Analógico utilizando um método muito eficiente de conversão que utiliza apenas dois valores de resistores, facilitando a construção e calibração do mesmo. Este conversor pode ser montado em um protoboard resistor por resistor ou comprado em um único package já contendo todos os resistores devidamente ajustados, este componente é conhecido como rede R2R. (R2R network)</font></p> <p align="center"><a href="http://lh3.ggpht.com/-p9DqPn1ksjY/T-EoXvg_gFI/AAAAAAAAA5Q/FdXlNjqBodI/s1600-h/Bourns-4610X-R2R-103LF%25255B3%25255D.jpg"><img style="display: inline" title="Bourns-4610X-R2R-103LF" alt="Bourns-4610X-R2R-103LF" src="http://lh4.ggpht.com/-dSR0LCmS5FQ/T-EoYGGei0I/AAAAAAAAA5Y/72oYZlD_r0s/Bourns-4610X-R2R-103LF_thumb%25255B3%25255D.jpg?imgmax=800" width="164" height="139"></a></p> <p align="justify"><font face="Trebuchet MS">A placa PK2Lab, possui conectores de expansão que possibilitam a conexão de placas externas, como por exemplo a placa fornecida pela </font><a href="http://www.mikroe.com/eng/products/view/223/r2r-dac-board/" target="_blank"><font face="Trebuchet MS">Mikroelektronica</font></a><font face="Trebuchet MS"> que consiste um em conversor DA R2R completo que pode fornecer uma corrente máxima de 20mA em sua saída.</font></p> <p align="center"><a href="http://lh6.ggpht.com/-shw1HNAlfKc/T-EoYtvOy6I/AAAAAAAAA5g/KhqqDIO99jQ/s1600-h/Placa%25255B3%25255D.png"><img style="display: inline" title="Placa" alt="Placa" src="http://lh4.ggpht.com/-haM7tfsWlnA/T-EoZYHR2hI/AAAAAAAAA5o/c-OTHf52DY0/Placa_thumb%25255B1%25255D.png?imgmax=800" width="240" height="85"></a></p> <p align="justify"><font face="Trebuchet MS">Nesta placa podemos observar a utilização de resistores de dois valores distintos, sendo 47K e 100K representando respectivamente R e 2R conforme o esquema abaixo:</font></p> <p align="justify"><a href="http://lh6.ggpht.com/-kWD0hX45AXo/T-EoZpE-04I/AAAAAAAAA5w/iGW9gySVBlA/s1600-h/Esquema%25255B14%25255D.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Esquema" alt="Esquema" src="http://lh4.ggpht.com/-_s_DfxO2T9k/T-EoaMYO-KI/AAAAAAAAA54/6Bwcrc3Dmck/Esquema_thumb%25255B8%25255D.png?imgmax=800" width="458" height="269"></a></p> <p align="justify"><font face="Trebuchet MS">Pode-se observar ainda a utilização de um amplificador do tipo Rail-to-Rail da Microchip operando como buffer de saída, está etapa pode ser obtida à partir de um simples amplificador operacional.</font></p> <p align="center"><a href="http://lh4.ggpht.com/-LbUKCGVTJ5g/T-EoaTc1SJI/AAAAAAAAA6A/MAoE9G2688o/s1600-h/buffer%25255B4%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="buffer" border="0" alt="buffer" src="http://lh5.ggpht.com/-9AxtrZ-Q-SY/T-Eoa1kk2QI/AAAAAAAAA6I/N-fkzxWem90/buffer_thumb%25255B2%25255D.png?imgmax=800" width="179" height="124"></a></p> <p align="justify"><font face="Trebuchet MS">A vantagem de se utilizar amplificadores do tipo Rail-to-Rail, é o fato de a saída do sinal poder trabalhar praticamente no limite dos níveis de alimentação do operacional, isto é muito bem vindo quando trabalhamos com tensões de 3V por exemplo.</font></p> <p align="justify"><font face="Trebuchet MS">Até aqui temos o nosso hardware do conversor DA implementado, e para demonstrar o funcionamento do mesmo na prática, vamos gerar uma forma de onde senoidal podendo servir de base para um gerador de funções digital.</font></p> <p align="justify"><font face="Trebuchet MS">Para tanto, vamos utilizar uma tabela no microcontrolador que conterá os valores a serem aplicados na rede R2R do conversor DA para obtenção da senoide.</font></p> <p align="justify"><font face="Trebuchet MS">Esta tabela pode ser gerada contendo todos os pontos que formam a senoide completa de 0 a 2 pi de forma direta ponto a ponto, como mostrado no programa picseno1, ou utilizando a função de cosseno para gerar metade da senoide, sendo a outra metade é obtida através do espelhamento da primeira que será apresentada implementado no programa picsen2.</font></p> <p align="center"> </p> <p align="center"><a href="http://lh3.ggpht.com/-6mF7iZ38z08/T-O77sKhezI/AAAAAAAAA6Y/V9el3Iu5zXI/s1600-h/coseno%25255B4%25255D.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="coseno" alt="coseno" src="http://lh5.ggpht.com/-FU_WhygyhrU/T-O78MNVo3I/AAAAAAAAA6g/-5xGdkdOsoI/coseno_thumb%25255B2%25255D.png?imgmax=800" width="184" height="151"></a></p> <p align="center"><font face="Trebuchet MS"><u>Função Cosseno</u></font></p> <p align="justify"><a href="http://lh4.ggpht.com/-6TMb3_BTumg/T-O78qaWBiI/AAAAAAAAA6o/QKpCkm37mvQ/s1600-h/seno%25255B4%25255D.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="seno" alt="seno" src="http://lh5.ggpht.com/-REudDAoS1Pw/T-O78wYGtOI/AAAAAAAAA6w/206y2X1rTmM/seno_thumb%25255B2%25255D.png?imgmax=800" width="403" height="148"></a></p> <p align="center"><font face="Trebuchet MS"><u>Função Seno obtida da junção da função cosseno direta e espelhada</u></font></p> <p align="center"><u><font face="Trebuchet MS"></font></u> </p> <p align="justify"><font face="Trebuchet MS">A função cosseno que será usada para criar a tabela pode ser implementada no MikroC PRO utilizando uma função interna do compilador.</font></p> <p align="justify"><strong><font color="#ff0000"><font face="Trebuchet MS">cosE3 (ângulo em graus)</font> </font></strong></p> <p align="justify"><font face="Trebuchet MS">Esta função retorna o valor do cosseno do ângulo passado como parâmetro multiplicado por 1000 e arredondado para um valor inteiro aproximado. Exemplo: cosE3(45) resulta em 707 que corresponde a 0.707 valor do cosseno de 45°.</font></p> <p align="justify"><font face="Trebuchet MS">Para definir a frequência de saída do gerador, podemos utilizar a fórmula abaixo que leva em consideração a quantidade de pontos de amostra e a frequência desejada para definirmos o tempo de delay para a amostragem do sinal.</font></p> <p align="center"><font color="#ff0000" face="Trebuchet MS"><strong>Valor_Delay = 1/(frequência * 360)</strong></font></p> <p align="left"><font face="Trebuchet MS">Como utilizamos 360 pontos para criar a nossa forma de onda, obtivemos um resultado muito bom, mesmo sem a utilização de filtro passa baixa na saída.</font></p> <p align="left">Fotos do projeto:</p> <p align="left"><a href="http://lh4.ggpht.com/-pZPQroQpZek/T-O_tAIQlMI/AAAAAAAAA68/jizIZWYDgn8/s1600-h/foto%252520%2525282%252529%25255B13%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="foto (2)" alt="foto (2)" src="http://lh3.ggpht.com/-AIwibrFWp58/T-O_t-FQZWI/AAAAAAAAA7E/RFd-dLvS1Nc/foto%252520%2525282%252529_thumb%25255B11%25255D.jpg?imgmax=800" width="397" height="344"></a></p> <p align="left"><a href="http://lh5.ggpht.com/-yZnILg5r7eA/T-O_uhYH-tI/AAAAAAAAA7M/0VftxHMXypQ/s1600-h/foto%252520%2525281%252529%25255B7%25255D.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="foto (1)" alt="foto (1)" src="http://lh4.ggpht.com/-z5gnN8YPlRk/T-O_vNH8Z5I/AAAAAAAAA7U/XC37PqHMmW4/foto%252520%2525281%252529_thumb%25255B5%25255D.jpg?imgmax=800" width="403" height="318"></a></p> <p align="left"> </p> <p align="center"><font face="Trebuchet MS"></font> </p> <hr> <p align="left"><font face="Trebuchet MS">Programa picsen1.c</font></p> <p><font color="#00ff00">/******************************************************************************</font></p> <p><font color="#00ff00"> JL Audio Manutenção Eletrônica</font></p> <p><font color="#00ff00">Data: Junho 2012<br>Autor: Jean Carlos<br>Projeto: Gerador Senoidal<br>Microprocessador: PIC18F4550<br>Clock do processador: 48MHz<br>Estação de desenvolvimento: PK2Lab V 1.1<br>Compilador: MikroC PRO V 4.60.0.0<br>Versão atual:<br>Descrição:</font></p> <p><font color="#00ff00"> Gerador de sinal senoidal utilizando tabela de referencia</font></p> <p><br><font color="#00ff00">*******************************************************************************/<br>// Inicializações do programa</font></p> <p><font color="#00ff00">// Configuração do LCD da placa PK2Lab V.1.1</font></p> <p><font color="#00ff00">sbit LCD_RS at RB2_bit;<br>sbit LCD_EN at RB3_bit;<br>sbit LCD_D4 at RB4_bit;<br>sbit LCD_D5 at RB5_bit;<br>sbit LCD_D6 at RB6_bit;<br>sbit LCD_D7 at RB7_bit;</font></p> <p><font color="#00ff00">sbit LCD_RS_Direction at TRISB2_bit;<br>sbit LCD_EN_Direction at TRISB3_bit;<br>sbit LCD_D4_Direction at TRISB4_bit;<br>sbit LCD_D5_Direction at TRISB5_bit;<br>sbit LCD_D6_Direction at TRISB6_bit;<br>sbit LCD_D7_Direction at TRISB7_bit;</font></p> <p><font color="#00ff00">//******************************************************************************<br>// Variáveis Globais</font></p> <p><font color="#00ff00">char amostra;<br>char tabela_Seno[] =<br>{127, 130, 133, 136, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173,<br> 176, 179, 182, 185, 187, 190, 193, 195, 198, 201, 203, 206, 208, 211, 213, 215, <br> 217, 220, 222, 224, 226, 228, 230, 232, 233, 235, 237, 238, 240, 241, 242, 244, <br> 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 253, 254, 254, 254, 254, 255, <br> 255, 254, 254, 254, 254, 253, 253, 252, 252, 251, 250, 250, 249, 248, 247, 246, <br> 244, 243, 242, 240, 239, 237, 236, 234, 232, 231, 229, 227, 225, 223, 221, 219, <br> 216, 214, 212, 209, 207, 204, 202, 199, 197, 194, 191, 189, 186, 183, 180, 177, <br> 175, 172, 169, 166, 163, 160, 157, 154, 150, 147, 144, 141, 138, 135, 132, 129, <br> 125, 122, 119, 116, 113, 110, 107, 104, 100, 97, 94, 91,88, 85, 82, 79, 77, 74, <br> 71, 68, 65, 63, 60, 57, 55, 52, 50, 47, 45, 42, 40, 38, 35, 33, 31, 29, 27, 25, <br> 23, 22, 20, 18, 17, 15, 14, 12, 11, 10, 8, 7, 6, 5, 4, 4, 3, 2, 2, 1, 1, 0, 0, <br> 0, 0, 0, 0, 0, 0, 0, 0,1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17,<br> 19, 21, 22, 24, 26, 28, 30, 32, 34, 37, 39, 41, 43, 46, 48, 51, 53, 56, 59, 61, <br> 64, 67, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96,99,102, 105, 108, 111, 114, 118, <br> 121, 124, 127 };</font></p> <p><font color="#00ff00">//******************************************************************************<br>//Rotina Principal</font></p> <p><font color="#00ff00"></font><br><font color="#00ff00">void main() <br>{<br>TRISA = 0b00000000;<br>PORTA = 0b00000000;<br>TRISB = 0b00000000;<br>PORTB = 0b00000000;<br>TRISC = 0b00000000;<br>PORTC = 0b00000000;<br>TRISD = 0b00000000;<br>PORTD = 0b00000000;<br>TRISE = 0b00000000;<br>PORTE = 0b00000000;<br>ADCON1 = 0X0F; // Entradas digitais.</font></p> <p><font color="#00ff00">Lcd_Init();<br>Lcd_Cmd(_Lcd_Cursor_Off);<br>Lcd_Cmd(_LCD_CLEAR);<br>Lcd_Out(1,1,"*** PK2Lab ***");<br>Lcd_Out(2,1,"Gerador Senoidal");</font></p> <p><font color="#00ff00">while(1)<br> {<br> for(amostra = 0; amostra <= 256; amostra++)<br> {<br> PORTD = Tabela_Seno[amostra];<br> delay_us(65); // Delay = 1/(Freq*256)<br> } // Para 60Hz --> 1/(60*256) = 65us<br> }<br>}</font></p> <hr> <p align="left"><font face="Trebuchet MS">Programa picsen2.c</font></p> <p><font color="#00ff00">/******************************************************************************</font></p> <p><font color="#00ff00"> JL Audio Manutenção Eletrônica</font></p> <p><font color="#00ff00">Data: Junho 2012<br>Autor: Jean Carlos<br>Projeto: Gerador Senoidal 60Hz<br>Microprocessador: PIC18F4550<br>Clock do processador: 48MHz<br>Estação de desenvolvimento: PK2Lab V 1.1<br>Compilador: MikroC PRO V 4.60.0.0<br>Versão atual:<br>Descrição:</font></p> <p><font color="#00ff00"> Este circuito gera uma senoide de 60Hz com 180 Amostras</font></p> <p><br><font color="#00ff00">*******************************************************************************/<br>// Inicializações do programa</font></p> <p><font color="#00ff00">// Configuração do LCD da placa PK2Lab V.1.1</font></p> <p><font color="#00ff00">sbit LCD_RS at RB2_bit;<br>sbit LCD_EN at RB3_bit;<br>sbit LCD_D4 at RB4_bit;<br>sbit LCD_D5 at RB5_bit;<br>sbit LCD_D6 at RB6_bit;<br>sbit LCD_D7 at RB7_bit;</font></p> <p><font color="#00ff00">sbit LCD_RS_Direction at TRISB2_bit;<br>sbit LCD_EN_Direction at TRISB3_bit;<br>sbit LCD_D4_Direction at TRISB4_bit;<br>sbit LCD_D5_Direction at TRISB5_bit;<br>sbit LCD_D6_Direction at TRISB6_bit;<br>sbit LCD_D7_Direction at TRISB7_bit;</font></p> <p><font color="#00ff00">//******************************************************************************<br>// Variáveis Globais</font></p> <p><font color="#00ff00">char sample;<br>char array[181];</font></p> <p><font color="#00ff00">//******************************************************************************<br>//Rotina Principal</font></p> <p><br><font color="#00ff00">void main() {<br>TRISA = 0b00000000;<br>PORTA = 0b00000000;<br>TRISB = 0b00000000;<br>PORTB = 0b00000000;<br>TRISC = 0b00000000;<br>PORTC = 0b00000000;<br>TRISD = 0b00000000;<br>PORTD = 0b00000000;<br>TRISE = 0b00000000;<br>PORTE = 0b00000000;<br>ADCON1 = 0X0F; // Entradas digitais.</font></p> <p><font color="#00ff00">Lcd_Init();<br>Lcd_Cmd(_Lcd_Cursor_Off);<br>Lcd_Cmd(_LCD_CLEAR);<br>Lcd_Out(1,1,"*** PK2Lab ***");<br>Lcd_Out(2,1,"Gerador Senoidal");<br>Delay_ms(1000);<br> <br> for (sample = 0; sample <= 180; sample++) // 181 amostras de 0 a pi<br> { <br> array[sample] = (255l * (1000 + cosE3(sample)))/2000; </font></p> <p><font color="#00ff00"> }</font></p> <p><font color="#00ff00"> while(1) <br> {<br> for (sample = 0; sample <= 180; sample++) // Amostras de 0 a pi<br> {</font><font color="#00ff00"><br> PORTD = array[sample]; // Delay = 1/(Freq*360)<br> Delay_us(46); // Para 60Hz 46.29us</font></p> <p><font color="#00ff00"> }<br> <br> for (sample = 179; sample > 0; sample—) // Amostras de pi a 2pi<br> {<br> PORTD = array[sample];<br> Delay_us(46);<br> }<br> }<br>}</font></p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-68872002173925458402012-04-29T15:30:00.000-07:002012-04-29T16:19:28.954-07:00Teclado Matricial<p> </p> <p align="justify"><font face="Trebuchet MS">Dentre as várias maneiras de interagirmos com o hardware em uma IHM (Interface Homem Máquina) uma das formas mais comuns é através do pressionamento de chaves e botoeiras para que o programa possa então executar uma tarefa específica. </font></p> <p align="justify"><font face="Trebuchet MS">Hoje vamos interfacear um teclado matricial, como o encontrado em telefones celulares e calculadoras, onde temos várias chaves conectadas ao microcontrolador de maneira eficiente a fim de não despediçarmos pinos do hardware.</font></p> <p><a href="http://lh3.ggpht.com/-JzRWp7zjhz4/T53Mc9QGi7I/AAAAAAAAA1c/z3_pKE_lZ8k/s1600-h/foto8.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="foto" alt="foto" src="http://lh3.ggpht.com/-D_1U52_5nYU/T53MderIhlI/AAAAAAAAA1k/1qvZ42y6b9o/foto_thumb9.jpg?imgmax=800" width="313" height="179"></a></p> <p align="justify"><font face="Trebuchet MS">Para efetuar a conexão de uma tecla ao microcontrolador, podemos citar a maneira mais simples que utiliza apenas uma tecla e um resistor de Pull-up ou Pull-down conforme o nível de tensão que desejarmos quando ocorrer o pressionamento da tecla.</font></p> <p><a href="http://lh6.ggpht.com/-vo4cAIk4K8I/T5xwRXcUxKI/AAAAAAAAA1s/CcErKdvOtp4/s1600-h/Chave-HI-LO_118.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Chave HI-LO_1" alt="Chave HI-LO_1" src="http://lh5.ggpht.com/-LiDG9-0N43I/T5xwR3BRNFI/AAAAAAAAA1w/of1uPZwkna4/Chave-HI-LO_1_thumb16.png?imgmax=800" width="334" height="193"></a></p> <p align="justify"><font face="Trebuchet MS">Porém nesta configuração precisamos um pino para cada tecla conectada ao microcontrolador, o que caracteriza o desperdício de hardware, porém isto pode ser resolvido com implementação de uma simples matriz, onde conseguimos maximizar a utilização dos pinos de forma eficiente.</font></p> <p><font face="Trebuchet MS">No esquema abaixo podemos observar a utilização das linhas e colunas que formam a matriz.</font></p> <p> </p> <p><a href="http://lh4.ggpht.com/-6PzMxtkDnfk/T53Me2erL0I/AAAAAAAAA10/8dfvA1T0Jyw/s1600-h/Capturar6.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Capturar" alt="Capturar" src="http://lh3.ggpht.com/-_BkqnWThJoI/T53MfQEoVTI/AAAAAAAAA18/TpbzlYZxPyg/Capturar_thumb4.png?imgmax=800" width="384" height="207"></a></p> <p><font face="Trebuchet MS"></font> </p> <p><font face="Trebuchet MS">O número máximo de chaves para esta implementação pode ser obtida através da equação abaixo:</font></p> <blockquote> <p><font color="#ff0000" size="3" face="Trebuchet MS"><em><strong> N°teclas = Colunas x Linhas</strong></em></font></p></blockquote> <p align="justify"><font face="Trebuchet MS">O funcionamento do teclado matricial consiste em energizar apenas uma única linha por vez e efetuar a leitura das colunas para verificar o pressionamento de alguma das teclas, quando detectado um nível alto em alguma das colunas durante o rastreamento se torna possível a identificação da tecla pressionada.</font><font face="Trebuchet MS"> Para que não haja erros de leituras durante este processo, se faz necessário o uso de resistores de pull-down para garantir um nível baixo nas colunas que não estão sendo ativas pelo pressionamento de tecla.</font></p> <p><font color="#ff0000" size="4" face="Trebuchet MS">Função para escaneamento de teclado</font></p> <p align="justify"><font face="Trebuchet MS">Para efetuar a leitura do teclado matricial, vamos criar uma função que retornará o valor da tecla pressionada em hexadecimal ou o valor 0xFF caso nenhuma tecla tenha sido pressionada.No nosso exemplo utilizaremos um teclado matricial de [4x3] que foi adquirido através do site <a href="http://www.goodluckbuy.com">www.goodluckbuy.com</a>.</font></p> <p align="justify"><font face="Trebuchet MS">Assim que a função é chamada, colocamos um nivel alto na primeira linha e efetuamos a leitura das quatro colunas, caso alguma coluna responda nivel</font><font face="Trebuchet MS"> alto, retornamos da função com o valor correspondente a matrizagem, vejamos como fica o código:</font></p> <hr> <p><font color="#00ff00">#define Coluna_1 PORTD.B0<br>#define Coluna_2 PORTD.B1<br>#define Coluna_3 PORTD.B2</font></p> <p><font color="#00ff00">#define Linha_1 PORTD.B6<br>#define Linha_2 PORTD.B5<br>#define Linha_3 PORTD.B4<br>#define Linha_4 PORTD.B3</font></p> <p><font color="#00ff00">char Le_Teclado() // Função que efetua a leitura do teclado matricial<br>{<br>Coluna_1 = 1;<br>Coluna_2 = 0;<br>Coluna_3 = 0;<br>Delay_ms(1);<br>if(Linha_1) return 1;<br>if(Linha_2) return 4;<br>if(Linha_3) return 7;<br>if(Linha_4) return 10;<br> <br>Coluna_1 = 0;<br>Coluna_2 = 1;<br>Coluna_3 = 0;<br>Delay_ms(1);<br>if(Linha_1) return 2;<br>if(Linha_2) return 5;<br>if(Linha_3) return 8;<br>if(Linha_4) return 0;<br> <br>Coluna_1 = 0;<br>Coluna_2 = 0;<br>Coluna_3 = 1;<br>Delay_ms(1);<br>if(Linha_1) return 3;<br>if(Linha_2) return 6;<br>if(Linha_3) return 9;<br>if(Linha_4) return 11;<br> <br>return 255;<br>}</font></p> <p> <hr> <p align="justify"><font face="Trebuchet MS">Este código mostra como efetuar uma leitura “simples” do teclado matricial, porém dependendo do hardware utilizado pode apresentar problemas de estabilidade efetuando leituras falsas ou deixando de apresentar um pressionamento.</font></p> <p align="justify"><font color="#ff0000" size="4" face="Trebuchet MS"><u>MikroC PRO<sub></sub></u></font></p> <p align="justify"><font face="Trebuchet MS">O compilador MikroC PRO, possui internamente uma biblioteca própria para uso com teclados matriciais e que torna o processo de escaneamento uma tarefa simples.</font><font face="Trebuchet MS"> Podem ser utilizadas as configurações [4x1] , [4x2] , [4x3] ou [4x4]. </font></p> <p><font color="#ff0000" face="Trebuchet MS"><strong>Keypad_Init()</strong></font></p> <p align="justify"><font face="Trebuchet MS">Efetua a inicialização do teclado matricial, esta função requer que seja declarado anteriormente uma variável chamada <code>keypadPort <font face="Trebuchet MS">que define o PORT onde será conectado o nosso hardware do teclado.</font></code></font></p> <p><font face="Trebuchet MS"><code><b>char</b> keypadPort <b>at</b> PORTD; </code> </font></p> <p><font color="#ff0000" face="Trebuchet MS"><strong>Keypad_Key_Press()</strong></font></p> <p align="justify"><font face="Trebuchet MS">Efetua a leitura de uma tecla pressionada, retornando o valor da tecla (1 –16) ou 0 caso nenhuma tecla seja pressionada.</font></p> <p><strong><font color="#ff0000" face="Trebuchet MS">Keypad_Key_Click()</font></strong></p> <p align="justify"><font face="Trebuchet MS">Efetua a leitura de uma tecla pressionada, retornando o valor da tecla (1 –16) ou 0 caso nenhuma tecla seja pressionada, porém é uma função com propriedades de bloqueio, ou seja, quando chamada, aguarda o pressionamento da tecla, bloqueando o processo do programa durante a espera do pressionamento da tecla.</font></p> <p align="justify"><font face="Trebuchet MS">Notem que esta biblioteca do MikroC PRO, embora nos ajude a interfacear o teclado não retorna o valor direto das teclas e sim a posição dela na matriz.</font></p> <p align="justify"><font face="Trebuchet MS">Vejamos como ficou o nosso código completo utilizando o compilador MikroC PRO.</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">/******************************************************************************</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS"> JL Audio – www.esquemas .org</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">Data: 04/2012<br>Autor: Jean Carlos<br>Projeto: Teclado Matricial<br>Microprocessador: PIC18F4550<br>Clock do processador: 48MHz<br>Estação de desenvolvimento: PK2Lab V 1.1<br>Compilador: MikroC PRO V 4.60.0.0<br>Versão atual: 1.0<br>Descrição:<br> Implementação de leitura de teclado matricial na<br> placa PK2Lab, através de biblioteca do MikroC PRO.</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">*******************************************************************************/<br>// Inicialização do teclado no PORTD</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">char keypadPort at PORTD;</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">// Configuração do LCD da placa PK2Lab V.1.1</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">sbit LCD_RS at RB2_bit;<br>sbit LCD_EN at RB3_bit;<br>sbit LCD_D4 at RB4_bit;<br>sbit LCD_D5 at RB5_bit;<br>sbit LCD_D6 at RB6_bit;<br>sbit LCD_D7 at RB7_bit;</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">sbit LCD_RS_Direction at TRISB2_bit;<br>sbit LCD_EN_Direction at TRISB3_bit;<br>sbit LCD_D4_Direction at TRISB4_bit;<br>sbit LCD_D5_Direction at TRISB5_bit;<br>sbit LCD_D6_Direction at TRISB6_bit;<br>sbit LCD_D7_Direction at TRISB7_bit;</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">//******************************************************************************<br>// Variáveis Globais</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">char tecla, tecla_antiga = 0;</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">//******************************************************************************<br>// Rotinas Auxiliares</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">//******************************************************************************<br>//Rotina Principal</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">void main()<br>{<br>TRISA = 0b00000000;<br>PORTA = 0b00000000;<br>TRISB = 0b00000000;<br>PORTB = 0b00000000;<br>TRISC = 0b00000000;<br>PORTC = 0b00000000;<br>PORTD = 0b00000000;<br>TRISE = 0b00000000;<br>PORTE = 0b00000000;<br>ADCON1 = 0X0F; // Entradas digitais.</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS"></font><font color="#00ff00"><br><font face="Trebuchet MS">Keypad_Init(); // Inicializa o Teclado Matricial</font></font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">Lcd_Init();<br>Lcd_Cmd(_Lcd_Cursor_Off);<br>Lcd_Cmd(_LCD_CLEAR);<br>Lcd_Out(1,1,"*** PK2Lab ***");<br>Lcd_Out(2,2,"Tecla Press:");<br>Delay_ms(100);</font></p> <p align="justify"><font color="#00ff00" face="Trebuchet MS">while(1)<br>{</font><font color="#00ff00" face="Trebuchet MS"><br>tecla = Keypad_Key_Press(); // Efetua leitura do teclado<br> <br>if(tecla != 0)<br>{<br> switch (tecla) // Efetua conversão para impressão<br> {<br> case 1: tecla = 49; break; // 1<br> case 2: tecla = 50; break; // 2<br> case 3: tecla = 51; break; // 3<br> case 4: tecla = 65; break; // A<br> case 5: tecla = 52; break; // 4<br> case 6: tecla = 53; break; // 5<br> case 7: tecla = 54; break; // 6<br> case 8: tecla = 66; break; // B<br> case 9: tecla = 55; break; // 7<br> case 10: tecla = 56; break; // 8<br> case 11: tecla = 57; break; // 9<br> case 12: tecla = 67; break; // C<br> case 13: tecla = 42; break; // *<br> case 14: tecla = 48; break; // 0<br> case 15: tecla = 35; break; // #<br> case 16: tecla = 68; break; // D<br> }<br> if(tecla != tecla_antiga) // Atualiza a ultima tecla pressionada<br> {<br> tecla_antiga = tecla;<br> }<br> Lcd_Chr(2,15,tecla); // Imprime a tecla pressionada no LCD<br>}<br>}//while(1)<br>}//main</font></p> <p align="justify"><font face="Trebuchet MS"> <hr> </font> <p align="justify"><font face="Trebuchet MS">Abaixo o vídeo do projeto funcionando!</font></p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7cda6a99-00dd-4a54-9ccb-6e5b694287e2" class="wlWriterEditableSmartContent"><div id="9ca85c3b-d122-47a6-847e-5759ee886d34" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=RiWQyIbz3Vc&feature=youtube_gdata_player" target="_new"><img src="http://lh6.ggpht.com/-_AqZhSceNDU/T53Mf-6tPeI/AAAAAAAAA2E/yh99BFID3PQ/video8c287eeb0456%25255B7%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('9ca85c3b-d122-47a6-847e-5759ee886d34'); downlevelDiv.innerHTML = "<div><object width=\"479\" height=\"359\"><param name=\"movie\" value=\"http://www.youtube.com/v/RiWQyIbz3Vc?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/RiWQyIbz3Vc?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"479\" height=\"359\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p> <p><font color="#00ff00"></font></p> <p>Bom projetos a todos e até a próxima! </p> Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com9tag:blogger.com,1999:blog-3194446240058587335.post-79271921982578583672012-04-01T08:16:00.001-07:002012-04-11T13:53:04.521-07:00Sensor Ultra-Sônico<br />
<div align="justify">
<span style="font-family: Trebuchet MS;">Sensores de ultra som são componentes muito úteis no desenvolvimento de projetos microcontrolados por serem fáceis de implementar e ter uma resposta linear diretamente proporcional a distância em que se encontra de um determinado objeto.</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Veremos agora como funciona o sensor de ultrasom DYP-ME007 que pode ser adquirido diretamente da China através do site </span><a href="http://www.goodluckbuy.com/"><span style="font-family: Trebuchet MS;">www.goodluckbuy.com</span></a></div>
<br />
<a href="http://lh5.ggpht.com/-LKXlRVnvt0I/T3hxSVSTAbI/AAAAAAAAAz0/2RGoGMkp_6w/s1600-h/Sensor%252520ultra1%25255B13%25255D.png"><img alt="Sensor ultra1" border="0" height="166" src="http://lh4.ggpht.com/-ih0_UW8nykw/T3hxTGVXrRI/AAAAAAAAAz8/PEF_eLlpTRs/Sensor%252520ultra1_thumb%25255B9%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Sensor ultra1" width="200" /></a><br />
<div align="justify">
<br /></div>
<div align="justify">
<span style="color: white; font-family: Trebuchet MS;">O Sensor de ultrasom pode detectar objetos a distâncias que variam entre 2 e 350cm de distância com uma precisão de 3mm, sendo que o modelo testado retornou uma precisão de 2mm. </span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">A detecção de distância é feita através do disparo de um pulso de nível alto com duração de 10us no pino de Trigger do sensor, assim que ele detectar este sinal, emite uma sequencia de 8 pulsos na frequência de 40KHz, frequência esta que define o termo Ultra-sônico utilizado na nomenclatura. Após este som emitido “Bater” em algum objeto, retorna e é capturado pelo microfone do sensor para processamento das informações.</span></div>
<div align="justify">
<br /></div>
<div align="justify">
<a href="http://lh5.ggpht.com/-HUUowDkvlao/T3hxTrl2AqI/AAAAAAAAA0E/Ni8ph-mti68/s1600-h/Sensor%25255B14%25255D.png"><img alt="Sensor" height="179" src="http://lh3.ggpht.com/-Oj0jl7VBd2w/T3hxUTeR2ZI/AAAAAAAAA0M/wGeGdMRRfk8/Sensor_thumb%25255B14%25255D.png?imgmax=800" style="display: block; float: none; margin-left: auto; margin-right: auto;" title="Sensor" width="240" /></a></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="color: white; font-family: Trebuchet MS;">A distância “D” corresponde a real distância do objeto, como o sensor recebe a informação de distância de emissão e recepção, obtêm duas vezes a distância real, como a velocidade do som no ar a temperatura média de 25°C é de 340m/s, facilmente se obtém a relação de distância em milímetros através da equação:</span></div>
<div align="center">
<span style="font-family: Trebuchet MS;">Distância = Velocidade * Tempo</span> </div>
<div align="center">
<span style="font-family: Trebuchet MS;">2 * Distância = 340 * Tempo</span> </div>
<div align="center">
<span style="color: #ffc000; font-family: Trebuchet MS;"><b>Distância = 170 * Tempo</b></span> </div>
<div align="justify">
<span style="color: white; font-family: Trebuchet MS;"></span> </div>
<div align="justify">
<span style="color: white; font-family: Trebuchet MS;">Todos estes cálculos são efetuados diretamente pelo sensor DYP-ME007 que ao final entrega no pino Echo um pulso ativo correspondente a distância real do objeto como mostra a figura abaixo:</span> </div>
<div align="left">
<span style="font-family: Trebuchet MS;"></span> </div>
<div align="left">
<a href="http://lh3.ggpht.com/-LOUKwtjP1iM/T3hxUnHYG_I/AAAAAAAAA0U/8P9Hdk9bUVs/s1600-h/Temporiza%2525C3%2525A7%2525C3%2525A3o%25255B4%25255D.jpg"><img alt="Temporização" border="0" height="221" src="http://lh4.ggpht.com/-IRwyJKzZEgQ/T3hxVZsKjiI/AAAAAAAAA0c/6NmIWj6iu3Y/Temporiza%2525C3%2525A7%2525C3%2525A3o_thumb%25255B2%25255D.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Temporização" width="384" /></a> </div>
<div align="left">
<span style="font-family: Trebuchet MS;"></span> </div>
<div align="justify">
<span style="color: #ffc000; font-family: Trebuchet MS;">Para se transformar o tempo (us) retornado pelo sensor em distância(mm), basta dividir valor do tempo por 58.</span> </div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Este valor é obtido da seguinte relação:</span> </div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Um metro corresponte a um pulso de aproximadamente 5764us, transformando em cm temos 57,64cm que arredondamos para 58 para facilitar os cálculos no microcontrolador.</span> </div>
<div align="left">
<br /></div>
<div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:44abcb50-b0d5-45db-9da0-24cffac685b7" style="display: block; float: none; margin-left: auto; margin-right: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 448px;">
<div id="a50563ec-56bb-4882-934e-d816142ac917" style="display: inline; margin: 0px; padding: 0px;">
<div>
<a href="http://www.youtube.com/watch?v=e8T6_quJkKU&feature=youtube_gdata_player" target="_new"><img alt="" galleryimg="no" onload="var downlevelDiv = document.getElementById('a50563ec-56bb-4882-934e-d816142ac917'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/e8T6_quJkKU?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/e8T6_quJkKU?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" src="http://lh6.ggpht.com/-NfjNuQrrYXI/T3hxV9GO38I/AAAAAAAAA0w/e4cP4AUbjJw/video58c59247caf2%25255B34%25255D.jpg?imgmax=800" style="border-style: none;" /></a></div>
</div>
<div style="clear: both; font-size: .8em; width: 448px;">
Teste de funcionamento.</div>
</div>
<div align="justify">
<br /></div>
<div align="justify">
<b><span style="color: red; font-family: Trebuchet MS;">Este sensor possui quatro pinos de conexão sendo:</span></b></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">VCC – Alimentação de 5V (Consumo médio de 20ma)</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">GND – Alimentação GND </span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Trigger- Pino para disparo de leitura (10ms)</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Echo – Pino de retorno de informações referente a distância medida</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Out – Este pino NÃO deverá ser conectado</span></div>
<hr />
<div align="justify">
<span style="font-family: Trebuchet MS;">Podemos detectar a largura de pulso do sensor de várias maneiras, porém a maneira mais elegante de se fazer isto com microcontroladores PIC, é utilizando o módulo CCP na função <span style="color: red;">CAPTURE</span><span style="color: white;">.</span></span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Para isto temos que conhecer um pouco mais sobre este módulo interno do microcontrolador. </span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">O módulo CCP utiliza os Timers internos do microcontrolador como base de tempo, neste caso específico do modo CCP que é o CAPTURE, é utilizado o TIMER1 incrementando a cada us. </span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Desta forma quando o módulo CCP detecta a borda alta correspondente ao pino ECHO do sensor, ativa a contagem do TIMER,(incrementeado a cada us) e muda a configuração da borda de sensibilidade para baixa, aguardando assim o término do pulso referente a distância, com isto conseguimos saber qual o período do pulso entrege pelo sensor em já em us.</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Após esta informação ser processada temos que alterar novamente a borda de sensibilidade para alta afin de estarmos prontos para uma nova informação proveniente so sensor.</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Através do uso deste módulo, trabalhamos apenas com interrupções liberando o microcontrolador para outras tarefas tornando o programa mais eficiente.</span></div>
<hr />
<span style="font-family: Trebuchet MS;"></span> <br />
<span style="font-family: Trebuchet MS;">Abaixo segue o programa exemplo da placa PK2Lab para uso com estes sensores.</span><br />
<span style="color: lime;">/******************************************************************************</span><br />
<span style="color: lime;"> JL Audio Manutenção Eletrônica</span><br />
<span style="color: lime;">Data: 01/2012<br />Autor: Jean Carlos<br />Projeto: Sensor de distância DYP-ME007<br />Microprocessador: PIC18F4550<br />Clock do processador: 8MHz<br />Estação de desenvolvimento: PK2Lab V 1.1<br />Compilador: MikroC PRO V 4.60.0.0<br />Versão atual:<br />Descrição:</span><br />
<span style="color: lime;"> Este projeto demonstra o uso do sensor de distancia DYP-DM007<br /> Com a placa PK2Lab, o valor referente a distância entre o<br /> objeto e o sensor é exibido no display LCD.</span><br />
<span style="color: lime;"> Trigger -> RC0<br /> Echo -> RC2 -> Entrada do módulo CCP1</span><br />
<span style="color: lime;"> O resultado da captura é salvo em CCPR1H e CCPR1L</span><br />
<span style="color: lime;"> Para efetuar este projeto, iremos configurar o TMR1 como contador<br /> sincrono,para ser incrementado pela fonte de clock externo que é<br /> o cristal de 8MHz conectado a placa PK2Lab(Sem PLL).</span><br />
<span style="color: lime;"> 8MHz -> (Fosc/4)2MHz -> Prescaler 2:1 -> 1MHz (1uS)</span><br />
<span style="color: lime;"> Para calcular a distancia em centimetros, usamos a formula abaixo:</span><br />
<br />
<br /><span style="color: lime;">*******************************************************************************/<br />// Configuração do LCD da placa PK2Lab V.1.1</span><br />
<span style="color: lime;">sbit LCD_RS at RB2_bit;<br />sbit LCD_EN at RB3_bit;<br />sbit LCD_D4 at RB4_bit;<br />sbit LCD_D5 at RB5_bit;<br />sbit LCD_D6 at RB6_bit;<br />sbit LCD_D7 at RB7_bit;</span><br />
<span style="color: lime;">sbit LCD_RS_Direction at TRISB2_bit;<br />sbit LCD_EN_Direction at TRISB3_bit;<br />sbit LCD_D4_Direction at TRISB4_bit;<br />sbit LCD_D5_Direction at TRISB5_bit;<br />sbit LCD_D6_Direction at TRISB6_bit;<br />sbit LCD_D7_Direction at TRISB7_bit;</span><br />
<br /><span style="color: lime;">//******************************************************************************<br />// Definições e Variáveis Globais</span><br />
<span style="color: lime;">#define Trigger RC0_bit</span><br />
<span style="color: lime;">char txt[4]; // Usado para conversão de dados em string<br />char Tempo_H, Tempo_L, Distancia_cm;<br />unsigned int Periodo; // Variável que armazena o período do Pulso ECHO</span><br />
<span style="color: lime;">//******************************************************************************<br />// Funções Auxiliares</span><br />
<span style="color: lime;">void interrupt()<br />{<br />if(CCP1IF_bit && CCP1CON.B0) // Captura por CCP1 e borda configurada como subida...<br />{<br /> CCP1IF_bit = 0; // Limpa a flag para nova captura<br /> CCP1IE_bit = 0; // Desabilita interrupção por periféricos(CCP1)<br /> CCP1CON = 4; // Configura a borda de captura para DESCIDA. (ESTE EVENTO CAUSARIA INTERRUPÇÃO ERRÔNEA)<br /> CCP1IE_bit = 1; // Habilita interrupção por periféricos(CCP1)<br /> TMR1H = 0; // Zera registradores do TMR1 para contagem de tempo<br /> TMR1L = 0;<br /> TMR1ON_bit = 1; // Habilita contagem de tempo.<br />}</span><br />
<span style="color: lime;">else if(CCP1IF_bit)<br /> {<br /> CCP1IF_bit = 0; // Limpa a flag para nova captura<br /> TMR1ON_bit = 0; // Desabilita contagem de tempo.<br /> CCP1IE_bit = 0; // Desabilita interrupção por periféricos(CCP1)<br /> CCP1CON = 5; // Configura a borda de captura para SUBIDA. (ESTE EVENTO CAUSARIA INTERRUPÇÃO ERRÔNEA)<br /> CCP1IE_bit = 1; // Habilita interrupção por periféricos(CCP1)<br /> Tempo_H = CCPR1H; // Carrega valores de tempo capturado(Neste caso em us)<br /> Tempo_L = CCPR1L;<br /> }</span><br />
<span style="color: lime;">}</span><br />
<span style="color: lime;">Pulso() // Gera o Pulso de trigger para o sensor ultra som.<br />{<br />Trigger = 1;<br />Delay_us(10);<br />Trigger = 0;<br />}</span><br />
<span style="color: lime;">//******************************************************************************<br />//Rotina Principal</span><br />
<span style="color: lime;">void main()<br />{<br />TRISC = 0b00000100; // Entrada CCP1<br />PORTC = 0b00000000;<br />INTCON = 0b11000000; // Liga interruptores GIE e PEIE<br />TMR1IE_bit = 0; // Desabilita interrpções de TMR1<br />CCP1IE_Bit = 1; // Habilita interrupções por CAPTURA(CCP1)<br />CCP1CON = 5; // Configura módulo CCP1 para CAPTURA e borda de SUBIDA.</span><br />
<span style="color: lime;">T1CKPS1_bit = 0; // Prescaller TMR1 2:1<br />T1CKPS0_bit = 1;<br />TMR1CS_bit = 0; // Clock selecionado -> OSC/4<br />TMR1ON_bit = 0; // Timer -> 1 = Habilita contagem</span><br />
<span style="color: lime;">Lcd_Init();<br />Lcd_Cmd(_Lcd_Cursor_Off);<br />Lcd_Cmd(_LCD_CLEAR);<br />Lcd_Out(1,1,"*** PK2Lab ***");<br />Lcd_Out(2,1,"Distancia: cm");<br />Delay_ms(100);</span><br />
<span style="color: lime;">while(1)<br />{<br />Pulso(); // Dispara leitura de distância.<br />Delay_ms(100); // Intervalo entre leituras.<br />Periodo = (Tempo_H<<8)+ Tempo_L; // Obtenção do período relativo ao ECHO<br />Distancia_cm = Periodo/58; // Conversão da distância informada para cm</span><br />
<span style="color: lime;"> //------------------------------------------------------------------------------------//<br /> // Um Pulso de 58us corresponde a uma distância de 1cm //<br /> //------------------------------------------------------------------------------------//</span><br />
<br /><span style="color: lime;">// Distância MINIMA 3cm e MAXIMA 3m</span><br />
<span style="color: lime;"><br />if((Distancia_cm < 3)||Distancia_cm >300) Lcd_Out(2,12,"---");<br />else<br /> {<br /> byteToStr(Distancia_cm, txt); // Converte texto para impressão<br /> Lcd_Out(2,12,txt); // Imprime valores no display<br /> }<br />}<br />}</span><br />
<div align="justify">
<span style="font-family: Trebuchet MS;"></span></div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com6tag:blogger.com,1999:blog-3194446240058587335.post-27973935382989928192012-03-09T16:33:00.000-08:002012-04-11T13:55:46.478-07:00Utilizando outras famílias de microcontroladores Microchip na placa PK2Lab!!!<br />
<span style="font-family: Trebuchet MS;">Hoje vou demonstrar a vocês como utilizar outros microcontroladores da empresa Microchip na placa PK2Lab. </span><span style="font-family: Trebuchet MS;">A Microchip comercializa uma ampla gama de microcontroladores distribuídos em várias famílias, sendo elas:</span><br />
<br />
<div align="center">
<span style="font-family: Trebuchet MS;"><span style="color: red; font-size: medium;"><b>PIC10 / PIC12 / PIC16 / PIC18 / PIC24 / DsPIC30 / DsPIC33</b></span></span></div>
<div align="center">
<span style="font-family: Trebuchet MS;"><span style="color: red; font-size: medium;"><b> </b></span> </span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Todas estas famílias de microcontroladores são suportados pelo gravador contido na placa PK2Lab, bastando apenas interligar os pinos do gravador ao dispositivo de destino.</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Para este exemplo irei utilizar um microcontrolador da família PIC12 que dispõe de conversor AD, 5 pinos de I/O e um pino de entrada (GP3) e oscilador interno de 4MHz, que é o PIC12F675.</span></div>
<div align="justify">
<br /></div>
<div align="center">
</div>
<div align="center">
</div>
<div align="center">
<a href="http://lh5.ggpht.com/-BQXUjDXbiZQ/T1qhPGJWJ_I/AAAAAAAAAyg/ZCs5np2Sx-s/s1600-h/PIC12F675%25255B24%25255D.png"><img alt="PIC12F675" height="146" src="http://lh4.ggpht.com/-JyjsZCE8Icg/T1qhPjrbnMI/AAAAAAAAAyk/INlTm3mNNeg/PIC12F675_thumb%25255B20%25255D.png?imgmax=800" style="display: block; float: none; margin-left: auto; margin-right: auto;" title="PIC12F675" width="474" /></a></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Para efetuar a conexão do microcontrolador à placa vamos utilizar alguns cabos de conexão facilmente encontrados a venda nas lojas de componentes eletrônicos e sites como o Mercado Livre e um Proto-Board que é uma placa para desenvolvimento de projetos que consiste de uma matriz de contatos elétricos.</span></div>
<div align="justify">
<br /></div>
<div align="center">
<a href="http://lh3.ggpht.com/-ExzH2VbF7lY/T1tA9naxSNI/AAAAAAAAAyw/wWDFOP2l-dc/s1600-h/Placa2%25255B7%25255D.png"><img alt="Placa2" height="328" src="http://lh3.ggpht.com/-wJpdUVYA1HE/T1tA_OqzbQI/AAAAAAAAAy4/59OJRIHMFP4/Placa2_thumb%25255B5%25255D.png?imgmax=800" style="display: inline;" title="Placa2" width="458" /></a></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Os pinos da placa PK2Lab responsáveis pela gravação de microcontroladores externos à placa estão identificados como ICSP, que é a abreviação de In Circuit Serial Programmer. Estes pinos são conectados aos pinos responsáveis pela gravação no dispositivo a ser programado.</span></div>
<div align="justify">
<br /></div>
<div align="center">
<a href="http://lh3.ggpht.com/-5nKDGt9fnq8/T1tBA5go21I/AAAAAAAAAzA/zQvqDau9GZU/s1600-h/ICSP%25255B3%25255D.png"><img alt="ICSP" height="179" src="http://lh3.ggpht.com/-XbofiWE1GJo/T1tBCdF61uI/AAAAAAAAAzI/Xh0pAO7snP8/ICSP_thumb%25255B1%25255D.png?imgmax=800" style="display: inline;" title="ICSP" width="240" /></a></div>
<div align="justify">
<br />
<span style="font-family: Trebuchet MS;">O esquema elétrico do projeto é mostrado abaixo e consiste basicamente de 4 componentes, sendo uma chave, um LED, um buzzer e o microcontrolador.</span><br />
</div>
<div align="center">
<a href="http://lh3.ggpht.com/-etJkjQALlQw/T1qxygx-oBI/AAAAAAAAAyo/Mii1JD41JUQ/s1600-h/Esquema%25255B8%25255D.png"><img alt="Esquema" height="232" src="http://lh6.ggpht.com/-97kH5_5CO8I/T1qxzOlXeBI/AAAAAAAAAys/cE2Jc2mWeaA/Esquema_thumb%25255B4%25255D.png?imgmax=800" style="display: inline;" title="Esquema" width="471" /></a></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Todos os componentes, exceto o microcontrolador estão disponíveis na placa PK2Lab e vamos utiliza-lós de maneira bem simples através dos pinos de expansão.</span></div>
<div align="justify">
<br /></div>
<div align="center">
<a href="http://lh5.ggpht.com/-NrM3KBBz25s/T1tDsejcKhI/AAAAAAAAAzg/uk7UmekBESM/s1600-h/DSC00846%25255B5%25255D.jpg"><img alt="DSC00846" height="258" src="http://lh5.ggpht.com/-oUXV7aijOg0/T1tDs_4qaeI/AAAAAAAAAzo/zNSkuvC413U/DSC00846_thumb%25255B2%25255D.jpg?imgmax=800" style="display: inline;" title="DSC00846" width="438" /></a></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Os conectores contam com a nomenclatura dos pinos referentes ao soquete do microcontrolador ON-BOARD, ou seja, para a utilização correta destes periféricos internos através dos ports de expansão, temos que efetuar uma breve análise no esquema da placa PK2Lab.</span></div>
<div align="justify">
<br /></div>
<div align="center">
<a href="http://lh4.ggpht.com/-r_Zb5AwVzMw/T1qxzbakmxI/AAAAAAAAAyA/XeKQc1855Jw/s1600-h/Led%25255B6%25255D.png"><img alt="Led" border="0" height="205" src="http://lh4.ggpht.com/-oGiT14bMOfA/T1qx0F8lsYI/AAAAAAAAAyI/c4RmciBLJ9w/Led_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Led" width="195" /></a></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Vamos utilizar o led referente ao PORTC pino 0, portanto este led pode ser acessado através do barramento de expansão PORTC B0. Os outros pinos podem ser verificados no esquema elétrico da placa e associados aos respectivos PORT’s.</span></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Como dito anteriormente, todos os pinos estão disponíveis através dos PORT’s de expansão, com exceção de três pinos do PORTE, porém estes três pinos podem ser acessados através do conector ZIF sem maiores dificuldades.</span></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="color: red; font-family: Trebuchet MS;">OBS. APENAS UM MICROCONTROLADOR PODE SER UTILIZADO POR VEZ, OU SEJA, AO EFETUAR A CONEXÃO DE DISPOSITIVO EXTERNO, RETIRAR TODO E QUALQUER MICROCONTROLADOR DO SOQUETE ZIF DA PLACA!</span></div>
<div align="justify">
<br /></div>
<div align="justify">
<span style="font-family: Trebuchet MS;">Vejamos o resultado do projeto!!!</span></div>
<div align="justify">
<br /></div>
<div align="center">
<a href="http://lh6.ggpht.com/-C-gQE7u-tXo/T1tBFTGdkeI/AAAAAAAAAzQ/jxYMTm5jII8/s1600-h/Placa1%25255B6%25255D.png"><img alt="Placa1" height="329" src="http://lh5.ggpht.com/-xyXb363D9CU/T1tBHQ4wHOI/AAAAAAAAAzY/mPZMH65OSB0/Placa1_thumb%25255B4%25255D.png?imgmax=800" style="display: inline;" title="Placa1" width="445" /></a></div>
<br />
<div style="font-family: "Trebuchet MS",sans-serif;">
Abaixo segue o código do projeto.</div>
<br />
<span style="color: lime;">/******************************************************************************</span><br />
<span style="color: lime;"> JL Audio Manutenção Eletrônica</span><br />
<span style="color: lime;">Data: 03/2012<br />Autor: Jean Carlos<br />Projeto: Pisca Led com Chave e Buzzer<br />Microprocessador: PIC12F675<br />Clock do processador: 4MHz<br />Estação de desenvolvimento: PK2Lab V 1.1<br />Compilador: MikroC PRO V 4.60.0.0<br />Versão atual: 1.0<br />Descrição:</span><br />
<span style="color: lime;"> Este projeto visa demonstrar o funcionamento da placa PK2Lab<br /> com outros microcontroladores da família Microchip, para isto<br /> vamos utilizar um Proto Board e alguns cabos para conexão<br /> entre o microcontrolador e a placa.</span><br />
<br />
<span style="color: lime;">*******************************************************************************/<br />// Inicializações do programa</span><br />
<span style="color: lime;">#define LED GPIO.B5 // Define o LED conectado ao pino 2 (GP5)<br />#define CHAVE GPIO.B4 // Define a chave conectada ao pino 3 (GP4)</span><br />
<span style="color: lime;">//******************************************************************************<br />// Variáveis Globais</span><br />
<span style="color: lime;">unsigned int Tempo; // Variável utilizada para temporização entre piscadas</span><br />
<span style="color: lime;">//******************************************************************************<br />// Rotinas Auxiliares</span><br />
<span style="color: lime;">//******************************************************************************<br />//Rotina Principal</span><br />
<blockquote>
<div align="left">
<span style="color: lime;">void main()<br />{<br />TRISIO = 0b00010000; // Configura as entradas e saídas<br />GPIO = 0b00000000; // Inicia os pinos todos desligados<br />ANSEL = 0b00000000; // Entradas digitais.</span></div>
<span style="color: lime;"> </span><br />
<div align="left">
<span style="color: lime;"><br />while(1)<br />{<br />if(CHAVE) // Se a chave for pressionada...<br /> {<br /> Tempo = Tempo + 100; // Incrementa o tempo em 100ms<br /> if(Tempo > 1000) Tempo = 100; // Limita o tempo máximo</span><span style="color: lime;"><br /> }</span></div>
<div align="left">
<span style="color: lime;">LED = ~LED; // Inverte o estado do LED o complementando </span></div>
</blockquote>
<div align="left">
<span style="color: lime;"> <br />Vdelay_ms(Tempo); // gera atraso entre piscadas</span></div>
<span style="color: lime;">}//while(1)<br />}//main</span><br />
<span style="color: lime; font-family: Trebuchet MS;">************************************************************************************************</span><br />
<span style="font-family: Trebuchet MS;">Grande abraço a todos e bons projetos!!! </span>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-10924926057756886392012-01-20T16:50:00.000-08:002012-01-20T16:52:12.925-08:00Curso de Microcontroladores PIC em linguagem "C"<br />
<div style="color: white; text-align: center;">
<span style="font-size: x-large;"><b><span style="font-family: "Trebuchet MS",sans-serif;">Lançamento!!!</span></b></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Hoje venho apresentar a vocês o meu mais recente trabalho, uma idéia que se concretizou depois de muito tempo de dedicação e persistência.Trata se do curso de microcontroladores PIC em linguagem "C" baseado totalmente na placa PK2Lab e no compilador MikroC PRO!!!</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-QAQH5Y2Puwg/Txn46quLKMI/AAAAAAAAAuU/WFtGELlzH2k/s1600/Capa.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-QAQH5Y2Puwg/Txn46quLKMI/AAAAAAAAAuU/WFtGELlzH2k/s320/Capa.JPG" width="225" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">A proposta inicial deste trabalho era criar um pequeno guia sobre a linguagem C para que as pessoas que adquiriram a placa PK2Lab pudessem rapidamente se familiarizar com os comandos da linguagem, porém, com o uso do compilador MikroC PRO, o resultado ficou melhor do que esperado, resultando em uma apostila muito completa que trata desde o princípio básico de programação incluíndo os laços de repetição e controle de fluxo até o uso de interrupções de Timers e comunicação serial entre microcontrolador e PC. </span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">São ao todo 13 exemplos de programas comentados linha a linha, o que torna o processo de aprendizagem simples e eficiente, muitos deles implementados em mais de uma maneira para que seja possível a observação das várias formas de escrever o mesmo código.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">O conteúdo do curso foi exaustivamente estudado para proporcionar um aprendizado rápido de muitos dos periféricos da placa PK2Lab, incluindo muitas imagens e fórmulas para cálculo de registradores referentes aos Timers e modulo de PWM.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Todos os registradores relacionados as interrupções estão bit a bit comentados em português, facilitando ao máximo o entendimento e configuração deste processo.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Foi inserido um tópico relacionado a criação de novos projetos, sendo efetuado um passo a passo para esclarecer a principal dúvida dos que iniciam o uso do compilador MikroC PRO, que é a etapa de configuração dos <i>Fuse Bits </i>do dispositivo, neste processo é feita a configuração do microcontrolador PIC18F4550 para operar em modo PLL de 48MHz.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Bom pessoal, este curso acompanha a placa PK2Lab, portanto ao adquirir a placa automaticamente receberão uma cópia do mesmo sem custo adicional, aos que tenham interesse em adquirir apenas o curso, podem o fazer através do site www.esquemas.org</span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">A placa PK2Lab a partir de agora será disponibilizada apenas em uma única versão completa com todos os periféricos prontos para uso, e pode ser obtida através do link abaixo.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<span style="font-family: "Trebuchet MS",sans-serif;"><b><a href="http://www.esquemas.org/Apostila_PIC/Curso_pic.pdf" target="_blank">Conteúdo do Curso</a></b> </span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: "Trebuchet MS",sans-serif;"><b><a href="http://www.esquemas.org/apostila_pic.htm" target="_blank">Link para aquisição do Curso Microcontroladores "C"</a></b></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: "Trebuchet MS",sans-serif;"><b><a href="http://produto.mercadolivre.com.br/MLB-219858734-pk2lab-kit-de-desenvolvimento-pic18f4550-microcontrolador-_JM" target="_blank">Link para aquisição da placa PK2Lab!!! (+ Curso de Brinde!!!)</a></b></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Bom por hoje é isto, em breve mais novidades e postagems sempre com um conteúdo diferente envolvendo esta fantástica área da eletrônica chamada MICROCONTROLADORES.</span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-23479295329272042682012-01-16T17:20:00.000-08:002012-01-16T17:20:11.224-08:00Caracteres especiais no LCD<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Olá galera, ano novo, férias, nada melhor que começar 2012 com um post bacana para dar uma alegrada... E em breve novidades sobre o curso da PK2Lab em C... Aguardem!!!</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Hoje vamos conhecer um pouco mais sobre os displays LCDs e aprender a criar nossos próprios caracteres customizados.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> Bom, mais qual é a utilidade disto??? </span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Imaginem o quão interessante seria mostrar o valor de uma grandeza, como o valor de tensão correspondente a um sensor, ou mesmo o tempo restante de um processo, em uma escala de barras customizada no display LCD. Para isto podemos utilizar vários caracteres disponíveis na tabela de caracteres do próprio controlador do LCD que contém muitos simbolos interessantes, porém, quando realmente a criatividade aflora, vimos que esta tabela não resolve muita coisa e ai é que entra a criação de caracteres na CGRAM do display.</span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">O Controlador HD44780, possui internamente uma área destinada a criação de 8 caracteres especiais, estes caracteres situam se a partir do endereço 0 da CGRAM e são formados por um conjunto de 8 bytes cada, dispostos a formar a imagem apresentada no LCD.</span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">O compilador MikroC PRO, possui uma ferramenta muito útil para a criação destes caracteres e está localizada na aba<i> Tools -> Lcd Custon Caracter.</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<img alt="" height="640" src="data:image/png;base64,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" width="497" /><span style="font-family: "Trebuchet MS",sans-serif;"><i> </i></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Vamos utilizar esta ferramenta para criar duas setas laterais que formarão o cursor de ajuste de um sistema de som em que as funções serão ajustadas pelo teclado e os valores poderão ser visualizados em uma barra no LCD.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Para começar a criar nosso caractere, basta clicar nos pontos em que desejamos que o display acenda, até formar a imagem pretendida, assim que terminar, devemos clicar em generate code para que o software gere a função que é responsável pela criação e envio dos dados para a CGRAM do controlador.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Esta ferramenta pode gerar códigos em C, Pascal e Basic, para tanto basta selecionar a linguagem antes de clicar em generate code.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Depois de gerado, o código deve ser inserido como uma função qualquer dentro do programa que ira utilizá-la. Normalmente neste ponto eu altero um pouco este procedimento para facilitar a escrita do código, porém, nada impede de utilizar a função criada pela ferramenta de forma direta.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="color: lime; text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span><span style="font-family: "Trebuchet MS",sans-serif;">//**************************************************************************</span><span style="font-family: "Trebuchet MS",sans-serif;">***********</span><span style="font-family: "Trebuchet MS",sans-serif;">*****</span><span style="font-family: "Trebuchet MS",sans-serif;">****************</span><br /><span style="font-family: "Trebuchet MS",sans-serif;">// Rotinas Auxiliares<br /><br />const char character1[] = {24,28,30,30,30,28,24,0}; // Seta Esquerda<br />const char character2[] = {3,7,15,15,15,7,3,0}; // Seta Dir eita<br /><br />void Caracter_Especial() // Função que cria os caracteres especiais na CGRAM. <br />{<br /> char i;<br /> Lcd_Cmd(64); // Entra em modo de criação de caracter e... <br /> for (i = 0; i<=7; i++) Lcd_Chr_CP(character1[i]); // Envia os bytes que formam o...<br /> for (i = 0; i<=7; i++) Lcd_Chr_CP(character2[i]); // caracter um a um sequencialmente.<br />}</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Para apresentação dos caracteres apenas posicione o cursor do display onde o caracter deverá aparecer e use a função Lcd_Chr_CP(ENDEREÇO DA CGRAM).</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Exemplo:</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>
<div style="color: lime; text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">while(1)<br />{<br /> Caracter_Especial(); // Chama a função que cria os caracteres na CGRAM.<br /> Lcd_Out(2,1,"---");<br /> Lcd_Chr_CP(1); // Insere seta para esquerda. (Endereço 0 da CGRAM)<br /> Lcd_Chr_CP(0); </span><span style="font-family: "Trebuchet MS",sans-serif;">// Insere seta para direita. (Endereço 1 da CGRAM)</span><br /><span style="font-family: "Trebuchet MS",sans-serif;"> Lcd_Out(2,6,"-----------");<br /> ....</span></div>
<div style="color: lime; text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br />}//while(1)</span></div>
<div style="color: lime; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Veja como fica o resultado:</span></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-iaIV-q9b4_w/TxTH-wJnmRI/AAAAAAAAAs0/MI-E1VsAWZA/s1600/DSC01860.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-iaIV-q9b4_w/TxTH-wJnmRI/AAAAAAAAAs0/MI-E1VsAWZA/s320/DSC01860.JPG" width="320" /></a></div>
<div style="text-align: center;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><i> </i></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Bom, esta é apenas uma das situações onde os caracteres especiais podem ser utilizados, com o tempo vocês verão como é importante este recurso.</span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Por falar nisto... alguém já viu um LCD que escreve palavras com acentuação como no bom e velho português??? fica a idéia !!!</span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Grande abraço a todos...</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<span style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: large;"><b style="color: red;"> EM BREVE...</b></span></span></div>
<br />
<div style="text-align: center;">
<span style="font-family: "Trebuchet MS",sans-serif;"><span style="color: red; font-size: large;"><b>Curso de microcontroladores PIC em linguagem C !!!</b></span></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-90910423100022669472011-12-24T06:14:00.000-08:002011-12-24T06:15:38.553-08:00Macros no mikroC PRO<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"><span style="line-height: 115%;">Algumas
vezes nos deparamos com a necessidade de trabalharmos diretamente com apenas um
bit do registrador, muitos compiladores nos trazem ferramentas específicas para
este fim, mas o mikroC na sua versão PRO não aborda diretamente este problema,
tornando um pouco desgastante o processo de testar ou alterar um único bit.</span></span></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Para contornar esta situação, eu resolvi desenvolver algumas
macros (bloco de instruções que executam uma determinada função) para tornar o
processo de programação mais confortável, para tanto tomei como base o livro
TÉCNICAS DE PROJETOS ELETRÔNICOS COM OS MICROCONTROLADORES AVR , do autor
Charles Borges de Lima, que por sinal é uma literatura indispensável para
desenvolvedores de sistemas embarcados independentemente da plataforma que
trabalham, e adaptei as idéias dele para o compilador mikroC PRO com alguns
exemplos de uso.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<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/-tms9BfBhEAE/TvXYFQ6jULI/AAAAAAAAAss/1xt5tybBnEo/s1600/capa_final.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-tms9BfBhEAE/TvXYFQ6jULI/AAAAAAAAAss/1xt5tybBnEo/s320/capa_final.jpg" width="235" /></a></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Foram desenvolvidas quatro macros com as funções de <b>setar</b>
(colocar o bit em 1), <b>limpar</b> (colocar o bit em 0), <b>testar</b> o
estado do bit se é falso ou verdadeiro, 0 ou 1 e por fim a última macro que tem
a função de <b>complementar</b> o bit, ou seja, inverte o estado do mesmo,
vejamos como funciona:</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">__________________________________________________________________________________</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> </span><span style="font-size: small;"> </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal">
<b style="color: red; font-family: "Trebuchet MS",sans-serif;"><span lang="EN-US">#define
Seta_bit(Variavel,bit) (Variavel |= (1<<bit))</span></b><span lang="EN-US"></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
Esta<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;"> macro chamada de Seta_bit usa como parâmetros o registrador do qual queremos
trabalhar e o bit de interesse, e quando chamada efetua uma lógica OR
entre o registrador e o número
00000001 rotacionado a esquerda a quantidade de vezes necessária para setar
apenas o bit de interesse. </span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;">Exemplo:</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
<span style="font-size: small;">Imaginemos que o PORTB esteja com o seguinte valor ->
PORTB = 0b00010010 </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;">Chamamos a macro abaixo para setar o bit 2 do
PORTB.</span></span><br />
<br />
<br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
<b><span style="font-size: small;">Seta_bit(PORTB,2);</span></b></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">O compilador irá fazer o seguinte processo:</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB -> 0b00010010</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> OU ->
0b00000100 <- Valor 0b00000001 rotacionado 2 vezes a
esquerda!</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
-----------------</span></div>
<div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB = 0b00010110 <- Pode se
observar que apenas o bit de destino foi alterado.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">__________________________________________________________________________________</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> </span><span style="font-size: small;"> </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="color: red;">
<b style="font-family: "Trebuchet MS",sans-serif;"><span lang="EN-US">#define
Limpa_bit(Variavel,bit) (Variavel &=~(1<<bit))</span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Esta macro tem a função inversa da anterior e serve para
limpar o bit, ou seja, quando chamada coloca o bit passado como parâmetro em
false, zero, nível baixo enfim dizemos que limpa o estado do bit, para isto
efetua a lógica AND entre o registrador passado como parâmetro e o byte
11111110 (que nada mais é do que o byte 00000001 negado), vejamos como isto
funciona:</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
<b>Limpa_bit(PORTB,4);</b></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">O compilador irá fazer o seguinte processo:</span></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB -> 0b00010010</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> AND -> 0b11101111 <- Valor
0b00000001 negado e rotacionado 4 vezes a esquerda!</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
-----------------</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB = 0b00000010 <- Pode se observar
que apenas o bit de destino foi alterado.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">__________________________________________________________________________________</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> </span><span style="font-size: small;"> </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal">
<b><span lang="EN-US"><span style="color: red; font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">#define
Testa_bit(Variavel,bit) (Variavel & (1<<bit))</span></span> </span></b><span lang="EN-US"></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
A macro chamada Testa_bit tem por finalidade nos informar o
estado do bit em questão, e para tanto efetua a lógica AND entre a variável e o
byte 00000001 rotacionado à esquerda a quantidade de bits necessários, vejamos:</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;">
<b><span style="font-size: small;">Testa_bit(PORTB,1);</span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">O compilador irá fazer o seguinte processo:</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB -> 0b00010010</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> AND -> 0b00000010 <- Valor
0b00000001 rotacionado 1 vez a esquerda!</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
-----------------</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB = 0b00000010 </span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;">Neste exemplo temos que analisar que quando
aplicamos a "máscara" temos o espelho apenas do bit passado no
parâmetro, portanto se ele estiver em zero, o resultado desta macro é zero,
mais se ele tiver estiver ativo o resultado será diferente de zero, onde
então podemos efetuar o teste.</span></span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="font-size: small;">__________________________________________________________________________________</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"> </span><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;"> </span></span></div>
<div style="text-align: justify;">
<div class="MsoNormal" style="color: red;">
<span style="font-size: small;"><b style="font-family: "Trebuchet MS",sans-serif;"><span lang="EN-US">#define
Comp_bit(Variavel,bit) (Variavel ^= (1<<bit))</span></b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">A macro Comp_bit executa o complemento do bit passado como parâmetro,
e faz isto através da lógica EXCLUSIVE OR entre o registrador passado como
parâmetro e 00000001 rotacionado a esquerda a quantidade de bits necessários,
vejamos:</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<b><span style="font-size: small;">Comp_bit(PORTB,7);</span></b></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">O compilador irá fazer o seguinte processo:</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB -> 0b00010010</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> XOR -> 0b10000000 <- Valor
0b00000001 rotacionado 7 vezes a esquerda!</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
-----------------</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">PORTB = 0b10010010 <- Pode se observar
que apenas o bit de destino foi alterado.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">__________________________________________________________________________________</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Abaixo um vídeo demonstrando o uso das macros na placa
PK2Lab</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/d3t0DpCiodg?feature=player_embedded' frameborder='0'></iframe></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: center;">
<span style="font-size: small;"><a href="http://www.esquemas.org/Macros.rar">Código fonte (mikroC PRO)</a> </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Bom pessoal por hoje é isto, desejamos a todos um Feliz Natal
com muita paz, alegria, saúde e um ano novo repleto de realizações, que venha
2012!!! </span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br />
<br />
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: center;">
<span style="font-size: small;">PK2Lab Team</span></div>
<div style="text-align: center;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: center;">
<span style="font-size: small;">www.esquemas.org</span></div>
<div style="text-align: center;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: center;">
<span style="font-size: small;">JL Audio Manutenção Eletrônica</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> </span>
</div>
<div class="MsoNormal">
@</div>
<div class="MsoNormal">
@ @</div>
<div class="MsoNormal">
@ @ @</div>
<div class="MsoNormal">
@ @ @ @</div>
<div class="MsoNormal">
@ @ @ @ @</div>
<div class="MsoNormal">
@ @
@ @ @ @ </div>
<div class="MsoNormal">
@ @ @ @ @ @ @ </div>
<div class="MsoNormal">
@ @ @
@ @ @ @ @ @ </div>
<div class="MsoNormal">
# # </div>
<div class="MsoNormal">
# # #</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;"><br /></span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;"> </span></span> </div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-16296645925250501392011-12-10T12:28:00.001-08:002011-12-10T13:55:19.565-08:00Alteração de Servomotor<b><span style="font-family: "Trebuchet MS",sans-serif;">Novas funcionalidades para seu servo!!!</span></b><br />
<br />
<span style="font-family: "Trebuchet MS",sans-serif;">Que tal efetuar algumas pequenas modificações no seu servo de modelismo e transformá-lo em um poderoso motor com giro contínuo para uso em um robô móvel, ou braço robótico?</span><br />
<br />
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Vou demonstrar como efetuar esta modificação de forma simples, em um servo da marca Tower Pro, modelo SG90, que é o servo mais fácil de ser encontrado hoje nas lojas de modelismo e tem a vantagem do seu custo ser muito baixo.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-h26VskyhoYQ/TuO_d2qpCaI/AAAAAAAAAqo/RMftatl7GO0/s1600/DSC00649.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="http://4.bp.blogspot.com/-h26VskyhoYQ/TuO_d2qpCaI/AAAAAAAAAqo/RMftatl7GO0/s320/DSC00649.JPG" width="320" /></a></div>
<br />
<div style="text-align: justify;">
</div>
<br />
<br />
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">O primeiro passo é efetuar a retirada dos quatro parafusos de fixação na parte traseira do servo motor e retirar a tampa superior que da acesso as engrenagens do sistema de redução.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-lYzgrKWOw9A/TuO_j3DcKMI/AAAAAAAAAqs/RWHTdxxKCuM/s1600/DSC00650.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="http://4.bp.blogspot.com/-lYzgrKWOw9A/TuO_j3DcKMI/AAAAAAAAAqs/RWHTdxxKCuM/s320/DSC00650.JPG" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">O próximo passo é retirar a engrenagem central do servo para que seja possível efetuar a retirada da trava que delimita o curso do potenciômetro de posicionamento de eixo.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-L2cWHkdfieQ/TuPDpOfICyI/AAAAAAAAAsU/f9nhyW81QzE/s1600/DSC006521.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="189" src="http://3.bp.blogspot.com/-L2cWHkdfieQ/TuPDpOfICyI/AAAAAAAAAsU/f9nhyW81QzE/s320/DSC006521.JPG" width="320" /></a></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Agora é necessário "enganar" o circuito de controle de correção do servo, para tanto vamos eliminar o potenciômetro e em seu lugar iremos colocar dois resistores de 2200 ohms, simulando a posição central, ou seja, o circuito do servo sempre vai achar que o mesmo encontra-se exatamente a meio curso, não efetuando correção alguma.</span></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-NLPheUveeEk/TuPAGbPewqI/AAAAAAAAArc/UkjpDdXTiUU/s1600/DSC00657.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-6UWobDU7o50/TuO_0TqIMgI/AAAAAAAAArE/SCt0T01It1E/s1600/DSC00653.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="http://4.bp.blogspot.com/-6UWobDU7o50/TuO_0TqIMgI/AAAAAAAAArE/SCt0T01It1E/s320/DSC00653.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: center;">
<span style="font-family: "Trebuchet MS",sans-serif;">Dois resistores de 2K2 substituem o potenciômetro de 4K7.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-NLPheUveeEk/TuPAGbPewqI/AAAAAAAAArc/UkjpDdXTiUU/s1600/DSC00657.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="http://1.bp.blogspot.com/-NLPheUveeEk/TuPAGbPewqI/AAAAAAAAArc/UkjpDdXTiUU/s320/DSC00657.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;">
<span style="font-family: "Trebuchet MS",sans-serif;">O último passo é remontar o servo com muito cuidado para que os terminais dos resistores não encostem nas partes metálicas do motor, colocando-se os quatro parafusos que irão prender todo o conjunto a alteração estará concluida, seu servo agora estará apto a efetuar giros completos de 360°.</span></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: center;">
<a href="http://1.bp.blogspot.com/-wQ2NbsPPmt0/TuPASosVYFI/AAAAAAAAArs/9acCruNtXeM/s1600/DSC00660.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="http://1.bp.blogspot.com/-wQ2NbsPPmt0/TuPASosVYFI/AAAAAAAAArs/9acCruNtXeM/s320/DSC00660.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;">
<b><span style="color: red; font-family: "Trebuchet MS",sans-serif;">Controle</span></b></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">O controle do servo </span><span style="font-family: "Trebuchet MS",sans-serif;">motor</span><span style="font-size: small;"> <span style="font-family: "Trebuchet MS",sans-serif;">alterado se dá da mesma maneira com que se efetua o controle de um servo original,</span></span><span style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"> sendo que a única diferença é que um tem limitação de giro e compensação de posicionamento e outro não. Para que fique bem claro este controle, eu postei um vídeo onde utilizo a ferramenta Superprobe gerando os pulsos de controle. No display pode se observar o valor atual da largura de pulso.</span></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"><br /></span></span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/7NM2t0NQE9g?feature=player_embedded' frameborder='0'></iframe></div>
<div style="text-align: justify;">
<br />
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Em breve projeto de braço robótico com servomotores controlados através da placa PK2Lab. </span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">Por hoje é isto, bons projetos!</span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<br />
<div class="separator" style="clear: both; text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;"> </span></div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com2tag:blogger.com,1999:blog-3194446240058587335.post-66095820656972930502011-12-04T13:15:00.001-08:002011-12-21T14:47:05.982-08:00Controle Remoto RC5<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"><span style="line-height: 115%;">Olá
pessoal, hoje iremos abordar um periférico bem bacana que é o Sensor IR encontrado
na placa PK2Lab. Este sensor nos trás a possibilidade
de controlarmos a placa a distância utilizando controles remotos convencionais
de televisores e outros produtos de consumo a que temos acesso diariamente e
que muitas vezes acabamos descartando por falta de uso. </span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-w75Df5pd3CU/TtvkxCyvLGI/AAAAAAAAAo0/Y8M7z_b2sI0/s1600/DSC01538.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://2.bp.blogspot.com/-w75Df5pd3CU/TtvkxCyvLGI/AAAAAAAAAo0/Y8M7z_b2sI0/s320/DSC01538.JPG" width="320" /></a></div>
</div>
<br />
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<b><span style="font-size: small;">Funcionamento:</span></b></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">O sensor IR baseia se na iluminação infra vermelha que é uma
luz não visível ao ser humano, pois seu comprimento de onda é muito longo para
ser detectado pelo nosso sistema de visão e que é muito utilizado em comunicações sem fio entre diversos dispositivos como controles remotos, celulares e instrumentos de teste e medição.</span><br />
<span style="font-size: small;"><br /></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ZoiGfHVuwt0/Ttvjr1EFMGI/AAAAAAAAAoE/YwoIfMS_wzE/s1600/espectro_eletromagnetico.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="142" src="http://2.bp.blogspot.com/-ZoiGfHVuwt0/Ttvjr1EFMGI/AAAAAAAAAoE/YwoIfMS_wzE/s320/espectro_eletromagnetico.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Embora não seja vísivel, este tipo de luz é muito mais comum do que imaginamos, o sol é uma fonte
inesgotável de luz infra vermelha, outra fonte de luz infra vermelha são as lampadas florescentes encontradas em muitos lares hoje em dia, mas como pode então um controle remoto de um
televisor funcionar tão bem em um ambiente em que temos a presença de luz solar ou outra iluminação que gere interferência na comunicação?</span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Para que tenhamos uma comunicação realmente confiável, faz se o uso de
uma modulação em frequência, na forma de um trem de pulsos quadrados na frequência
de 36KHz, que é denominada portadora. Cada bit 0, é composto de 889us de pulsos a frequência da portadora, seguido de 889us em nível baixo, enquanto um bit 1 é formado de 889us em nível baixo, seguido de 889us de pulsos a frequência da portadora.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-ar0LBwQKwtM/Ttvo4esmUwI/AAAAAAAAApE/qwjE3s2iPqo/s1600/Modula.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="http://4.bp.blogspot.com/-ar0LBwQKwtM/Ttvo4esmUwI/AAAAAAAAApE/qwjE3s2iPqo/s320/Modula.bmp" width="320" /></a></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"><br /></span></div>
<span id="goog_122047284"></span><span id="goog_122047285"></span><span id="goog_122047286"></span><span id="goog_122047287"></span> <br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<b><span style="font-size: small;">Protocolo RC5</span></b></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;">O protocolo RC5 foi desenvolvido pela Philips em
1980 para ser utilizado em seus equipamentos de consumo e consiste em uma
palavra de 14 bits, sendo que, os 2 primeiros bits são StartBits, servem para o
receptor regular o AGC(Controle de ganho automático), o bit seguinte é chamado
de Toogle, e serve como um indicador de Status informando ao receptor se a
tecla está sendo continuamente pressionada ou se simplesmente foi pressionada apenas
uma vez, os 5 bits seguintes são bits de endereçamento e os 6 bits restantes referem
se ao comando transmitido. Neste código todos os bits têm a mesma duração de 1778us
e usam a codificação Manchester, onde uma transição descendente corresponde ao
bit 0 e uma transição ascendente corresponde ao bit 1. A duração de cada mensagem é de 24,889ms e
a distância mínima entre mensagens é de 88,889ms, ou seja, 50x a duração de bit.</span></span><br />
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-YhoDFBfMRXs/Ttvjs2RDx1I/AAAAAAAAAoU/0G01hyzkw3k/s1600/RC5-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="http://3.bp.blogspot.com/-YhoDFBfMRXs/Ttvjs2RDx1I/AAAAAAAAAoU/0G01hyzkw3k/s320/RC5-1.png" width="320" /></a></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif; line-height: 115%;"><br /></span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">A Philips implementou um sistema completo, com endereços e
comandos padronizados para cada tipo de equipamento, abaixo podemos visualizar
estas informações:</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-0CpIV5dVo0o/TtvqhIU0GmI/AAAAAAAAApU/Ml8CzI4lTU8/s1600/codigos.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-0CpIV5dVo0o/TtvqhIU0GmI/AAAAAAAAApU/Ml8CzI4lTU8/s320/codigos.png" width="108" /></a><a href="http://4.bp.blogspot.com/-MR9rsimPOn4/Ttvqg0TpK4I/AAAAAAAAApM/jsGALHLdj2o/s1600/RC5_06.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-MR9rsimPOn4/Ttvqg0TpK4I/AAAAAAAAApM/jsGALHLdj2o/s320/RC5_06.gif" width="223" /></a></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Para o nosso exemplo, vamos utilizar um controle remoto de
televisor Philips cujo código de endereço é zero (controle da foto abaixo), porém foram testados vários outros controles que usam o mesmo protocolo RC5 e todos eles efetuaram o controle da placa corretamente. Apenas temos que levar em consideração o fato de que nem todos os controles da Philips realmente usam a norma RC5, os mais novos já utilizam o protocolo RC6, que é a evolução do protocolo em análise.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-ajeIi1LTKQE/TtvrwKF07CI/AAAAAAAAApc/Zp4m7H_3oD8/s1600/Controle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="68" src="http://4.bp.blogspot.com/-ajeIi1LTKQE/TtvrwKF07CI/AAAAAAAAApc/Zp4m7H_3oD8/s200/Controle.jpg" width="200" /></a></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<b><span style="font-size: small;">Programa do microcontrolador:</span></b></div>
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Para decodificar este protocolo, é necessário esperar que o
sensor TSOP4838 que está conectado ao pino RB0 do microcontrolador, detecte o primeiro StartBit da mensagem para ler os 13 bits restantes. Para
isto, dois delays foram implementados , sendo que o primeiro de 4867us é
chamado após a detecção do StartBit para aguardar o período de AGC mais o
Toogle (não utilizado neste exemplo), assim quando retornar do delay, o
programa estará exatamente no ponto de
efetuar a analise do primeiro bit referente ao endereço, posteriormente é chamado
o delay de 1770us e é feito novamente a análise do bit, e este procedimento se
repete até que obtenhamos os próximos bits
referentes à informação de endereço e por fim comando.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-WrFCCrphNLQ/Ttvn8q0wB1I/AAAAAAAAAo8/PQ8Mc3QhvcA/s1600/Protocolo.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="122" src="http://4.bp.blogspot.com/-WrFCCrphNLQ/Ttvn8q0wB1I/AAAAAAAAAo8/PQ8Mc3QhvcA/s400/Protocolo.bmp" width="400" /></a></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">
</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Usei a função de analisador lógico da placa PK2Lab para
capturar dois frames do protocolo RC5. Nestes frames podemos observar que apenas houve alteração no ultimo bit da mensagem que passou de 0 para 1. Esta função de análizador é uma ferramenta muito útil na análise de protocolos pois nos permite efetuar as medições de tempo entre transições, para isto após a captura basta clicar com o botão esquerdo do mouse em cima do inicio da transição e depois clicar com o botão direito do mouse no final da transição que se deseja analizar, o tempo e a frequência serão mostrados na tela do software. </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></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://4.bp.blogspot.com/-xlh7Wjsr33k/TtvtY7KwGlI/AAAAAAAAAps/j6MJ8EimfHM/s1600/Tecla+0.bmp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="60" src="http://4.bp.blogspot.com/-xlh7Wjsr33k/TtvtY7KwGlI/AAAAAAAAAps/j6MJ8EimfHM/s400/Tecla+0.bmp" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "Trebuchet MS",sans-serif;">Frame tecla 0</span></td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</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://2.bp.blogspot.com/-YfQLmnJEavE/TtvtYruYaWI/AAAAAAAAApk/jTNVnk3dDi0/s1600/Tecla+1.bmp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="61" src="http://2.bp.blogspot.com/-YfQLmnJEavE/TtvtYruYaWI/AAAAAAAAApk/jTNVnk3dDi0/s400/Tecla+1.bmp" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "Trebuchet MS",sans-serif;">Frame tecla 1</span></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "Trebuchet MS",sans-serif;">O programa foi desenvolvido em duas versões, uma em assembly, desenvolvida por Marcos Guilherme Cunha e outra em C desenvolvida por Jean Carlos da Silva. As duas versões seguem a mesma idéia, porém, vale ressaltar que o programa escrito em assembly teve uma complexidade muito maior no que diz respeito aos delays. </span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;">Vídeo demonstrando o funcionamento do programa na placa PK2Lab.</span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/jtd8e636Q9c?feature=player_embedded' frameborder='0'></iframe></div>
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> Arquivos para download:</span><br />
<span style="font-size: small;"><br /></span><br />
<span style="font-size: small;"><a href="http://www.esquemas.org/RC5.rar">Código fonte do programa C (MikroC)</a></span><br />
<span style="font-size: small;"><a href="http://www.esquemas.org/RC5ASSEMBLY.rar">Código fonte do programa Assembly (MPLAB)</a> </span><br />
<br />
<span style="font-size: small;">Agradecimento especial ao colaborador Marcos Guilherme Cunha que gentilmente desenvolveu a versão em assembly para este post. </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> </span></div>
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<span style="font-size: small;"> </span></div>
<br />
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;">
</span></span></div>
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">
<br /></div>
<div class="MsoNormal">
<br /></div>
<span style="font-size: small;">
</span><br />
<div class="MsoNormal">
<span style="font-size: small;"> </span></div>
<span style="font-size: small;">
</span>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com40tag:blogger.com,1999:blog-3194446240058587335.post-59220104346459461762011-11-27T13:44:00.001-08:002011-12-28T16:43:20.022-08:00Controle de Fader Behringer<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">Olá galera! após algumas provas da faculdade me sobrou um tempinho e aqui estou para mostrar para vocês mais um projeto utilizando a placa PK2Lab.</span><br />
<br />
<span style="font-family: 'Trebuchet MS', sans-serif;">Antes de continuar, temos que nos familiarizar com o termo técnico "fader" que é a forma que os operadores de áudio usam ao se referirem ao potenciômetro deslizante, estes faders podem ser motorizados ou não, e são um dos ajustes mais recorridos nas mesas de audio e iluminação.</span><br />
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span><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/-CtjQ-Ae3o04/TtK5DxhLNZI/AAAAAAAAAnc/2MlJcYNZC5I/s1600/Fader.JPG" style="margin-left: auto; margin-right: auto;"><img border="0" height="98" src="http://3.bp.blogspot.com/-CtjQ-Ae3o04/TtK5DxhLNZI/AAAAAAAAAnc/2MlJcYNZC5I/s320/Fader.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: 'Trebuchet MS', sans-serif;">Fader motorizado Behringer</span></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td><td class="tr-caption" style="text-align: center;"><br /></td></tr>
</tbody></table>
<span style="font-family: 'Trebuchet MS', sans-serif;"></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">No mundo do áudio profissional, é comum nos depararmos com mesas de som digitais, onde todo o processamento de som é feito em poderosos DSP's e o posicionamento dos faders se faz com o uso de motores CC e correias, com isto podemos ter em 16 faders o controle de 64, cada conjunto de 16 faders em uma página de controle, ao se alterar entre páginas, os eixos dos faders também se alteram, conforme a memória da página que estiver selecionada.</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;"> </span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-ghhgUDkKG0U/TtK4q-p4spI/AAAAAAAAAnU/Xv-sezBH7KI/s1600/digital_32_canais.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" src="http://4.bp.blogspot.com/-ghhgUDkKG0U/TtK4q-p4spI/AAAAAAAAAnU/Xv-sezBH7KI/s320/digital_32_canais.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">Como eu estava com um destes faders em mãos, resolvi brincar um pouco e desenvolvi um pequeno código para demonstrar o funcionamento do mesmo, o código é muito simples e consiste em ler o valor correspondente do fader que está conectado ao PORTA1 e comparar com os dados enviados via USB, então o programa fica o tempo todo mantendo a posição do eixo, ou seja, no caso de alguma força externa mover o cursor, o programa tentará corrigí-lo imediatamente, claro que há outras maneiras muito mais elegântes de efetuar este controle, como por exemplo utilizando um controle PID, porém o foco do post é dar uma idéia de como é que funcionam estas mesas e não este tipo de implementação.</span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">Para efetuar o controle do motor CC conectado ao fader, utilizamos CI driver TA7291S fabricado pela empresa Toshiba que consiste em uma ponte H completa de 1A. Para acionar o motor, precisamos apenas de dois sinais TTL onde temos as funções de girar a esquerda, girar a direita, freiar e liberar o motor. </span><span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-FtylHP9n-Nk/TtLEK8qzJbI/AAAAAAAAAns/7JcYP2iz8tM/s1600/driver.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-FtylHP9n-Nk/TtLEK8qzJbI/AAAAAAAAAns/7JcYP2iz8tM/s320/driver.bmp" width="305" /></a></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">Este driver possui ainda circuito de proteção </span><span style="font-family: 'Trebuchet MS', sans-serif;">térmica e </span><span style="font-family: 'Trebuchet MS', sans-serif;">de sobrecorrente, alem de um pino Vref onde é possivel controlar a corrente que flui pela ponte. </span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">Um pequeno Proto Board foi utilizado para interligar o driver à placa PK2Lab, onde os pinos Vcc(2), Vref(8) e Vs(6) estão conectados a alimentação de 5V, os pinos de controle IN1 e IN2 estão conectados ao PORTD0 e PORTD1. O motor deste fader como característica a tensão de trabalho de 8V, porém anos testes o sistema se comportou muito bem trabalhando a 5V.</span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-XFkxYl8HRw8/TtLSUtuN0ZI/AAAAAAAAAn0/gqEC1oTEnvk/s1600/DSC01491.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-XFkxYl8HRw8/TtLSUtuN0ZI/AAAAAAAAAn0/gqEC1oTEnvk/s320/DSC01491.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-XhoMmYK_wD0/TtLBKSrCdqI/AAAAAAAAAnk/m_wXGvM3aoM/s1600/DSC01489.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-XhoMmYK_wD0/TtLBKSrCdqI/AAAAAAAAAnk/m_wXGvM3aoM/s320/DSC01489.JPG" width="320" /></a></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-XFkxYl8HRw8/TtLSUtuN0ZI/AAAAAAAAAn0/gqEC1oTEnvk/s1600/DSC01491.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a></div>
<div style="text-align: center;">
<span style="font-family: 'Trebuchet MS', sans-serif;"> </span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
</div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">Para este projeto também criei um pequeno supervisório em C# para que se possa controlar e ter um feedback da posição do eixo do fader, os dados são lidos e escritos diretamente no buffer da USB que está configurado no modo HID (Human Interface Device) que é a mesma categoria em que se encontram teclados e mouses USB. </span></div>
<div style="text-align: justify;">
<br />
<div style="text-align: center;">
</div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
<img alt="" src="data:image/png;base64,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" /> </div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;">Um detalhe interessante deste software, é que ele nós dá a informação real da posição do eixo do fader e isto é um recurso poderosíssimo pois desta forma temos certeza de que o comando enviado ao fader foi corretamente interpretado e o ajuste foi executado.</span></div>
<br /></div>
<div style="text-align: justify;">
<br />
<span style="font-family: 'Trebuchet MS', sans-serif;"> Abaixo um vídeo demonstrando o funcionamento do projeto. </span><br />
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/sdoFx4A0XOo?feature=player_embedded' frameborder='0'></iframe></div>
<span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709"></span><span id="goog_755942709"></span><span id="goog_755942710"></span></span><br />
<span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709"></span><span id="goog_755942709"></span><span id="goog_755942710"></span></span><br />
<span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709">Para que vocês possam ter idéia de como são rápidos estes ajustes nas mesas digitais, posto o vídeo de uma mesa de som YAMAHA 01V96 chamado "Dancing Faders" em que os faders aparecem "dançando", claro que não passa de uma brincadeira do tecnico de som, mais nos dá a ideia exata do poder e da precisão deste controle.</span><span id="goog_755942709"></span><span id="goog_755942710"></span></span><br />
<span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709"></span><span id="goog_755942709"></span><span id="goog_755942710"></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<br /><object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/8PO_qAxJ-fE/0.jpg"><param name="movie" value="http://www.youtube.com/v/8PO_qAxJ-fE&fs=1&source=uds" />
<param name="bgcolor" value="#FFFFFF" />
<embed width="320" height="266" src="http://www.youtube.com/v/8PO_qAxJ-fE&fs=1&source=uds" type="application/x-shockwave-flash"></embed></object></div>
<span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709"></span><span id="goog_755942709"></span><span id="goog_755942710"></span></span><br />
<span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709"></span><span id="goog_755942710"></span></span><br />
<span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709">Arquivos para download:</span></span><br />
<ul>
<li><a href="http://www.esquemas.org/FaderControlPIC.rar"><span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709">Código fonte microcontrolador em C (MikroC PRO)</span></span></a></li>
<li><a href="http://www.esquemas.org/Controle_Potenciometro_USB.rar"><span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709">Código fonte supervisório USB (Visual C# 2010)</span></span></a></li>
<li><span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709"><a href="http://www.esquemas.org/FaderControlPC.rar">Supervisório USB</a> </span></span></li>
<li><span style="font-family: 'Trebuchet MS', sans-serif;"><span id="goog_755942709"><a href="http://www.esquemas.org/TA7291.pdf">Datasheet TA7291S</a> </span><span id="goog_755942710"></span></span></li>
</ul>
</div>
<div style="text-align: justify;">
<br />
<span style="font-family: 'Trebuchet MS', sans-serif;"> Por hoje é isto, boms projetos!</span></div>
<div style="text-align: justify;">
<span style="font-family: 'Trebuchet MS', sans-serif;"><br /></span></div>
<div style="text-align: justify;">
</div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-11813010904938993242011-11-06T17:16:00.000-08:002011-11-06T17:16:36.977-08:00PK2Lab e Flowcode 4<div class="separator" style="clear: both; text-align: center;"></div><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><span style="font-size: small;">Hoje apresento a vocês um software muito interessante desenvolvido pela empresa Matrix Multimedia e que é considerado uma das linguagens de programação mais avançadas para microcontroladores disponível na atualidade, chama-se Flowcode. </span></div><div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-x0PGBmtInuM/TrckEQO0vkI/AAAAAAAAAk8/sr4IV6PDiU8/s1600/Logo1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" ida="true" src="http://3.bp.blogspot.com/-x0PGBmtInuM/TrckEQO0vkI/AAAAAAAAAk8/sr4IV6PDiU8/s320/Logo1.jpg" width="225" /></a></div><br />
</div><div></div><div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><span style="font-size: small;">A grande vantagem do Flowcode é que permite aos utilizadores com pouca experiência criar circuitos eletrônicos e sistemas robóticos complexos de forma simples e intuitiva. O Flowcode é uma linguagem de programação poderosa que recorre a macros para facilitar o controle de dispositivos complexos, como displays de 7-segmentos, controladores para motores e displays LCD. A utilização de macros permite ao utilizador controlar dispositivos eletrônicos extremamente complexos de uma maneira mais transparente. </span></div><div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-8zzt9ArkX4I/TrckR_OwRzI/AAAAAAAAAlE/ESZZEw_qwME/s1600/FIXINGS+Mockup.png" imageanchor="1"><img border="0" height="160" ida="true" src="http://4.bp.blogspot.com/-8zzt9ArkX4I/TrckR_OwRzI/AAAAAAAAAlE/ESZZEw_qwME/s320/FIXINGS+Mockup.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><br />
<div class="MsoNormal"><span style="font-size: small;">Além de gerar o código binário para gravação do microcontrolador, esta ferramenta permite a simulação de uma ampla gama de periféricos na própria tela e de forma muito eficiente, mostrando no painel de controle, muitas informações referentes aos componentes adicionados ao projeto, podemos citar como exemplo o componente PWM, que mostra a forma de onda gerada com as informações de período e ciclo ativo (Duty Cycle).</span></div></div><div style="text-align: justify;"></div><div class="separator" style="clear: both; text-align: center;"><a href="data:image/png;base64,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" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></div><div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="data:image/png;base64,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" imageanchor="1"><img alt="" border="0" src="data:image/png;base64,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" /></a></div></div><div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><br />
</div><div style="text-align: justify;"></div><div class="MsoNormal" style="font-family: "Trebuchet MS", sans-serif; text-align: justify;"><span style="font-size: small;">Outra vantagem é que este software é completamente compatível com a placa PK2Lab, não sendo necessário abrir o código em outro aplicativo para efetuar a gravação, apenas execute a compilação que o programa é automaticamente gravado na placa, tudo através de um cabo USB. </span><br />
<br />
<span style="font-size: small;">Para demonstrar o funcionamento do software, criei dois tutoriais em vídeo, que mostra a criação de um simples programa que alterna os led's conectados ao PORTD da placa PK2Lab e o processo de configuração da placa PK2Lab junto ao software Flowcode.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/LbWtrD0mRsw?feature=player_embedded' frameborder='0'></iframe></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/L7ddVFyD0sQ?feature=player_embedded' frameborder='0'></iframe></div><br />
<span style="font-size: small;"></span><br />
<div style="text-align: justify;"><span style="font-size: small;">Ao instalar o software, é necessário selecionar o programador PicKit2 para que o software reconheça a placa PK2Lab como destino do projeto. O Software possui ainda uma versão gratuita de avaliação que pode ser baixada diretamente do site do desenvolvedor.</span><br />
<br />
<span style="color: white;"><u>Acesse os links abaixo para obter maiores informações.</u></span><br />
<br />
<a href="http://www.esquemas.org/Manual_FC4.pdf">Manual em Inglês</a><br />
<br />
<span style="font-size: small;"><a href="http://www.matrixmultimedia.com/">Página do desenvolvedor</a></span><br />
<span style="font-size: small;"><br />
<a href="http://www.matrixmultimedia.com/lc_index.php?p=7">Vídeos de treinamento (Inglês)</a><br />
</span><span style="font-size: small;"><br />
</span><br />
<span style="font-size: small;">Bom, espero que tenham gostado, boms projetos! </span><br />
<br />
<span style="font-size: small;">******************************************************************************************************************</span></div><br />
</div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-54348018625425746642011-11-02T19:12:00.000-07:002011-11-03T20:13:22.527-07:00Comunicação Serial RS-232<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-KUbHaC8xx00/TrHr4aenFjI/AAAAAAAAAjk/xJLb0_t9M6s/s1600/imagem.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="91" src="http://3.bp.blogspot.com/-KUbHaC8xx00/TrHr4aenFjI/AAAAAAAAAjk/xJLb0_t9M6s/s320/imagem.JPG" width="320" /></a></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Olá galera, hoje apresento a vocês uma ferramenta essencial para o desenvolvimento de sistemas eletrônicos, principalmente embarcados, que é a comunicação serial RS-232.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><div style="text-align: justify;"><span style="font-size: small;"><span style="font-family: 'Trebuchet MS', sans-serif;"> </span><span style="font-family: 'Trebuchet MS', sans-serif;">Muitas vezes nos deparamos com a necessidade de trocar informações entre um PC e a placa micro controlada e uma maneira simples de se conseguir isto é por meio do uso da porta serial.</span></span></div><br />
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">A maioria das mensagens digitais são mais longas que alguns poucos bits, portando se faz necessário o uso de alguma técnica para transmitir esta informação. Na comunicação paralela, como o próprio nome diz, transmite-se todos os bits ao mesmo tempo, porém, para isto é utilizado um pino de hardware para cada bit a ser transmitido, isto nos traz velocidade, mas demanda muito hardware. Já na comunicação serial a mensagem é quebrada em partes menores e transmitida sequencialmente, onde cada bit representa uma parte da mensagem. Os bits individuais são então rearranjados no destino para compor a mensagem original.</span><span style="font-size: small;"> </span></div><div style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"><br />
</span></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/-Gzilz2DckbM/TrHkjLpwwEI/AAAAAAAAAjE/coPhZP1DZI8/s1600/Frame.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="93" src="http://1.bp.blogspot.com/-Gzilz2DckbM/TrHkjLpwwEI/AAAAAAAAAjE/coPhZP1DZI8/s400/Frame.JPG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: 'Trebuchet MS', sans-serif;">Exemplo de frame serial (1 Byte)</span></td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><b>Taxa de Transferência (Baud Rate)</b></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">A taxa de transferência refere-se à velocidade com que os dados são enviados por meio de um canal e é medida em transições elétricas por segundo. Para que o equipamento transmissor consiga transmitir corretamente e o receptor possa entender esta informação recebida, ambos têm de estar em sincronismo, ou seja, ajustados para o mesmo Baud Rate.</span></div><div style="text-align: justify;"><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> Na comunicação serial temos alguns valores comumente usados, sendo eles 300, 1200, 2400, 4800, 9600, 19200 e 56000bps, onde um valor de 9600 corresponde a uma transferência de 9600 dados por segundo, quanto maior for a velocidade, maior deverá ser a estabilidade do oscilador local para garantir a correta comunicação.</span></div><br />
<br />
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><b><span style="font-size: small;">Níveis Lógicos</span></b></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">A porta serial utiliza valores de tensões específicos para codificação de dados, onde um valor entre -3V e -25V, são considerados nível lógico “1” e tensões entre +3V e +25V são considerados nível lógico “0”, é por esta razão que muitos conversores USB/RS-232 não funcionam adequadamente quando utilizados com gravadores de microcontrolador, pois estes não conseguem gerar tais tensões.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-1LyfI3fI_hE/TrHtZl5ZaqI/AAAAAAAAAj8/fvD-ZfFuerQ/s1600/Niveis.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="http://3.bp.blogspot.com/-1LyfI3fI_hE/TrHtZl5ZaqI/AAAAAAAAAj8/fvD-ZfFuerQ/s400/Niveis.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><br />
<span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span> <br />
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><b><span style="font-size: small;">MAX232</span></b></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-size: small;"><span style="font-family: 'Trebuchet MS', sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Um dos componentes que faz a conversão dos dados do padrão TTL(PIC) para o padrão RS-232(PC) é o CI MAX232, ele inclui um circuito de “charge pump” capaz de gerar tensões de +10V e –10V a partir de uma fonte de alimentação simples de +5V. Este é o CI empregado na placa PK2Lab para comunicação serial.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-G_hqbzWWKPA/TrHuLFluF2I/AAAAAAAAAkE/lySJ92CFOCU/s1600/MAX232.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-G_hqbzWWKPA/TrHuLFluF2I/AAAAAAAAAkE/lySJ92CFOCU/s1600/MAX232.JPG" /></a></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span> <br />
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><b><span style="font-size: small;">Cabeamento</span></b></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">O cabo utilizado para a comunicação entre a placa PK2Lab e o PC, é conhecido como cabo “null modem”, onde temos apenas 3 fios (TxD, RxD e GND), neste sistema não utilizamos controle de tráfego e temos que conectar <span style="line-height: 115%;">o sinal DTR com os sinais DSR e CD nos dois extremos.</span></span></div><div style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"><br />
</span></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-ZvS5SDf3BoU/TrHurYTLlZI/AAAAAAAAAkM/JGlvrPQPx5k/s1600/Imagem+2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="http://1.bp.blogspot.com/-ZvS5SDf3BoU/TrHurYTLlZI/AAAAAAAAAkM/JGlvrPQPx5k/s200/Imagem+2.JPG" width="200" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><b><span style="font-size: small;">Programa do microcontrolador</span></b></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Para o programa do microcontrolador, foi escrito um código simples que verifica os dados recebidos pela serial, ligando e desligando os leds do PORTD conforme caracter recebido. Caso o caracter recebido não seja de controle, a placa envia ao PC uma string informando a situação. Para isto utilizamos três funções da biblioteca do MikroC, são elas:</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"><span style="color: red;">Usart_Init(9600)</span> </span></div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Função que inicializa a comunicação via hardware do microcontrolador, nesta função deve-se informar qual velocidade ele irá trabalhar, neste caso 9600bps.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;">Usart_Data_Ready()</span></div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Função que indica recebimento de dados via comunicação serial, caso tenha dados no buffer, retorna 1.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"><span style="color: red;">Usart_Write(x)</span><b style="color: red;"> </b> </span></div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Função que envia dados pela porta serial, onde os dados são enviados como parâmetro da função, neste exemplo é enviado o conteúdo da variável x.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;">Usart_Read() </span></div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Função que recebe dados pela porta serial, para que isto ocorra, deve-se atribuir a uma variável de recepção o retorno da função Usart_Read().</span></div><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span><br />
<div class="separator" style="clear: both; text-align: center;"> </div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><b><span style="font-size: small;">Terminal Serial C#</span></b></div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"><span style="line-height: 115%;"></span></span></div><div style="text-align: justify;"><span style="font-size: small;"><span style="font-family: 'Trebuchet MS', sans-serif;"> </span><span style="font-family: 'Trebuchet MS', sans-serif;">Para este projeto, desenvolvi um software em Visual Studio C# 2010 que consiste em um terminal serial completo, onde temos as janelas de recepção e transmissão de dados e a aba de configuração da porta COM, onde é possível selecionar diferentes taxas de comunicação entre outros parâmetros.</span></span></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-6wHXyX_jkbw/TrHx2FqqHxI/AAAAAAAAAkc/MFhXtcHijxg/s1600/Terminal.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" src="http://3.bp.blogspot.com/-6wHXyX_jkbw/TrHx2FqqHxI/AAAAAAAAAkc/MFhXtcHijxg/s400/Terminal.JPG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><b><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"><a href="http://www.esquemas.org/Terminal_Serial.rar">Terminal Serial.rar</a></span><u><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"> </span></u></b></div><div class="separator" style="clear: both; text-align: center;"><b><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;"><a href="http://www.esquemas.org/USART.rar">Código do projeto</a> </span></b></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="text-align: justify;"><span style="font-family: 'Trebuchet MS', sans-serif; font-size: small;">Bom, acredito que tenha conseguido passar alguma idéia do que é a comunicação serial, como puderam ver, com o uso das bibliotecas do MikroC, o processo se torna simples e eficiente, por hoje é isto, boms projetos!</span></div><div class="MsoNormal"></div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com2tag:blogger.com,1999:blog-3194446240058587335.post-76796658283237117292011-10-22T07:36:00.000-07:002011-11-03T07:20:29.024-07:00Controle de Servomotores<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-size: small;">Olá, hoje vamos conhecer mais um componente interessante e muito utilizado na eletrônica e sistemas de controle, chamado Servomotor.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><span style="font-size: small;"><a href="http://2.bp.blogspot.com/-JcOffQxGYRM/TqLEalYw4MI/AAAAAAAAAiE/NKN1VFHCbtY/s1600/hitservop.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-JcOffQxGYRM/TqLEalYw4MI/AAAAAAAAAiE/NKN1VFHCbtY/s1600/hitservop.jpeg" /></a></span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-size: small;">Servomotores são dispositivos eletromecânicos em que seu eixo se desloca em um movimento máximo de 180°, operando em malha fechada, ou seja, recebe um sinal de controle que indica a posição desejada e atua no eixo principal até que a posição informada seja alcançada, mantendo-se nesta posição até que o sinal de controle se altere novamente, caso seu curso seja alterado mecanicamente o sistema de malha fechada garante seu retorno a posição estabelecida pelo sinal de controle.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-size: small;">O controle de servomotores é feito através do sistema PPM (Modulação por posição de pulso), ou seja, deve se garantir um pulso que vária entre 1 e 2 milissegundos (podendo variar de fabricante para fabricante) repetindo se a cada 20ms, sendo que:</span></div><span style="font-size: small;"> </span><span style="font-size: small;"><br style="font-family: "Trebuchet MS",sans-serif;" /></span><br />
<ul style="font-family: "Trebuchet MS",sans-serif;"><li><span style="font-size: small;"> 1 ms Corresponde à posição do braço do servo todo a esquerda ou 0º </span></li>
<li><span style="font-size: small;"> 1,5 ms É o que chamamos de posição central do servo ou 90º</span></li>
<li><span style="font-size: small;"> 2ms Corresponde à posição do braço do servo todo a direita ou 180º</span></li>
</ul><div class="separator" style="clear: both; font-family: "Trebuchet MS",sans-serif; text-align: center;"><span style="font-size: small;"><a href="http://4.bp.blogspot.com/-XCwK9uUUukY/TqLEZFDMEoI/AAAAAAAAAhs/zby8emt_LFk/s1600/a991.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></span></div><div class="separator" style="clear: both; font-family: "Trebuchet MS",sans-serif; text-align: center;"><span style="font-size: small;"><a href="http://3.bp.blogspot.com/-ZbM1vLABIZw/TqLEdteG_UI/AAAAAAAAAik/QURujaqKHbk/s1600/Servo+%2528Small%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="http://3.bp.blogspot.com/-ZbM1vLABIZw/TqLEdteG_UI/AAAAAAAAAik/QURujaqKHbk/s400/Servo+%2528Small%2529.jpg" width="400" /></a></span></div><div style="font-family: "Trebuchet MS",sans-serif;"><br />
</div><div class="separator" style="clear: both; font-family: "Trebuchet MS",sans-serif; text-align: center;"><span style="font-size: small;"><a href="http://4.bp.blogspot.com/-CbQz1hzJ2pc/TqLEZjEMFUI/AAAAAAAAAh0/pbTRiXTwHtg/s1600/Futaba-Servo-Motor-Connector.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-size: small;">Este sinal pode ser gerado facilmente através do emprego de microcontroladores, e é isto que vamos ver neste post, como implementar o controle de servomotores com o microcontrolador PIC18F4550.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/Iw9npUtsr_0/0.jpg" height="266" width="320"><param name="movie" value="http://www.youtube.com/v/Iw9npUtsr_0?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" /><param name="bgcolor" value="#FFFFFF" /><embed width="320" height="266" src="http://www.youtube.com/v/Iw9npUtsr_0?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash"></embed></object></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><span style="font-size: small;"><br />
</span></div><div align="center" class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt; text-align: center;"><span style="font-size: small;"></span><span style="font-size: small;"> </span></div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><span style="font-size: small;"><b>Interfaceamento com o microcontrolador:</b></span></div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-size: small;">Para que seja criado o sinal de controle dos servos, que por padrão tem uma frequência de 50Hz, poderíamos utilizar um dos 2 módulos PWM internos do PIC, porém como a frequência do PWM é muito baixa(50Hz), teríamos que alterar nosso clock principal para aproximadamente 500KHz para que o módulo interno de PWM conseguisse atingir a frequência desejada, o que reduziria drasticamente o desempenho do resto do programa, ou seja seria muito pouco eficaz, outra maneira de se gerar este pulso é utilizando o TMR0 para criar este PWM, este TMR é ajustado para estourar a cada 100us incrementando uma variável intitulada <b>Top_Value</b>, e a cada estouro é feita a comparação desta variável às variáveis de controle de canal, por exemplo, Top_Value1, neste caso referenciada ao sinal de controle do servo 1, conectado ao pino PORTC1, a quantidade de servos que pode ser controlada depende apenas da quantidade de pinos de I/O disponíveis.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><div class="separator" style="clear: both; font-family: "Trebuchet MS",sans-serif; text-align: center;"><span style="font-size: small;"><a href="http://4.bp.blogspot.com/-FxSLA7rYn8w/TqLEc78TgBI/AAAAAAAAAic/S_CJdZSQtOg/s1600/Servo2+%2528Small%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="http://4.bp.blogspot.com/-FxSLA7rYn8w/TqLEc78TgBI/AAAAAAAAAic/S_CJdZSQtOg/s400/Servo2+%2528Small%2529.jpg" width="400" /></a></span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><span style="font-size: small;"> </span> </div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif; margin: 0cm 0cm 0.0001pt 18pt;"><b><span style="font-size: small;">Pinagem:</span></b></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin: 0cm 0cm 0.0001pt 18pt;"><br />
</div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin: 0cm 0cm 0.0001pt 18pt; text-align: justify;"><span style="font-size: small;">Cada fabricante possui seu padrão de pinagem, abaixo podemos observar alguns dos mais comuns encontrados no mercado, neste exemplo </span><span style="font-size: small;">estamos utilizando</span><span style="font-size: small;"> o servo </span><span style="font-size: small;">da marca Tower Pro, modelo 9G que segue o</span><span style="font-size: small;"> mesmo padrão da JR.</span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin: 0cm 0cm 0.0001pt 18pt;"><br />
</div><div class="separator" style="clear: both; font-family: "Trebuchet MS",sans-serif; text-align: center;"><span style="font-size: small;"><a href="http://4.bp.blogspot.com/-oeYkeGhnYhk/TqLEcOYLFkI/AAAAAAAAAiU/l4TD3xJTIjA/s1600/index.php.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://4.bp.blogspot.com/-oeYkeGhnYhk/TqLEcOYLFkI/AAAAAAAAAiU/l4TD3xJTIjA/s400/index.php.jpeg" width="400" /></a></span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin: 0cm 0cm 0.0001pt 18pt;"><br />
</div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span> <br />
<div style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"> </span> </div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt; text-align: justify;"><span style="font-size: small;">Como pode ver, o controle de servos é uma tarefa simples e que trás muitas vantagens, pois nos abre a possibilidade de criarmos movimentos com certa precisão e torque razoável, dependendo da marca e modelo escolhido. </span></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><b><span style="font-size: small;"><a href="http://www.esquemas.org/Servo.rar">Código do projeto</a> </span></b></div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin: 0cm 0cm 0.0001pt 18pt;"><br />
</div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><span style="font-size: small;">O projeto foi baseado na idéia de <b>Ronald Willem Besinga</b>. </span></div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; margin-bottom: 0.0001pt;"><span style="font-size: small;"><a href="http://www.ermicro.com/blog/?p=771">http://www.ermicro.com/blog/?p=771</a></span></div><span style="font-size: small;"><span style="font-family: "Trebuchet MS",sans-serif;"> </span></span><br />
<div class="separator" style="clear: both; font-family: "Trebuchet MS",sans-serif; text-align: center;"><span style="font-size: small;"><a href="http://2.bp.blogspot.com/-JcOffQxGYRM/TqLEalYw4MI/AAAAAAAAAiE/NKN1VFHCbtY/s1600/hitservop.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></span></div><div style="font-family: "Trebuchet MS",sans-serif;"><span style="font-size: small;"> Grande abraço e bons projetos!</span></div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-51356911546360290822011-10-12T13:34:00.000-07:002011-11-03T07:21:05.001-07:00Voltímetro Digital (7 Segmentos)<div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Olá galera, gostaria de mostrar a vocês um projeto bem simples, mais ao mesmo tempo muito interessante, que é o voltímetro digital em display de sete segmentos.</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-8VxsJ2jlTUs/TpXvki288aI/AAAAAAAAAdo/RxySKi-7uXY/s1600/DSC01638.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-8VxsJ2jlTUs/TpXvki288aI/AAAAAAAAAdo/RxySKi-7uXY/s320/DSC01638.JPG" width="320" /></a></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">O que torna este projeto interessante é o fato de multiplexar os 3 displays no mesmo barramento de dados (PORTB) sendo que sempre temos apenas um dos três displays acesos por vez, e a cada 5ms há a troca entre eles, isto é possível pelo fato da persistência da visão ou persistência retiniana (O fato do olho humano não perceber alterações em imagens projetadas a um ritmo superior a 16 quadros por segundo).</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-eNMTucRmScc/TpX35A1aDBI/AAAAAAAAAdw/nYsQZY1rKuw/s1600/Displays.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-eNMTucRmScc/TpX35A1aDBI/AAAAAAAAAdw/nYsQZY1rKuw/s1600/Displays.JPG" /></a></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Estes displays são muito utilizados nos mais variados equipamentos como, por exemplo, de instrumentação e automação, por serem de fácil visualização, normalmente encontrados em equipamentos como voltímetros, freqüencímetros, contadores, relógios, entre outros.</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><span style="font-size: small;"><b><a href="http://www.esquemas.org/Voltimetro.rar">Código do projeto.</a></b></span></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/5NvhZxVxnAo?feature=player_embedded' frameborder='0'></iframe> </div><div class="separator" style="clear: both; text-align: center;"><b><span style="font-size: x-small;"><span style="font-family: Verdana,sans-serif;">Teste de funcionamento </span></span></b></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"> Grande abraço a todos e bons projetos!</div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com1tag:blogger.com,1999:blog-3194446240058587335.post-33866981272194473812011-10-08T12:09:00.000-07:002011-11-03T07:21:53.551-07:00Mais do mesmo!!!<div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Olá galera, é muito bom estar de volta aos posts, após algumas semanas conturbadas com muitas provas de cálculo na faculdade, feiras e eventos, venho hoje apresentar a vocês as três versões comercializadas da placa PK2Lab.</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><b><br />
</b></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><b><a href="http://produto.mercadolivre.com.br/MLB-202194016-pk2lab-grav-kit-de-desenvolvimento-pic-16f18f-usb-_JM">PK2Lab V1.1 (Grav)</a></b></div><b><span style="font-family: Verdana,sans-serif;"> </span></b><br />
<div class="MsoNormal" style="font-family: Verdana,sans-serif;"><b><span lang="EN-US"> </span></b></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><b><a href="http://produto.mercadolivre.com.br/MLB-202279874-pk2lab-sace-kit-de-desenvolvimento-pic-16f18f-usb-_JM">PK2Lab V1.1 (Sace) </a></b><br />
<br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><b><a href="http://produto.mercadolivre.com.br/MLB-202280232-pk2lab-cace-kit-de-desenvolvimento-pic-16f18f-usb-_JM"><span lang="EN-US">PK2Lab V1.1 (Cace) </span></a></b></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"></div><span style="font-family: Verdana,sans-serif;"> </span><br />
<div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Todas as versões são construídas em cima da mesma plataforma, ou seja, são compatíveis com todos os exemplos e funções mencionadas neste blog e no manual de instruções.</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="MsoNormal" style="color: red; font-family: Verdana,sans-serif;"><b>Mais o que realmente muda então?</b></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Muitas vezes, principalmente quando estamos na fase de aprendizagem, nossos recursos financeiros não são abundantes, pensando nisto, disponibilizamos a placa na versão PK2Lab V1.1 (Grav), que consiste da PCI com todos os componentes SMD já soldados e o gravador pronto para uso, para que o aluno/hobbista possa ter acesso a placa em forma de KIT, sem ter de pagar por recursos que não lhe são interessantes nesta fase de aprendizagem. O aluno/hobbista deverá adquirir separadamente os componentes que lhe forem de interesse e proceder à instalação dos mesmos na placa, sendo este processo de fácil manuseio, acompanha CD com todas as informações necessárias para uso do KIT como exemplos em linguagem C e assembly, esquema elétrico, compiladores.</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-fBUafnDu95c/TnsoZD8F1AI/AAAAAAAAAbU/YHXQHDXhz5Q/s1600/PK2Lab+019.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="http://1.bp.blogspot.com/-fBUafnDu95c/TnsoZD8F1AI/AAAAAAAAAbU/YHXQHDXhz5Q/s200/PK2Lab+019.JPG" width="200" /></a><a href="http://4.bp.blogspot.com/-_cP2fFfeurE/TnspSg9AKDI/AAAAAAAAAbU/yt_CUlRAzQM/s1600/PK2Lab+033.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="http://4.bp.blogspot.com/-_cP2fFfeurE/TnspSg9AKDI/AAAAAAAAAbU/yt_CUlRAzQM/s200/PK2Lab+033.JPG" width="200" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-k53hI8QAj0A/Tnsql77hAXI/AAAAAAAAAbU/4dNxIoVqHh0/s1600/PK2Lab+015.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></div><div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Já a versão PK2Lab V1.1 (Sace), consiste da placa completa montada e 100% funcional, pronta para uso, acompanhada do microcontrolador 16F877A e CD com os arquivos como manuais, esquemas, programas, compiladores e demais informações necessárias para correto manuseio da mesma.</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-NuTvd4LR97M/TnsnDwT0AFI/AAAAAAAAAbU/YPS9EJkk53k/s1600/PK2Lab+003.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://2.bp.blogspot.com/-NuTvd4LR97M/TnsnDwT0AFI/AAAAAAAAAbU/YPS9EJkk53k/s320/PK2Lab+003.JPG" width="320" /></a></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Para concluir, temos a versão PK2Lab V1.1 (Cace), que nada mais é, do que a versão SACE com o microcontrolador PIC18F4550, mais os acessórios complementares sendo estes 2 cabos USB, um cabo serial padrão RS232, fonte de alimentação chaveada(Bi volt) de 12V-1A, e estojo em madeira para proteção e armazenamento da placa.</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-k53hI8QAj0A/Tnsql77hAXI/AAAAAAAAAbU/4dNxIoVqHh0/s1600/PK2Lab+015.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-k53hI8QAj0A/Tnsql77hAXI/AAAAAAAAAbU/4dNxIoVqHh0/s320/PK2Lab+015.JPG" width="320" /> </a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal" style="font-family: Verdana,sans-serif; text-align: justify;">Em breve estaremos disponibilizando aos usuários da PK2Lab um curso em Assembly, totalmente baseado na placa, focado na linha 16F com ênfase no desenvolvimento de projetos simples e de fácil entendimento.</div><span style="font-family: Verdana,sans-serif;"> </span><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"></div><div class="MsoNormal" style="font-family: Verdana,sans-serif;"><br />
</div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-46520505652855557842011-08-28T10:14:00.000-07:002011-11-03T07:23:38.187-07:00Projeto de acionamento por RFid.<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-51WiObYNTU0/TlpoA1CThTI/AAAAAAAAAXs/IZT_uV1KWV0/s1600/DSC01481.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-51WiObYNTU0/TlpoA1CThTI/AAAAAAAAAXs/IZT_uV1KWV0/s320/DSC01481.JPG" width="320" /></a></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="font-size: small;">Olá galera, dessa vez demorei a postar novidades, mais acho que o assunto que vou apresentar hoje é de grande interesse de muitos, pois se trata de uma tecnologia relativamente simples mais que traz muitos benefícios a automação em geral, tanto de empresas como do setor residencial.</span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: center;"><b><span style="color: red;">RFid – Radio Frequency IDentification</span></b> </div><div class="MsoNormal"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Há algum tempo venho lendo uma série de artigos envolvendo o uso desta tecnologia, mais ainda faltava por as mãos no hardware, e ver como realmente funciona na prática, para estimar qual a sensibilidade e eficiência este processo nos provê. </div><div class="MsoNormal"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Para este projeto foi adquirida junto a MikroE uma placa de expansão que contem todo o hardware necessário para funcionamento deste processo, este inclui na placa o receptor EM4095 e a antena, que ao meu ver são os dois componentes críticos do projeto, tudo isto ao custo de pouco mais de R$ 40,00 incluindo os 5 cartões RFid.</div><div class="MsoNormal"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-h20hlhbSnXg/Tlpjk9Y4NzI/AAAAAAAAAXk/VYputqIx5rs/s1600/DSC01484.JPG" imageanchor="1"><img border="0" height="240" src="http://3.bp.blogspot.com/-h20hlhbSnXg/Tlpjk9Y4NzI/AAAAAAAAAXk/VYputqIx5rs/s320/DSC01484.JPG" width="320" /></a></div><div class="MsoNormal"></div><div class="MsoNormal"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Vale lembrar que todas as placas de expansão comercializadas pela mikroElektronika, que no Brasil é representada pela empresa Microgenios, são totalmente compatíveis com a PK2Lab.</div><div class="MsoNormal"><br />
</div><div class="MsoNormal"></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">O projeto consiste de uma trava eletrônica, onde o usuário deve aproximar um cartão próximo ao equipamento para que seu acesso a determinada área seja permitida, neste exemplo temos a possibilidade de cadastrar um cartão para cada área, sendo este código armazenado na memória EEPROM do microcontrolador.</div><div class="MsoNormal"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Abaixo temos o vídeo de funcionamento do projeto e o código, escrito em C no compilador MikroC PRO.</div><div class="MsoNormal"><br />
</div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/YskSvH408oo?feature=player_embedded' frameborder='0'></iframe></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><br />
</div><div class="MsoNormal" style="color: red; font-family: "Trebuchet MS",sans-serif;">Código fonte:</div><div class="MsoNormal" style="color: red;"><br />
</div><div class="MsoNormal" style="color: lime;"></div><div class="MsoNormal" style="color: lime;"></div><div class="MsoNormal" style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">/******************************************************************************<br />
<br />
JL Audio Manutenção Eletrônica<br />
<br />
Data: 09/2011<br />
Autor: Jean Carlos<br />
Projeto: RFid LOCK<br />
Microprocessador: PIC18F4550<br />
Clock do processador: 48MHz<br />
Estação de desenvolvimento: PK2Lab<br />
Compilador: MikroC V4.60.0.0<br />
Versão atual: 1.0<br />
Descrição:<br />
<br />
<br />
Este programa demosntra o uso da placa de RFid da<br />
empresa mikroE, atráves de dois cartões cadastrados<br />
temos o acionamento de dois reles da placa PK2Lab.<br />
Para efetuar o cadastro do cartão referente ao Rele 1<br />
pressione a tecla RD6, e efetue um resete na placa,<br />
para o rele 2, pressione a chave RD7.<br />
Ao se aproximar do sensor um cartão não cadastrado<br />
é gerado um aviso sonoro de erro.<br />
<br />
<br />
Placa RFid: mE RFid Reader Board<br />
http://www.mikroe.com/eng/products/view/185/rfid-reader-board/<br />
ac:RFid_Board<br />
PK2Lab Placa de desenvolvimento PK2Lab<br />
http://pk2lab.blogspot.com<br />
ac:PK2Lab<br />
Software: mikroC PRO for PIC<br />
http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic/<br />
<br />
<br />
* NOTAS:<br />
<br />
- mE RFid Reader deve ser conectada ao PORTB<br />
- Jumper em VCC para chaves TACT<br />
- Chaves de pull-down em RD6 e RD7<br />
- O Clock do processador deve ser maior ou igual a 32Mhz (RFid)<br />
<br />
<br />
<br />
<br />
*******************************************************************************/<br />
// Inclusão do Driver do leitor RFid (RFid_Driver.h e RFid_Driver.c)<br />
<br />
#include "RFid_driver.h"<br />
<br />
//******************************************************************************<br />
// Variáveis Globais<br />
<br />
sbit Rele1 at RE1_bit;<br />
sbit Rele2 at RE2_bit;<br />
sbit Rele1_Direction at TRISE1_bit;<br />
sbit Rele2_Direction at TRISE2_bit;<br />
<br />
sbit Cfg_Sw1 at RD6_bit;<br />
sbit Cfg_Sw2 at RD7_bit;<br />
sbit Cfg_Sw1_Direction at TRISD6_bit;<br />
sbit Cfg_Sw2_Direction at TRISD7_bit;<br />
<br />
sbit OUT_ at RB0_bit;<br />
sbit RDY_CLK at RB1_bit;<br />
sbit SHD at RB2_bit;<br />
sbit MOD_ at RB3_bit;<br />
sbit OUT_Direction at TRISB0_bit;<br />
sbit RDY_CLK_Direction at TRISB1_bit;<br />
sbit SHD_Direction at TRISB2_bit;<br />
sbit MOD_Direction at TRISB3_bit;<br />
<br />
char Rele1_RFid[8];<br />
char Rele2_RFid[8];<br />
<br />
char code_error;<br />
<br />
//******************************************************************************<br />
// Interrupção<br />
<br />
void Interrupt() {<br />
RFid_Interrupt_Proc();<br />
}<br />
<br />
//******************************************************************************<br />
// Rotinas Auxiliares<br />
<br />
void Pause(){<br />
Delay_ms(250); // Pausa<br />
}<br />
<br />
void Beep(){<br />
Sound_Play(880, 250); // Toca som a 880Hz por 250ms<br />
}<br />
<br />
void Beep100ms(){<br />
Sound_Play(880, 100); // Toca som a 880Hz por 100ms<br />
}<br />
<br />
void Beep3x(){<br />
Beep();<br />
Pause();<br />
Beep();<br />
Pause();<br />
Beep();<br />
Pause();<br />
}<br />
<br />
void Beep1seg(){<br />
Sound_Play(880, 1000); // Toca som a 880Hz por 1 seg<br />
}<br />
<br />
void Beep_error(){<br />
Sound_Play(880, 20);<br />
Sound_Play(600,30);<br />
Sound_Play(880, 20);<br />
}<br />
<br />
//******************************************************************************<br />
//Rotina Principal<br />
<br />
void main() {<br />
<br />
ADCON1 = 0x0F; // Todos os pinos como IO digital<br />
CMCON = 7; // Desabilita os comparadores de tensão<br />
<br />
Rele1 = 0;<br />
Rele2 = 0;<br />
Rele1_Direction = 0;<br />
Rele2_Direction = 0;<br />
Cfg_Sw1_Direction = 1;<br />
Cfg_Sw2_Direction = 1;<br />
<br />
RFid_Init(); // Inicia a placa RFid<br />
Sound_Init(&PORTE, 0); // Configuração do buzzer<br />
<br />
<br />
if (Cfg_Sw1 || Cfg_Sw2){ // Caso a chave de configuração de um dos reles estiver pressionada...<br />
Beep3x();<br />
<br />
if (Cfg_Sw1){ // Grava cartão referente ao rele 1<br />
Rele1 = 1;<br />
Delay_ms(500);<br />
RFid_GetID();<br />
RFid_Store_ID2EEPROM(0x00);<br />
Rele1 = 0;<br />
Beep();<br />
<br />
}<br />
<br />
if (Cfg_Sw2){ // Grava cartão referente ao rele 2<br />
Rele2 = 1;<br />
Delay_ms(500);<br />
RFid_GetID();<br />
RFid_Store_ID2EEPROM(0x08);<br />
Rele2 = 0;<br />
Beep();<br />
<br />
}<br />
<br />
Delay_ms(2000);<br />
Beep1seg();<br />
// Sai do modo de configuração<br />
}<br />
else<br />
{<br />
<br />
// Inicio de RFid scanning e controle de reles<br />
Beep1seg();<br />
<br />
RFid_LoadFromEEPROM(0x00, Rele1_RFid); // Busca cartões cadastrados no EEPROM<br />
RFid_LoadFromEEPROM(0x08, Rele2_RFid);<br />
<br />
<br />
while (1){<br />
<br />
RFid_GetID(); // Retorna RFid<br />
<br />
Beep100ms();<br />
<br />
code_error = 1;<br />
<br />
// Checa se o código retornado confere com algum código gravado na EEPROM<br />
// Caso positivo, aciona o rele correspondente por 2 segundos<br />
if(RFid_Check_ID(Rele1_RFid)){<br />
Rele1 = 1;<br />
code_error = 0;<br />
}<br />
<br />
if(RFid_Check_ID(Rele2_RFid)){<br />
Rele2 = 1;<br />
code_error = 0;<br />
}<br />
//<br />
if (code_error) { // Se o código retornado não confere com algum código gravado na EEPROM, indica erro!!!<br />
Pause();<br />
Beep_error();<br />
Pause();<br />
}<br />
else{<br />
Delay_ms(2000);<br />
Rele1 = 0; // Desliga o rele, após 2 segundos de retenção.<br />
Rele2 = 0;<br />
}<br />
}<br />
}<br />
}</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="color: lime;">//******************************************************************************</span> </div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><span style="color: red;">Arquivos para download: </span> </div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
<a href="http://www.esquemas.org/RFid.rar">RFid.zip</a></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Grande abraço a todos, e até a próxima!!!</div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><br />
</div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-10576586819963359152011-08-06T10:41:00.000-07:002011-11-03T07:24:37.775-07:00Exemplo de projeto em linguagem Assembly<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Olá pessoal,</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Neste segundo momento, gostaria de apresentar a vocês, um código desenvolvido em linguagem assembly, e que uso como base para o desenvolvimento dos meus programas nesta linguagem.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">O código em sí, é muito enxuto e de fácil entendimento, porém traz informações e registradores que muitas vezes não são lembrados pelos programadores, sendo estes, fonte de muitos dos problemas encontrados princípalmente pelos que iniciam na atividade de programação de microcontroladores.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div class="separator" style="clear: both; font-family: "Trebuchet MS",sans-serif; text-align: justify;"></div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">O microcontrolador utilizado neste exemplo é o PIC16F877A, um componente muito completo em termos de periféricos, já que possui internamente módulos de PWM e conversão AD, aliado a grande facilidade de uso, disponibilidade de acesso e quantidade de memória.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Uma das características mais procuradas em um desenvolvedor de software, seja ele voltado a qualquer área, é a capacidade de comentar os seus códigos, portanto tentem fazer o máximo possível de comentários em seus trabalhos, pois isto facilitará uma futura manutenção ou mesmo upgrade no seu código, bom por hoje é isto, grande abraço a todos.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Segue o código:</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; JL Audio Manutenção Eletrônica </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Data: </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Autor: Jean Carlos</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Projeto:</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Microprocessador: PIC16F877A</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Clock do processador: 8MHz</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Estação de desenvolvimento: PK2Lab</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Compilador: MPLAB IDE v8.20a</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Versão atual: 1.0</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Descrição:</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Includes (Arquivo padrão para o PIC16F877A)</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">#INCLUDE <P16F877A.INC> </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Bits de Configuração </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">__CONFIG _CP_OFF&_WRT_OFF&_DEBUG_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_BODEN_ON&_PWRTE_ON&_XT_OSC</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_CP_OFF ==> Memória de programa desprotegida contra leitura</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_WRT_OFF ==> Sem permissão para escrever na memória de programa</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_DEBUG_OFF ==> Debug desabilitado</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_CPD_OFF ==> Memória EEPROM protegida contra leitura</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_LVP_OFF ==> Programação em baixa tensão desabilitada</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_WDT_OFF ==> WDT Desativado</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_BODEN_ON ==> BROWN-OUT Ativado </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_PWRTE_ON ==> POWER-ON RESET Ativado</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;_XT_OSC ==> Oscilador a cristal (8MHz)</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Paginação do Bloco de Memória </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">#DEFINE BANK0 BCF STATUS,RP0 ;Seta BANK 0 De Memória</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">#DEFINE BANK1 BSF STATUS,RP0 ;Seta BANK 1 De Memória</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Variáveis </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Definição dos nomes e endereços de todas as variáveis utilizadas</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; pelo sistema</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> CBLOCK 0x20 ;Endereço inicial de memória de usuário</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> ENDC ;Fim do bloco de memória </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Flags internos </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Definição de todos os flags utilizados no programa.</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Constantes </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Definição de todas as constantes utilizadas no programa</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Entradas </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Definição de todos os pinos que serão utilizados como entrada</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Saídas </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Definição de todos os pinos que serão utilizados como saida</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Vetor de Reset </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Endereço inicial de processamento de reset </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> ORG 0x00 </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> GOTO INICIO</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Vetor de Interrupção </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Endereço inicial de processamento de interrupção </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> ORG 0x04 </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> RETFIE ;</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Inicio do Programa </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">INICIO</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> BANK1</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; BSF PCON,OSCF ; Determina a frequencia do oscilador interno</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000000' </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF TRISA ; Inicia PORTA como saidas </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000000'</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF TRISB ; Inicia PORTB como saidas</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000000' </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF TRISC ; Inicia PORTC como saidas </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000000'</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF TRISD ; Inicia PORTD como saidas</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000000'</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF TRISE ; Inicia PORTE como saidas</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'10000000'</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF OPTION_REG ; Prescaller 1:2 no TMR0</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> ; Pull'ups desabilitados</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000000'</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF INTCON ; Todas as interrupções desligadas</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000110' ; PORTA Como I/Os digitais (Analógicos desabilitados)</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF ADCON1</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVLW B'00000111'</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> MOVWF CMCON ;Define modo do comparador interno desabilitado</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> BANK0 ; Banco 0</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> CLRF PORTA ; Limpa o PORTA</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> CLRF PORTB ; Limpa o PORTB</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> CLRF PORTC ; Limpa o PORTC</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> CLRF PORTD ; Limpa o PORTD</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"> CLRF PORTE ; Limpa o PORTE</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;* Inicialização das Variáveis </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Inicialização de todas as variáveis utilizadas no programa</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;* Inicio da Rotina Principal </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">MAIN</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Espaço reservado a rotina principal do programa</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">GOTO MAIN </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Rotinas Auxiliares </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">; Espaço reservado as rotinas auxiliares do programa</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;Fim do Programa </div><div style="color: lime; font-family: "Trebuchet MS",sans-serif; text-align: justify;">;*******************************************************************</div><div style="color: lime;"><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">END ; Finaliza o código.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><b><a href="http://www.esquemas.org/Modelo_16F877A.asm">>>> Modelo_877A.asm <<<</a></b></div><br />
<span style="background-color: red;"><br />
</span><br />
<br />
</div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com0tag:blogger.com,1999:blog-3194446240058587335.post-22982733152774086682011-07-05T20:11:00.000-07:002011-11-03T07:29:44.594-07:00Apresentação da placa<div class="MsoTitle" style="color: #f3f3f3;"><span style="font-size: x-large;">Estação desenvolvimento USB PK2Lab</span></div><div class="MsoSubtitle" style="color: #f3f3f3;">Microcontroladores PIC16F887 e PIC18F4550<br />
<br />
<div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Após muito tempo, estudando a possibilidade de criar uma ferramenta para uso próprio no desenvolvimento de projetos microcontrolados, e que abrangesse as linhas 16F e 18F da Microchip, decidi por por as mãos na massa e perder alguns fios de cabelo, foi então que na mesma época, a universidade em que estudo, me solicitou um orçamento de um hardware para uso no laboratório de eletrônica, que veio a ser o que chamo hoje de PK2Lab, uma estação de desenvolvimento que une as duas famílias de microcontroladores mais difundidas no meio acadêmico de forma totalmente harmoniosa e funcional.</div></div><div class="separator" style="clear: both; color: #f3f3f3; text-align: center;"><a href="http://2.bp.blogspot.com/-xiVIKo_HFdA/ThPJP0L47WI/AAAAAAAAAVc/br9R0WoJC7s/s1600/PK2Lab.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div><div class="MsoNoSpacing" style="color: #f3f3f3;"><br />
</div><div class="separator" style="clear: both; color: #f3f3f3; text-align: center;"><a href="http://2.bp.blogspot.com/-xiVIKo_HFdA/ThPJP0L47WI/AAAAAAAAAVc/br9R0WoJC7s/s1600/PK2Lab.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-xiVIKo_HFdA/ThPJP0L47WI/AAAAAAAAAVc/br9R0WoJC7s/s1600/PK2Lab.jpg" /></a></div><div class="MsoNoSpacing" style="color: #f3f3f3;"> </div><div style="color: #f3f3f3;"><br />
</div><div class="MsoNormal" style="color: #f3f3f3;"><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">A placa oferece uma ampla gama de periféricos embutidos, desde teclas tácteis configuráveis em nível lógico até um moderno relógio de tempo real, além de contar com um gravador e depurador USB, desenvolvido e suportado pela Microchip, tornando-se uma ferramenta essencial ao aprendizado profissional do aluno.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Um diferencial bacana desta placa é o fato da mesma poder ser alimentada diretamente da alimentação USB do PC ou notebook a qual está conectada, diminuindo a quantidade de cabos durante o processo de desenvolvimento, outro ponto legal é referente as dimenções físicas da mesma, tendo 15cm x 20cm, espaço suficiente para agregar todos os periféricos ao mesmo tempo que não "atrapalha" na bancada ou mesa de estudo.</div><br />
<div class="separator" style="clear: both; text-align: center;"></div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"> A placa foi desenvolvida no software Eagle da CadSoft, com a colaboração de muitos amigos da <a href="https://groups.google.com/group/piclistbr/about?hl=pt&pli=1">PICLISTBR</a> , em especial do amigo Jean Brito, que não pensou duas vezes na hora de ensinar o que sabia atráves de videos e dicas que foram o pontapé inicial no desenvolvimento deste projeto, por se tratar do primeiro projeto em SMD de dupla face e furos metalizados, essa placa foi exaustivamente revisada e testada na prática, sendo que o resultado ficou exelente, muito bem acabado e sem erros de serigrafia e otimização de hardware, pois todos os periféricos foram muito bem estudados quanto a posição na placa e disposição de pinos. </div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Em breve estarei pondo a disposição, vários exemplos de uso da placa, com código fonte em C (MikroC) e Assembly (MPLAB), contemplando algumas funcionalidades do hardware.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Abaixo alguns dos periféricos disponíveis junto a placa.</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><ul><li> RTC (PCF8583 Philips)</li>
<li> Serial EEPROM (24C04 ATMEL)</li>
<li> RS232 (MAX232)</li>
<li> RS485 (SN75176)</li>
<li> USB 2.0 (PIC18F4550)</li>
<li> Conversor USB (Pickit2)</li>
<li><span lang="EN-US"> </span><span lang="EN-US">Driver 1A STEPPER MOTOR (ULN2803)</span></li>
<li><span lang="EN-US"> </span><span lang="EN-US">Comunicação RC5 (TSOP34038)</span></li>
<li> Duas entradas analógicas (AN0 – AN1)</li>
<li> Três teclas para interrupções (INT0/1/2)</li>
<li> Barramentos de led’s PORTC e D</li>
<li> Oito teclas configuráveis PORTD</li>
<li> Duas saídas a reles 1 C/R 10A</li>
<li> Três displays de 7 Segmentos </li>
<li> Display LCD 16x2 retro iluminado</li>
<li> Buzzer</li>
<li> Conector ZIF 3M </li>
</ul><div class="MsoListParagraphCxSpLast" style="font-family: "Trebuchet MS",sans-serif; text-align: justify; text-indent: -18pt;"></div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Alem dos periféricos encontrados on board a placa PK2Lab possui pinos de expansão dos PORTS A,B,C e D. Cada PORT ainda conta com os sinais de VCC e GND tornando desta forma, possível a conexão de placas modulares externas, como por exemplo a placa de controle P.I.D. que conta com Motor CC com malha de realimentação via sensores infravermelhos, ou a placa RF que conta com receptor e transmissor RF433MHz para aplicações de links de dados sem fio.</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Bom, é isso, gostaria ainda de agradeçer a todas as pessoas que ajudaram direta ou indiretamente neste projeto, que creio será uma ferramenta muito útil no desenvolvimento pessoal e intelectual de quem a for utilizar.</div><div class="MsoNormal" style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;">Abaixo os links com alguns exemplos de uso e manual de uso da placa:</div><div style="font-family: "Trebuchet MS",sans-serif; text-align: justify;"><br />
</div></div><div class="MsoNormal" style="color: #f3f3f3; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><b><a href="http://www.esquemas.org/">www.esquemas.org</a></b> - Informações sobre o projeto.<br />
<br />
<b><a href="http://www.esquemas.org/Manual_PK2Lab.pdf">Manual_PK2Lab</a></b> - Manual de uso da placa.</div><div class="MsoNormal" style="color: #f3f3f3; font-family: "Trebuchet MS",sans-serif; text-align: justify;"><div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"><br />
</div><div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"> <b><a href="http://www.esquemas.org/PK2Lab_Silk.pdf">PK2Lab Silk</a></b> - Serigrafia da placa</div><div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"> </div><div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"> <b><a href="http://www.esquemas.org/Exemplos.rar">Programas exemplos</a></b> - Projetos desenvolvidos em linguagem C (MikroC)</div></div>Anonymoushttp://www.blogger.com/profile/02227935117099032099noreply@blogger.com1