Ir ao conteúdo
  • Cadastre-se
marczenom

Leitura analógica 18F4550

Recommended Posts

Bom dia pessoal. Se alguém ajudar, agradeço.

 

Já terminei um projeto e está funcionando. Usei leituras digitais para mover o sistema. Gostaria de aprender a fazer um controle analógico. A ideia é monitorar 4 LDRs. Assim que um dos sensores ler uma tensão x, ele aciona uma saída qualquer. Isso seria mais eficaz. Coloquei meu programa digital e o circuito que estou tentando acionar com analógico.

 

O compilador é o MikroC pro for PIC e o PIC é 18F4550.

 

Se alguém souber, por favor me ajude.

Atualização PV - 03-04-2014.txt

post-682250-0-54671800-1399291135_thumb.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

 Tente fazer algo mais ou menos assim:

void main() {   int leitura;  ADCON1 = 0;               // Configura o Port A como analogico  CMCON  |= 7;               // Desliga os comparadores    TRISA = 0xFF;              // Seta o port A como entrada  TRISD = 0x00;              //Seta port D como saida  while (1)   {    leitura = ADC_Read(0);    // Lê a tensão no port AD0    if(leitura>100 && leitura<200) //compara o valor com a janela de 0,5 a 1 volt    {portd.f0=1;}                  //Liga o port D0 se a tensão estiver entre 0,5 a 1 volt    else portd.f0=0;               se não desliga o port D0  }}

  Para encontrar o valor numérico correspondente a um nivel de tensão X, basta usar o seguinte esquema:

     V=X / (Vr / (1 - 2^R))

Onde V é o valor numérico a ser encontrado, X é o nível de tensão que você quer analisar, Vr é sua tensão de referencia e R é a resolução do seu conversor, por exemplo, se você alimenta o PIC com 5 Volts (p/  caso de Vr=VDD) e sabendo que esse PIC possui 10 bits de resolução do CAD. Encontre o valor "Numerico" correspondente a 4,5 Volts:

  Para isso basta aplicar na formula: V= 4,5 / (5 / 2^10) =4,5 / (5 / 1023) = 4,5 / 4,8875 mili =~ 920

Ou seja, quando tiver 4,5 volts no Port AD0 do PIC o valor da sua variável "leitura" sera de 920, ai basta inserir o "if" no programa para testar o valor da variável e acionar o que você quiser.

 

  Espero ter ajudado.

Grato Luiz Gustavo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa. Luiz, agradeço a ajuda. Eu tinha feito um programa parecido hoje e funcionou. O modo de fazer é exatamente igual ao seu. Veja:

 

int tt; void main() { TRISA=1; TRISD=0; adcon1=0b000000000001; CMCON=0xFF; adc_init();  while(1){ tt=adc_read(0);  if(tt>590 && tt<640){ portd.f0=1; } else{ portd.f0=0; }}}
 
Fiz a simulação no Proteus e funcionou. Agora vou refazer o mesmo projeto com leituras analógicas para ficar mais elaborado.
Eu estava errando anteriormente, pois, colocava no programa a matemática definindo o int tt.
 
Agora sei fazer leitura digital e analógica.
 
Obrigado meu amigo
 
 
Atte
 
Marc Zenom

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×