

O maior inimigo do conhecimento não é a ignorância, mas sim a ilusão de que conhecemos. (Stephen Hawking)

CONVERSOR ANALÓGICO DIGITAL
Em muitos casos, faz-se necessário o uso de componentes analógicos para o controle de outros dispositivos. Como sabemos, componentes digitais possuem somente dois estados, ligado ou apagado. Um dispositivo analógico, como um potenciômetro, comumente gera valores de 0 a 1023. Dessa forma, como converter um valor analógico (0-1023) a um valor digital no sentido de tensão elétrica? Veremos a seguir uma série de procedimentos para trabalharmos dentro do PIC com estes projetos e além disso estaremos aprendendo também algo sobre portas analógicas. Essa aula é bastante extensa em termos de configurações dentro PIC C Compiler e dentro do ISIS 7 Professional, por isso preste bastante atenção e vamos ao que interessa!
Os microcontroladores dispõe de portas analógicas e serão elas as portas usadas para fazermos a conversão analógica digital. Para exemplo e compreensão das nossas aulas iremos utilizar o PIC 18F2550.
Então vamos abrir nosso PIC C Compiler e logo depois clicar em PIC Wizard para fazer a devidas configurações. Veja a imagem abaixo e acompanhe comigo:
1 – Selecione o PIC18F2550
2 – Esclareça a frequência de oscilação de 48MHz (48.000.000 Hz)
3 – No campo Fuses, logo na primeira opção, selecione High Speed Crystal/Ressonator with PLL enabled (Esta opção ativa o PLL do microcontrolador para ajudar a processar os dados a uma velocidade de 48MHz que selecionamos no clock)
4 – Marque a opção Power Up Timer
Vamos a outras configurações ainda dentro do campo Fuses. Vejamos:
5 - Desabilite a opção Master Clear pin enabled.
6 - Selecione a opção Divide By 5 (20MHz oscillator input).
7 - Visualize o código gerado na aba code!
Veja agora a principal configuração:
8 – Selecione a opção Analog. Esse campo serve para fazermos as configurações para portas analógicas e até mesmo configurações para conversões AD que é o nosso caso.
9 – Nesse campo, o Analog Pins, serve para selecionarmos quantas portas analógicas iremos usar. Não vamos usar duas portas, mas mesmo assim vamos selecionar as portas A0 e A1 (são portas digitais, mas também são as portas analógicas AN0 e AN1).
10 – Serve para selecionarmos a precisão de conversão. Vamos selecionar um precisão de 10 bits que equivale a 1024 números (0-1023).
11 – Para selecionarmos o tempo de intervalo entre cada conversão. Vamos selecionar o clock interno, o Internal 2-6us (ou seja, um intervalo que varia de 2 a 6 microssegundos).
Agora é só dar OK. Antes de partirmos para a nossa programação, vamos ver algumas coisas importantes dentro do ISIS 7 Professional como a criação do nosso circuito. É recomendável que você possua um conhecimento básico no ISIS.
Assim ficará nosso circuito:
1 – Para achar o potenciômetro, procure dentro do campo de busca pelo componente: POT-HG, que é um potenciômetro ativo, ou seja, permite a mudança de seus valores para simulação.
2 – Isso é um sinal de corrente contínua e você pode encontra-lo clicando em Generator Mode e clicando em DC. Clique duas vezes sobre ele e na janela que abrir digite o número 5 no campo Voltage (Volts) informando que queremos uma tensão de 5V.
3 – Isso é como se fosse um voltímetro e você pode encontra-lo clicando em Voltage Probe Mode.
4 – É um Terminal Virtual para visualizarmos as tensões geradas. Encontre-o em Virtual Instruments Mode e depois clique em Virtual Terminal.
O PIC é facilmente encontrado digitando no campo de busca o seu nome: 18F2550.
Faça as devidas ligações e vamos a alguns pontos importantes.
Como vamos alimentar o potenciômetro com uma tensão de 5V, é importante ressaltar que isso faz uma grande diferença na nossa conversão. A depender da voltagem de alimentação, ou melhor, da voltagem de entrada na nossa porta analógica, ocorrerá também variações na voltagem de saída. Como 5V é uma tensão padrão, vamos utilizá-la para esse projeto.
Nossa tensão de alimentação e de 5V e nossa precisão foi de 1023, portanto um cálculo básico deve ser feito que irá gerar um número para que haja a conversão. Abra sua calculadora e faça o seguinte cálculo:
5/1023
Ou seja, 5 volts dividido pela precisão de 1023. O resultado será esse número: 0,0048875855327468
É um número louco mesmo, mas é essencial para nosso projeto, porque imagine se o potenciômetro estivesse gerando um valor igual a 500 (apenas uma suposição, pois vai de 0-1023, lembra?), multiplique 500 por 0,0048875855327468 e teremos um valor em volts que será igual a 2,443792766373412, aproximadamente igual a 2,45V.
Outra coisa importante e que deve ser ressaltada são os comandos usados para fazermos a leitura e conversão analógica para digital. São eles:
set_adc_channel(PINO);
Esse comando configura a porta para ser um canal ADC e o campo PINO será preenchido apenas com o número da porta, nada de palavras ou letras. Exemplo:
set_adc_channel(0); // Configuramos a porta A0 para ser um canal ADC
read_adc();
O comando read_adc() recebe o valor lido pela porta analógica e atribui a uma variável.
Agora sim. Vamos programar!
Depois de feita todas as configurações vamos inicializar uma variável do tipo float de nome analog e será inserida antes de tudo dentro do código, até mesmo antes do void main() {...} .
float analog;
Agora vamos ao famoso While(TRUE). Nossa programação ficará assim:
While(TRUE)
{
set_adc_channel(0); //AN0 é a porta analógica que selecionamos nas
//configurações, LEMBRA?
Delay_us(15); //Aguarda 0,10 segundos
analog = read_adc(); //analog recebe o valor lido
//Lembre-se, sempre ponto, nada de vírgula.
analog = analog * 0.0048875855327468; //Converte em tensão.
printf(“%f \n\t”,analog); //Mostra no Terminal via RS-232
}
Compile o código, carregue-o no ISIS e simule seu circuito. Você verá a voltagem gerada pelo terminal virtual. Você pode observar essa mesma voltagem naquele instrumento que falamos anteriormente que servirá para capturar a tensão gerada.
Esse projeto pode ser aplicado, por exemplo, em residências no controle de luminosidade de uma lâmpada pois a luminosidade é diretamente proporcional às variações da tensão.



