Ir ao conteúdo
  • Cadastre-se

Leitura analógica 18F4550


Posts recomendados

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.

Link para o comentário
Compartilhar em outros sites

 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.

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...