CONVERSOR ANALÓGICO / DIGITAL SINAL DIGITAL ASSUME APENAS 2 ESTADOS: 0V E 5V SINAL ANALÓGICO TEM VÁRIOS ESTADOS: 0V,0.1V,3V,3.3V,4V,5V,10V, ETC. 1
FONTE DESTES SINAIS ANALÓGICOS UM DOS NOSSOS OBJETIVOS É PODER UTILIZAR UM MICROCONTROLADOR PARA MEDIR ALGUMAS GRANDEZAS COMO: TEMPERATURA; LUMINOSIDADE. NESTE CASO, COMO SENSORES, UTILIZARIAMOS UM TERMORESISTOR E O FOTORESISTOR. ESTES COMPONENTES MUDAM SUA RESISTÊNCIA CONFORME AS VARIAÇÕES DAS GRANDEZAS TEMPERATURA E LUMINOSIDADE. COMO NÃO DESEJAMOS MEDIR A RESISTÊNCIA E SIM, A TENSÃO, TEMOS QUE JOGAR UMA CORRENTE EM CIMA DESTES COMPONENTES, PRODUZINDO ASSIM UMA TENSÃO SOBRE ELES, É ESTA TENSÃO QUE DEVE SER MEDIDA. V=R.I 2
MICROCONTROLADORES O PIC16F84A NÃO POSSUI O CONVERSOR A/D, DESTA FORMA, PODERÁ APENAS MEDIR UMA GRANDE DIGITAL EM ALGUM PINO DE SEU PORTB OU PORTA. JÁ O PIC16F877, POSSUI O CONVERSOR A/D DENTRO DE SEU ENCAPSULAMENTO, PODENDO DESTA FORMA, MEDIR UMA GRANDEZA ANALÓGICA EM PINOS ESPECÍFICOS. 3
ADC0808 (NATIONAL) QUANDO NÃO SE DISPOE DE UM DE UM MICROCONTROLADOR COM UM A/D, PODE-SE UTILIZAR UM CI QUE SE ENCARREGA DE CONVERTER O DADO ANALÓGICO EM DADO DIGITAL, DE FORMA QUE O MICROCONTROLADOR POSSA TRATÁ-LO. ALGUMAS CARACTERISTICAS: 8 A/D S TEMPO DE CONVERSÃO DE 100us CONVERSOR DE 8 BITS INDICADOR DE TERMINO DE CONVERSÃO PINO DE START PARA CONVERSÃO SAÍDA TRI-STATE NECESSITA DE CLOCK PARA FAZER CONVERSÃO 4
BLOCO INTERNO 5
LIGAÇÃO BÁSICA PINOS VREF+ E VREF- SE QUISERMOS MEDIR UMA TENSÃO DE 0 A 12V, DEVEMOS LIGAR VREF+ EM 12V E VREF- EM 0V. 6
CONEXÃO AO PIC16F84A Funções de cada PINO PORTB (RB0 A RB7) LEITURA DO DADO DIGITAL RA4 DÁR INÍCIO A CONVERSÃO DE ANALÓGICO PARA DIGITAL RA3 DETECTAR TERMINO DE CONVERSÃO CONSTRUÇÃO DO SOFTWARE PARA PIC (ALGORITMO) CONFIGURAR PORTB COMO ENTRADA CONFIGURAR RA4 COM SAÍDA CONFIGURAR RA3 COM ENTRADA APLICAR PULSO EM RA4 (LOW, HIGH) AGUARDAR PULSO EM RA3 OU AGUARDAR 100us (AGUARDAR POR HIGH) LER PORTB OBSERVAÇÕES: A/D SELECIONADO FOI FIXADO PARA IN0 (ADD A, ADD B, ADD C; TODOS ATERRADOS). OE FOI ATERRADO PARA SEMPRE DISPOBILIZAR O DADO NA SAÍDA DO A/D. ALE e START TAMBÉM FORAM CURTO CIRCUITADOS. 7
COMPILADOR BASIC PICBASIC PRO DIGIMOK BASIC PIC PRO é um compilador BASIC para a família FLASH (16 e 18) mais barato do mercado. Como características principais tem: MATRIZES BIDIMENSIONAIS PONTO FLUTUANTE Funções que retornam um valor, o que permite o programa ficar mais estruturado FUNÇÕES EMBUTIDAS ADC,LCD,RS232,I2C,iButton,DS1307,AND,AS,ASM,AT,ATAN,BEEP,BIT, BUTTON,BYTE,CALL,CASE,CLS,COM,CONST,COS,DATA,DECLARE,DIM,DO, EEPROM,ELSE,END,EQU,EXIT,EXP,FLASH,FlashRead,FlashWrite,FLOAT, FOR,FREQOUT,FUNCTION,GOSUB,GOTO,HIGH,IF,INCLUDE,INPUT,JMP,LABEL, LOCATE, LOG, LOOP, LOW, MEMPOINTER, MOD, NEXT, OR, ORG, OUTPUT, PAUSE, PEEK, POKE, PRINT, PULSE, PULSIN, PULSOUT, RAND, READ, REM, RETI, RETURN, REVERSE, ROL, ROR,SELECT,SERIN, SEROUT, SERVO, SIN, SOUND, SRAM,STATIC, STEP,STOP,STRING, SUB,SWAP, THEN,TO,TOGGLE,WAIT,WDR, WEND, WHILE, WORD, WRITE, XOR 8
PROGRAMA PICBASIC PRO PARA LER O A/D Include "16F84.INC" 'Programme pour PIC16F84 'DEFINIÇÃO PINOS MICROCONTROLADOR bit INICIA_CONVERSAO PORTA.3 bit TERMINO_CONVERSAO PORTA.4 bit LED PORTA.0 byte temperatura debut: 'CONFIGURA QUEM É ENTRADA E SAIDA OUTPUT INICIA_CONVERSAO OUTPUT LED INPUT TERMINO_CONVERSAO TRISB=255 'INICIALIZA A/D INICIA_CONVERSAO=0 LE_TEMPERATURA: 'INICIA CONVERSAO INICIA_CONVERSAO=1 PAUSE 5 INICIA_CONVERSAO=0 PAUSE 5 'AGUARDA COVERSAO WHILE TERMINO_CONVERSAO = 0 WEND temperatura = PORTB 'SE DADO A/D LIDO (ATENÇÃO, NÃO É 128 GRAUS C) END if temperatura > 128 then LED =1 'ACENDE LED else LED =0 'APAGA LED end if GOTO LE_TEMPERATURA 9
COMPILANDO Carregando com o PROTEUS 10
EXECUÇÃO NO PROTEUS Veja RV1 Veja RV1 11
UTILIZANDO O A/D INTERNO DO PIC16F877 NO CASO NO PIC16F877, NÃO HÁ NECESSIDADE DE SE COLOCAR UM A/D EXTERNO, POIS O MESMO TEM 8 A/D S. UMA DIFERENÇA DESTE A/D EM RELAÇÃO DO A/D DO ADC0808, É QUE PODE SER CONFIGURADO TAMBEM PARA 10 BITS, AUMENTANDO ASSIM A PRECISÃO. ADC0808 = A MUDANÇA DA SAÍDA DIGITAL DE 00000000B PARA 000000001B E ASSIM SUCESSIVAMENTE, OCORRE A CADA (VREF/256) VOLTS. A/D INTERNO DO PIC16F877 = A MUDANÇA DA SAÍDA DIGITAL (ARMAZENADA DENTRO DE UM REGISTRADOR) DE 0000000000B PARA 0000000001B E ASSIM SUCESSIVAMENTE, AGORA OCORRE A CADA (VREF/1024) VOLTS. ---- MUITAS OUTRAS CONFIGURAÇÕES SÃO PERMITIDAS NO PIC16F877, RELACIONADOS AO A/D. UMA DELAS É PODER INSTRUIR INTERNAMENTE AO MICROCONTROLADOR QUE ASSUMA QUE TENSÃO DE REFERENCIA É 5V, LIBERANDO O PINO TERIA A FUNÇÃO DE REFERÊNCIA. PARA ISTO, DEVE-SE ALTERAR A ROTINA ADCINIT() QUE SE ENCONTRA NA BIBLIOTECA ADC.BAS DO PICBASIC PRO DIGIMOK. 12
CIRCUITO COM PIC16F877 Include "16F876.INC" include "ADC.BAS" 'Programme pour PIC16F876 'DEFINIÇÃO PINOS MICROCONTROLADOR bit LED PORTA.0 word temperatura debut: 'CONFIGURA QUEM É ENTRADA E SAIDA OUTPUT LED 'INICIALIZA A/D ADCinit 'Initialise le convertisseur LE_TEMPERATURA: 'INICIA CONVERSAO temperatura = ADC(1) 'SE DADO A/D LIDO (ATENÇÃO, NÃO É 128 GRAUS C) if temperatura > 512 then LED =1 'ACENDE LED else LED =0 'APAGA LED end if END GOTO LE_TEMPERATURA 13
MEDINDO A TEMPERATURA COM PIC NO MERCADO EXISTE UM COMPONENTE ELETRÔNICA QUE MEDE A TEMPERATURA EM CELSIUS, DISPONIBILIZANDO EM SUA SAÍDA UMA TENSÃO PROPORCIONAL A TEMPERATURA.!"#$# COM A TENSÃO DE REFERÊNCIA DE 5V, A CADA VARIAÇÃO DE (5V/1024), SUBIRÁ 1 NO SAÍDA DIGITAL (REGISTRO INTERNO) 5V/1024 = 0,0048828125, OU SEJA, A CADA 0,0048828125V QUE SUBIR, SOBE 1 NA SAÍDA DIGITAL. PARA 150C, A SAIDA DIGITAL TERIA SUBIDO (1.5V/0,0048828125V) VEZES, OU SEJA, 307 VEZES, OU SEJA, O CONVERSOR A/D ACUSARIA 307 NA SUA SAÍDA DIGITAL. 14
PARA ASSOCIAR 307 COM TEMPERATURA REAL (CELSIUS), QUE É 150C, BASTA DIVIDIR 307 POR 2,0466666666666666666666666666667, E OBTEREMOS 150GRAUS. LOGO, A EQUAÇÃO DA TEMPERATURA SERIA: TEMPERATURA = TEMPERATURA / 2,0466666666666666666666666666667 #float Include "16F876.INC" include "ADC.BAS" include "float.bas" 'Programme pour PIC16F876 'DEFINIÇÃO PINOS MICROCONTROLADOR bit LED PORTA.0 word temperatura float temp debut: 'CONFIGURA QUEM É ENTRADA E SAIDA OUTPUT LED 'INICIALIZA A/D ADCinit 'Initialise le convertisseur LE_TEMPERATURA: 'INICIA CONVERSAO temperatura = ADC(1) 'AGORA É UM DADO EM CELSIUS END temp = temperatura temp = temp / 2.046 'todos os tipos devem ser float if temp > 70.0 then LED =1 'ACENDE LED else LED =0 'APAGA LED end if GOTO LE_TEMPERATURA 15
CONEXÃO DO LM35 AO PIC 16
17