Ir ao conteúdo
  • Cadastre-se
Thiago Felipe Soares Gonçalves

Como utilizar 2 Sensores um em cada Canal no PIC16F688

Recommended Posts

Estou tentando ler o sinal de dois sensores cada um em uns dos canais do PIC16F688, usando as entradas analógicas AN0 e AN1, segue o código.

 

#define POT PORTA.F0
#define SENSOR PORTA.F1
#define LED1 PORTC.F2
#define LED2 PORTC.F3
#define LED3 PORTC.F4

int AD = 0;
int AD2 = 0;

void main() 
{
    ANSEL = 0x03;
    CMCON0 = 0x07;

    TRISA = 0xFF;
    TRISC = 0x00;

    PORTA = 0x00;
    PORTC = 0x00;
    
    while(1)
    {
        LED3 = 0x00;
        delay_ms(500);
        
        ADCON0 = 0x01;
        AD = ADC_Read(POT);
        delay_ms(100);

 

        ADCON0 = 0x05;
        AD2 = ADC_Read(SENSOR);
        delay_ms(100);

 

        if(AD >= 512)
        {
            LED1 = 0x01;
        }
        else
        {
            LED1 = 0x00;
        }
        if(AD2 >= 512)
        {
            LED2 = 0x01;
        }
        else
        {
            LED2 = 0x00;
        }
        
        LED3 = 0x01;
        delay_ms(500);
    }
}

 

A ideia é simples, ele deveria ler os dois sensores comparar os valores de AD e AD2 nos ifs e acender o LED referente aquele sensor. O que acontece na simulação o AD do POT acende os dois LEDs e o AD2 do SENSOR não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites
31 minutos atrás, Thiago Felipe Soares Gonçalves disse:

AD = ADC_Read(POT);

o compilador vai entender isso como AD = ADC_Read(PORTA.F0) ou AD = ADC_Read(RA0);

Penso que o argumento de ADC_Read(argumento) é um valor numérico relacionado ao canal que quer ler. Por gentileza, consulte o help do seu compilador

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, colocando o valor numérico do canal que quero usar, funcionou o código ficou assim:

 

#define LED1 PORTC.F2
#define LED2 PORTC.F3
#define LED3 PORTC.F4

int AD = 0;
int AD2 = 0;

void main() 
{

    CMCON0 = 0x07;
    ADCON1 = 0x00;

    TRISA = 0xFF;
    TRISC = 0x00;
    
    ANSEL = 0x03;

    PORTA = 0x00;
    PORTC = 0x00;
    
    while(1)
    {
        LED3 = 0x00;
        delay_ms(500);
        
        ADCON0 = 0x01;              // Habilita o canal AN0
        delay_us(100);                  // Tempo necessario para set o canal
        AD = ADC_Read(0);         // Lê a porta analogica AN0

        ADCON0 = 0x05;              // Habilita o canal AN1
        delay_us(100);                  // Tempo necessario para set o canal
        AD2 = ADC_Read(1);       // Lê a porta analogica AN1

        if(AD >= 512)
        {
            LED1 = 0x01;
        }
        else
        {
            LED1 = 0x00;
        }
        if(AD2 >= 512)
        {
            LED2 = 0x01;
        }
        else
        {
            LED2 = 0x00;
        }
        
        LED3 = 0x01;
        delay_ms(500);
    }
}

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

×