PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA ENGENHARIA DE COMPUTAÇÃO MICROPROCESSADORES II CURITIBA 2006 EDUARDO DALAZEN FERNANDO SULZBACHER MARCOS CAMPANA PROJETO INTEGRADO Trabalho apresentado às Disciplinas de Mircroprocessadores II e Eletronica II, da graduaçâo em Engenharia de computçâo, Centro de Ciências Exatas e de Tecnologia da Pontifícia Universidade Católica do Paraná. Professores Afonso Ferreira Miguel Viviana Zurro CURITIBA 2006 1. Introdução Neste projeto iremos aplicar nossos conhecimentos para desenvolver uma aplicação de automatização de uma residência. Para construir uma casa inteligente e micro-controlada usaremos vários componentes eletrônicos projetados para fornecer mais comodidade para seus moradores. O principal recurso utilizado será o microprocessador PIC16F876/873 e o decodificador DTMF, pois a casa será controlada via celular. Usaremos também alguns sensores para construir o circuito do alarme e da iluminação da casa. O sensoriamento dos leds lasers serão feitos utilizando LDR (Light dependent resistor) que junto com um comparador de tensão irão controlar o alarme da casa. 2. Objetivo do Projeto Aplicar conceitos discutidos em aula sobre Microprocessadores II e Eletrônica II e relacionar ao projeto de Monitoramento de Ambientes, em que tudo será controlado por um celular via DTMF. 3. Desenvolvimento 3.1 PIC Figura 1: PIC16F873 3.2 Sensor Alarme O sensor funciona com um laser de infravermelho que é detectado por um LDR, onde o que varia nesse componente é apenas a resistência conforme a incidência de luz, o mesmo pode-se chamar de foto resistor. Após a montagem do circuito, com a variação da resistência alteramos a tensão, quando o LDR está recebendo o sinal do laser estará em 5V e se algum objeto cortar esse sinal irá variar a resistência indo para próximo de 0V. O objetivo da utilização desse sensor é a verificação se alguma pessoa obstruiu um determinado obstáculo ativando o sensor, no caso soando o alarme, em que o mesmo será colocado na parte superior do telhado da casa, que está sendo elaborado em nosso projeto. Utilizaremos uma maquete para demonstrar nosso projeto, que contém um laser infravermelho (Figura 2) abaixo e o LDR (Figura 3). Estes componentes não podem ser utilizados para fins comerciais em relação a alarme (definição do projeto), pois não levamos em conta o clima e a distância. Figura 2: Laser de Infravermelho. Figura 3: LDR. Como o LDR funciona com a variação de sua resistência, e o projeto desenvolvido terá quatro LDR e quatro lasers de infravermelho; foi utilizado um circuito integrado LM324 o mesmo amplifica e compõe o estágio de adaptador para conversor ADC do micro controlador que aceita tensões de 0 à 5 v, com essa resposta do amplificador é jogado as quatro saídas para um circuito integrado 7432 que funciona como uma OR, esse circuito integrado verifica o sinal dos quatros sensores, e se em algum momento um desses for interrompida o mesmo enviará a resposta de saída desse componente para o microprocessador PIC, gerando a interrupção e disparando o alarme. Esses componentes citados acima como o circuito integrado 7432 e o LM324, não irão ser detalhados nesse relatório, pois já foram estudados anteriormente. Abaixo segue o diagrama de montagem do circuito. Figura 4: Diagrama de Montagem do Sensor de Alarme. Pinagens: Vcc = 5V; GND = Terra; PIC16F873, corresponde ao pino 21 (rb0/INT); Em cada LDR mostrado na figura 4 tem um laser de infravermelho incidindo, nos mesmos. Os pinos 1IN-, 2 IN-, 3 IN-, 4 IN- do LM324 ambos são ligados com um resistor de 280 Ω e um de 1K em série, onde a ponta do resistor de 280 Ω vai para 5V e de 1K vai para o terra, entre o meio desses resistores liga-se nas entradas citadas acima. 3.3 Sensor de Luminosidade A luz externa da casa também é controlada por um circuito montado por LDR e um comparador de tensão, como já explicado anteriormente o LDR varia a sua resistência conforme a luz que incide no sensor. Assim logo que cair a iluminação em cima do LDR as luzes externas da casa ascendam. Foto 5: Circuito da Iluminação. 3.4 Controle do Ar condicionado e Luzes A maquete contém um cooler que tem como objetivo simular o funcionamento de um ar condicionado, mas como o PIC (microcontrolador) não fornece tensão suficiente para o funcionamento correto do cooler, portanto implementamos um chaveador a uma fonte de 5v com um transistor de potência TIP122. A saída do PIC (RB2) é conectado a base do transistor, o emissor do transistor é aterrado e o coletor ligado na entrada negativa do cooler e a componente positiva do cooler é conectada a 5V, quando ocorre corrente na base do transistor (estímulo na saída RB2) entra em curto, chaveando a ligação em 5V e terra fazendo com que o cooler funcione. A ativação via microntrolador do cooler ocorre com a entrada da senha “1236” e o número 4 do teclado do celular, e a desativação ocorre com a pressão do número 5. As luzes internas da maquete estão conectadas diretamente na saída do PIC (porta RC0), quando ocorre um estímulo nesta saída às luzes acendem. A ligação das luzes internas da casa ocorre com a entrada da senha “1236” e a pressão do número 2, o desligamento da luz acontece quando ocorre a pressão no número 3 do teclado. 3.5 DTMF O DTMF(Dual Tone Multiply Frequêncy) é um sistema de decodificação de duas freqüências geradas pelo tom do teclado do celular ou qualquer telefone. As freqüências desses tons são geradas pelas combinações a seguir: Tabela 1: freqüências dos tons. Tabela DTMF Hz 1209 1336 1477 1633 697 1 2 3 A 770 4 5 6 B 852 7 8 9 C 941 * 0 # D Quando ocorre a pressão na tecla número 1 é gerada as duas freqüências, a alta 1209 e a baixa 697. O circuito integrado utilizado para decodificação destas freqüências foi o CM8870 que decodifica as freqüências em um sinal binário que é enviado para o microcontrolador para serem checados. Figura 6: Decodificador DTMF. 3.6 Fluxograma do Software Embarcado Figura 7: Fluxograma do Software. Entradas: rb[4..7], recebe os dados do decodificador de som; rb3, recebe o flag de transmissão do decodificador de som; rb0, recebe o sinal dos sensores lasers. Saidas: rb2, liga e desliga o ventilador; rb1, saida para o alto falante; rc0, ativa e desativa luz. 3.7 Código Fonte O programa foi totalmente desenvolvido em Assembly e gravado em um microprocessador PIC16F873 para executar as funções desejadas. Segue abaixo o programa desenvolvido. #include <p16f873.inc> org 0 goto inicio ORG 4 GOTO INTERRUPCAO ;CRIAÇÃO DE VARIÁVEIS CBLOCK 0x20 ALARMESTATUS ´1´ OU DESLIGADO ´0´ SIRENESTATUS ´1´ OU NÃO ´0´ AUXDIGITO DIGITO AUXW AUXSTATUS AUXPC sirenealterna ENDC ; ARMAZENA SE O ALARME ESTÁ LIGADO ; ARMAZENA SE A SIRENE ESTÁ TOCANDO ; ; ; ; ; ; GUARDA ANTIGO DIGITO DIGITADO GUARDA DIGITO ATUAL AUXILIAR QUE ARMAZENA W AUXILIAR QUE ARMAZENA STATUS AUXILIAR QUE ARMAZENA PC 0f INTERRUPCAO: ; SALVA CONTEXTO MOVWF AUXW SWAPF STATUS,W CLRF STATUS MOVWF AUXSTATUS MOVF PCLATH, W MOVWF AUXPC CLRF PCLATH ; VERIFICA SE A INTERRUPÇÃO FOI DE TEMPO OU DO SENSOR LASER BANKSEL PIR1 BTFSS PIR1,TMR2IF ; VERIFICANDO BIT QUE INDICA SE INTERRUPÇÃO POR TEMPO GOTO ALARME ; INTERRUPÇÃO FOI NO SENSOR LASER GOTO SIRENE ; INTERRUPÇÃO FOI DE TEMPO FOI ;PROCEDIMENTO PARA ALTERNAR SINAL NO PINO PORTB 1 CASO A SIRENE ESTEJA ATIVADA SIRENE: BTFSS SIRENESTATUS,0 ; VERIFICA SE A SIRENE ESTÁ ATIVADA GOTO VAI ; A SIRENE ESTA DESATIVADA, ENTÃO PROSSEGUE SEM ALTERNAR BIT NO SINAL DE SOM BANKSEL PORTB BTFSS PORTB,1 ; VERIFICANDO SE O BIT DE SOM ESTÁ ALTO GOTO BAIXO ; O BIT DE SOM ESTA BAIXO, ENTÃO SEGUE PARA PROCEDIMENTO DE DEIXAR EM ALTO GOTO ALTO ; O BIT DE SOM ESTA ALTO, ENTÃO SEEUE PARA PROCEDIMENTO DE DEIXAR BAIXO ;BANKSEL PORTB ; ; ; ; ; ; ; swapf sirenealterna,0 swapf sirenealterna,1 BCF STATUS,Z subwf 0f btfsc STATUS,Z GOTO ALTO GOTO BAIXO ; PROCEDIMENTO QUE DEIXA O BIT DE SOM ALTO BAIXO: BANKSEL PORTB BSF PORTB,1 BCF PORTC,1 GOTO VAI ; PROSSEGUE PARA SAIR DA INTERRUPÇÃO ; PROCEDIMENTO QUE DEIXA O BIT DE SOM BAIXO ALTO: BANKSEL PORTB BCF PORTB,1 BSF PORTC,1 ; COMEÇANDO A SAIR DA INTERRUPÇÃO VAI: BANKSEL PIR1 bcf PIR1, TMR2IF ; DESTIVA BIT QUE AVISOU DA INTERRUPÇÃO POR TEMPO GOTO FINALIZA ; PROSSEGUE, PARA RESTAURAR CONTEXTO ; PROCEDIMENTO QUE ATIVA A SIRENE, CASO ALMERME ESTEJA ATIVO ALARME: BTFSS ALARMESTATUS,0 ; VERIFICA SE O ALARME ESTA ATIVO GOTO PROSSEGUE ; ALARME DESATIVADO, PROSSEGUE PARA RESTAURAÇÃO DE CONTEXTO MOVLW #1 MOVWF SIRENESTATUS PROSSEGUE: BANKSEL INTCON BCF INTCON,INTF ; DESATIVA FLAG DE INTERRUPÇÃO ; RESTAURA CONTEXTO FINALIZA: MOVF AUXPC, W MOVWF PCLATH SWAPF AUXSTATUS,W MOVWF STATUS SWAPF AUXW,F SWAPF AUXW,W RETFIE inicio: ; AJUSTANDO TIMER E ATIVANDO INETRRUPÇÃO PELA PORTAB 0 BANKSEL PR2 movlw b'11111001' movwf PR2 bsf PIE1, 1 bsf PIR1, 1 BANKSEL T2CON movlw 2 movwf T2CON movlw 0D0 ; PREPARANDO PARA ATIVAR INTERRUPÇÃO POR TEMPO E POR PORTAB 0 movwf INTCON bsf T2CON, 2 ; DESATIVANDO ALARME E SIRENE MOVLW #0 MOVWF ALARMESTATUS MOVWF SIRENESTATUS MOVWF AUXDIGITO MOVWF DIGITO movlw #0f movwf sirenealterna; banksel TRISC ; ATIVANDO PORTAS DE SAIDA bcf PORTC,0 BCF PORTB,1 BCF PORTB,2 bcf PORTC,1 ; ATIVANDO PORTAS DE ENTRADA BSF PORTB,0 BSF PORTB,3 BSF PORTB,4 BSF PORTB,5 BSF PORTB,6 BSF PORTB,7 BANKSEL PORTB BCF PORTB,2 BCF PORTB,1 BCF PORTC,0 BCF PORTC,1 ; PROCEDIMENTO QUE VERIFICA SENHA "1236" SENHA: ;errou qualquer digito seqüência, recomeça tudo de novo, sem reaproveitar o último digito ; ESPERA O FLAG DE ENVIO DE DADO DO DECODIFICADOR ESPERA1: BTFSS PORTB,3 GOTO ESPERA1 ; COLETA DADO ENVIADO PELO DECODIFICADOR UM:; SEQUENCIA PARA VERIFICAR SE FOI DIGITADO '1' SWAPF PORTB,0 ; FAZ SWAP DOS DADOS DA PORTA B E GRAVA NO REGISTRADOR CONTINUA1: ANDLW #0F ; APROVEITA SOMENTE OS 4 BITS MENOS SIGNIFICATIVOS RECEBIDOS NA PORTA B MOVWF DIGITO SUBWF AUXDIGITO,0 BTFSS STATUS,Z ; CASO O DIGITO SEJA IGUAL AO ANTERIOR, ELE CONTINUA A ESPERA, INDO PARA REPETIDO1 GOTO CONTINUA1_ GOTO REPETIDO1 CONTINUA1_: MOVFW DIGITO MOVWF AUXDIGITO SUBLW #1 btfss STATUS,Z ; CASO 1-DADO = 0, O DADO ERA 1 GOTO SENHA ; DIGITO NÃO CONFERE, RECOMEÇA TUDO NOVAMENTE GOTO ESPERA2_ REPETIDO1: BTFSS PORTB,3 GOTO ESPERA1 GOTO REPETIDO1 REPETIDO2: BTFSS PORTB,3 GOTO ESPERA2 GOTO REPETIDO2 REPETIDO3: BTFSS PORTB,3 GOTO ESPERA3 GOTO REPETIDO3 REPETIDO6 BTFSS PORTB,3 GOTO ESPERA6 GOTO REPETIDO6 ; ESPERA A DESATIVAÇÃO DO FLAG DE ENVIO ESPERA2_: BTFSS PORTB,3 GOTO ESPERA2 GOTO ESPERA2_ ; ESPERA O FLAG DE ENVIO DE DADO DO DECODIFICADOR ESPERA2: BTFSS PORTB,3 GOTO ESPERA2 ; SEQUENCIA PARA VERIFICAR SE FOI DIGITADO '2' DOIS: SWAPF PORTB,0 CONTINUA2: ANDLW #0F MOVWF DIGITO SUBWF AUXDIGITO,0 BTFSS STATUS,Z ; CASO O DIGITO SEJA IGUAL AO ANTERIOR, ELE CONTINUA A ESPERA, INDO PARA REPETIDO2 GOTO CONTINUA2_ GOTO REPETIDO2 CONTINUA2_: MOVFW DIGITO MOVWF AUXDIGITO SUBLW #2 btfss STATUS,Z ; CASO 2-DADO=0, O DADO ERA 2 GOTO SENHA GOTO ESPERA3_ ; ESPERA A DESATIVAÇÃO DO FLAG DE ENVIO ESPERA3_: BTFSS PORTB,3 GOTO ESPERA3 GOTO ESPERA3_ ; ESPERA O FLAG DE ENVIO DE DADO DO DECODIFICADOR ESPERA3: BTFSS PORTB,3 GOTO ESPERA3 ; SEQUENCIA PARA VERIFICAR SE FOI DIGITADO '3' TRES: SWAPF PORTB,0 CONTINUA3: ANDLW #0F MOVWF DIGITO SUBWF AUXDIGITO,0 BTFSS STATUS,Z ; CASO O DIGITO SEJA IGUAL AO ANTERIOR, ELE CONTINUA A ESPERA, INDO PARA REPETIDO3 GOTO CONTINUA3_ GOTO REPETIDO3 CONTINUA3_: MOVFW DIGITO MOVWF AUXDIGITO SUBLW #3 btfss STATUS,Z ; CASO 3 - DADO = 0,O DADO ERA 3 GOTO SENHA GOTO ESPERA6 ; ESPERA A DESATIVAÇÃO DO FLAG DE ENVIO ESPERA6_: BTFSS PORTB,3 GOTO ESPERA6 GOTO ESPERA6_ ; ESPERA O FLAG DE ENVIO DE DADO DO DECODIFICADOR ESPERA6: BTFSS PORTB,3 GOTO ESPERA6 ; SEQUENCIA PARA VERIFICAR SE FOI DIGITADO '6' QUATRO: SWAPF PORTB,0 CONTINUA6 ANDLW #0F MOVWF DIGITO SUBWF AUXDIGITO,0 BTFSS STATUS,Z ; CASO O DIGITO SEJA IGUAL AO ANTERIOR, ELE CONTINUA A ESPERA, INDO PARA REPETIDO6 GOTO CONTINUA6_ GOTO REPETIDO6 CONTINUA6_: MOVFW DIGITO MOVWF AUXDIGITO SUBLW #6 btfss STATUS,Z ; CASO 6-DADO =0, O DADO ERA 6 GOTO SENHA ; ESPERA A DESATIVAÇÃO DO FLAG DE ENVIO ESPERA5_: BTFSS PORTB,3 GOTO MENU GOTO ESPERA5_ ; PASSOU PELA SEQUENCIA DE SENHA, INICIA MENU MENU: ; ESPERA O FLAG DE ENVIO DE DADO DO DECODIFICADOR ESPERA00: BTFSS PORTB,3 GOTO ESPERA00 _ZERO:; SEQUENCIA PARA COLETAR DADO ENVIADO PELO DECODIFICADOR SWAPF PORTB,0 BTFSS PORTB,3 ; ESPERA QUE O FLAG DE ENVIO DE DADO SEJA DESATIVADO GOTO CONTINUA00 GOTO _ZERO CONTINUA00: ANDLW #0F BCF STATUS,C ; LIMPA O FLAG CARRY BCF STATUS,Z ; LIMPA O FLAG ZERO SUBLW #1 btfss STATUS,Z ; ATIVADO FLAG Z, O NUMERO É '1' GOTO SEGUE00 GOTO DESATIVA_ALARME SEGUE00: btfss STATUS,C ; SE NA SUBTRAÇÃO UTILIZAR CARRY E NÃO ATIVOU O FLAG Z, ENTÃO O NUMERO É '0' GOTO SEGUE02 GOTO ATIVA_ALARME SEGUE02: ; COMO A SUBTRAÇÃO É O NUMERO MENOS O ACUMULADOR, ; O DADO QUE CHEGA AQUI ESTÁ NA FORMA NEGATIVA, ; POR ISSO É FEITA A TROCA DE SINAL PARA FACILITAR O ENTENDIMENTO SUBLW #0 SUBLW #1; SEGUNDA DECREMENTAÇÃO, OU SEJA VALOR INICIAL -2 btfss STATUS,Z ; ATIVANDO O FLAG Z, O NUMERO É '2' GOTO SEGUE03 GOTO ATIVA_LUZ SEGUE03: SUBLW #0 SUBLW #1; TERCEIRA DECREMENTAÇÃO, OU SEJA VALOR INICIAL -3 btfss STATUS,Z ; O NUMERO É '3' GOTO SEGUE04 GOTO DESATIVA_LUZ SEGUE04: SUBLW #0 SUBLW #1; QUARTA DECREMENTAÇÃO, OU SEJA VALOR INICIAL -4 btfss STATUS,Z ; O NUMERO É '4' GOTO SEGUE05 GOTO ATIVA_VENTILADOR SEGUE05: SUBLW #0 SUBLW #1; QUINTA DECREMENTAÇÃO, OU SEJA VALOR INICIAL -5 btfss STATUS,Z ; O NUMERO É '5' GOTO SEGUE_ZERO GOTO DESATIVA_VENTILADOR SEGUE_ZERO: SUBLW #0 SUBLW #5; VALOR INICIAL JÁ DECREMENTADO DE 5 E SUBTRAIDO DE 5, OU SEJA VALOR INICIAL -10 btfss STATUS,Z ; O NUMERO É '10', QUE CORRESPONDE AO '*' GOTO SEGUE_ASTERISCO GOTO ATIVA_ALARME SEGUE_ASTERISCO: SUBLW #0 SUBLW #1; VALOR INICIAL JÁ DECREMENTADO DE 1 E SUBTRAIDO DE 6, OU SEJA VALOR INICIAL -11 btfss STATUS,Z ; O NUMERO É '11', QUE CORRESPONDE AO '*' GOTO SEGUE_SHARP GOTO MENU SEGUE_SHARP: SUBLW #0 SUBLW #1; VALOR INICIAL JÁ DECREMENTADO DE 11, DECREMENTANDO NOVAMENTE, OU SEJA VALOR INICIAL -12 btfss STATUS,Z ; O NUMERO É '12' GOTO MENU GOTO SENHA ;PROCEDIMENTO PARA ATIVAR ALARME ATIVA_ALARME: ; ATIVA O ALARME MOVLW #1 MOVWF ALARMESTATUS ; DESATIVA A SIRENE MOVLW #0 MOVWF SIRENESTATUS ; BANKSEL INTCON ; CASO O RB0 TENHA SIDO ATIVADO E CTONTINUAR ATIVADO, ; OU SEJA O ALARME INICIARÁ A TOCAR A SIRENE LOGO DEPOIS DE LIGAR ALARME E HAVER OBSTRUÇÃO NOS SENSORES LASERS ; DESSA FORMA, GARANTE O BOM FUNCIONAMENTO DO ALARME ; BCF INTCON,INTF BANKSEL PORTB bsf PORTC,1 GOTO MENU ; PROCEDIMENTO PARA DESATIVAR ALARME DESATIVA_ALARME: banksel PORTC bcf PORTC,1 BCF PORTB,1 MOVLW #0 MOVWF ALARMESTATUS MOVWF SIRENESTATUS GOTO MENU ; PROCEDIMENTO PARA LIGAR LUZ ATIVA_LUZ: BSF PORTC,0 GOTO MENU ; PROCEDIMENTO PARA DESLIGAR LUZ VIA PIC, MAS CONTINUARÁ ACESO CASO ESTEJA ESCURO DESATIVA_LUZ: BCF PORTC,0 GOTO MENU ; PROCEDIMENTO PARA LIGAR VENTILADOR ATIVA_VENTILADOR: BSF PORTB,2 GOTO MENU ; PROCEDIMENTO PARA DESLIGAR O VENTILADOR DESATIVA_VENTILADOR: BCF PORTB,2 GOTO MENU END 3.8 Diagrama de Montagem Geral Figura 8: Diagrama Geral de Montagem. 4. Anexos 4.1 Fotos do Desenvolvimento do Projeto Figura 9: Circuito do Sensor de Luz. Figura 10: Funcionamento Sensor Alarme. Figura 11: Testes na Mesa Digital com o Figura 12: Funcionamento do Sensor Celular. de Luz. 5. Conclusões Concluímos com este projeto que o microprocessador tem muitas qualidades e que com ele podemos fazer milhares de aplicações. Aprendemos muitas aplicações nesse semestre utilizando microprocessadores e com este projeto aperfeiçoamos mais ainda esse técnica. Tivemos algumas dificuldades para desenvolver tal projeto, mas foram resolvidas durante seu processo. Também vimos como pode ser muito vantajoso para uma residência tal sistema. Acreditamos que esse projeto pode ser melhorado um pouco para ser vendido comercialmente, pois sendo uma ótima idéia muitas pessoas se interessariam por tal aplicação em sua casa, trazendo muita comodidade. Tivemos algumas dificuldades para pegar o digito teclado pela pessoa que liga para a casa, pois primeiro tínhamos programado para quando o bit do controle fosse pressionado ele guardasse a tecla pressionada. Mas como a freqüência era alta e ele acabava pegando mais de uma vez cada tecla pressionada, alteramos a programação para guardar a tecla pressionada somente quando um numero diferente do anterior fosse pressionado. Com isso eliminamos o problema, fazendo um correto funcionamento do programa com a aplicação. 6. Referências TAUB, Herbert. Circuitos digitais e microprocessadores. São Paulo: McGraw-Hill, 1984. ATMEL DATASHEETS. Datasheets. [online]. Disponível na internet em : www.atmel.com . Acesso em 26/05/2006. MIGUEL, Afonso Ferreira. Atividade 2 ( microprocessadores II ). [online] Disponível na internet em. http://www.icet.pucpr.br/afonso. Acesso em 26/03/2006. MIGUEL, Afonso Ferreira. Atividade 3 ( microprocessadores II ). [online] Disponível na internet em. http://www.icet.pucpr.br/afonso. Acesso em 20/04/2006. MIGUEL, Afonso Ferreira. Atividade 11 ( microprocessadores II ). [online] Disponível na internet em. http://www.icet.pucpr.br/afonso. Acesso em 11/05/2006. MIGUEL, Afonso Ferreira. Atividade 15 ( microprocessadores II ). [online] Disponível na internet em. http://www.icet.pucpr.br/afonso. Acesso em 23/04/2006. DM74LS32 DATASHEETS. Datasheets. [online] Disponível na internet em : http://www.icet.pucpr.br/afonso . Acesso em 08/06/2006. LM324 DATASHEETS. Datasheets. [online] Disponível na internet em : http://www.icet.pucpr.br/afonso . Acesso em 08/05/2006. PIC16F87X DATASHEETS. Datasheets. [online] Disponível na internet em : http://www.icet.pucpr.br/afonso . Acesso em 08/05/2006.