Ir ao conteúdo
  • Cadastre-se

DIFICULDADE EM USAR CONDIÇÕES COM VARIÁVEL ANALOGICA (PIC)


Posts recomendados

Boa noite galera,

 

Estou saindo do mundo do Arduino e me aventurando agora no mundo PIC, e estou tendo problemas quando entro na parte dos sinais analógicos. Como primeiro programa, estou fazendo um projeto até que bastante simples usando o pic 16F88, por ter o conversor AD, onde, quando faço a leitura de um sinal analógico e dependendo do valor ele acende um led (meio bobo por sinal).

Porém quando vou fazer a condição da leitura analógica, ele aparece o erro: "warning: (764) mismatched comparison".

Estou usando o MPLABX  IDE + MPLAB XC8 COMPILER.

Se alguém puder ajudar agradeço.

Segue abaixo o código:

 

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <pic16f88.h>  
 
#define _XTAL_FREQ 4000000      //freq operação 4 Mhz
 
#pragma config FOSC = HS  
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB0      // CCP1 Pin Selection bit (CCP1 function on RB0)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
 
 
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
#pragma config IESO = ON        // Internal External Switchover bit (Internal External Switchover mode enabled)
 
void inicializa_ADC (void)
{
    ADCON0bits.ADON = 1;
    ADCON0bits.ADCS = 0b11;     //clock derived from the internal A/D module RC oscillator
    ADCON0bits.CHS = 0b000;     //RA0/AN0 como entrada analógica
    ADCON1bits.VCFG = 0b00;     //valor de tensão de refenrencia interna
    ADCON1bits.ADFM = 1;        //Right justified. Six Most Significant bits of ADRESH are read as ‘0’
    ANSELbits.ANS0 = 1;         //BIT ANS0 como entrada analógica
    OSCCONbits.IRCF = 0b110;    //Oscilacao interna do RC para 4 MHz
}
 
float leitura_analogica;
 
void main(void) {
    inicializa_ADC();
    
    
    TRISA=0b11111111;       //todos os pinos do PORTA como entrada
    TRISB=0b00000000;       //todos os pinos do PORTbBcomo entrada
    PORTA=0b00000000;
    PORTB=0b00000000;
    
    #define leitura_analogica  RA0
    #define saida RB7
       
    while(1)
    {
        ADCON0bits.GO_DONE = 1;     //habilita leitura da porta ANS0
        while(GO_DONE);             //só continua quando leitura acabar
        leitura_analogica = ADRESH;
        if(leitura_analogica >= 30)
        {
            saida = 0;
        }else{
           saida = 1;
        }
    }
    
   return;
}
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

um errinho básico. leitura_abalogica foi definda duas vezes e na última como RA0 que é  bit e nunca vai ser >=30

tente com unsigned char. E evite ao máximo trabalhar com floats. Mc de 8 bits os odeiam e por isso cobram "caro" pra trabalhar com eles.

E não te esqueças de definir a entrada analógica como analógica e não digital (acho que já o fez). Passe os olhos pelo d.s.

Link para o comentário
Compartilhar em outros sites

um errinho básico. leitura_abalogica foi definda duas vezes e na última como RA0 que é  bit e nunca vai ser >=30

tente com unsigned char. E evite ao máximo trabalhar com floats. Mc de 8 bits os odeiam e por isso cobram "caro" pra trabalhar com eles.

E não te esqueças de definir a entrada analógica como analógica e não digital (acho que já o fez). Passe os olhos pelo d.s.

 

Realmente, o erro era realmente a definição da porta RA0 tanto como uma leitura de um resultado tanto como bit.

 

O compilador não apresenta nenhum erro no momento, porém quando vou simular no proteus aparece o erro: "ADC conversion started before 'wait' time has expired following previous conversion or channel change"

Ai eu fiquei na dúvida se o problema está no proteus, compilador ou está no código.

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...