TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: xcalzada en 20 de Noviembre de 2013, 14:38:27

Título: Problema con el ADC, utilizando el pic16f877 y el mplab x (XC8)
Publicado por: xcalzada en 20 de Noviembre de 2013, 14:38:27
Hola chicos el caso es que estoy intentado configurar el ADC, para hacer variar a un cierto nivel de tensión para que se encienda o se apague un led.
Utilizo el Mplab X con el compilador  XC8 y para ver si me funcionan las cosas o lo grabo al pic o mirando con el vsm y el proteus, pues me dado cuenta que mi registro ADRESH & ADRESL  variando la resistencia nunca cambian de valor, adjunto el código a ver si alguien me puede echar una mano, por que estoy desesperado jeje gracias

Citar

#include <stdio.h>
#include <stdlib.h>

#include <pic16f877.h>

#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = ON        // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config CP = OFF         // FLASH Program Memory Code Protection bits (Code protection off)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low Voltage In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF        // Data EE Memory Code Protection (Code Protection off)
#pragma config WRT = ON         // FLASH Program Memory Write Enable (Unprotected program memory may be written to by EECON control)

#define _XTAL_FREQ 4000000;

void config(void);

void main(void){

    config();

    _delay(100);

    int ADCResult;

  while(1){
        _delay(100);
        ADCON0bits.CHS = 0b000;     //Selecciono la puerta AD0
        ADCON0bits.GO=1; 
       
        while(ADCON0bits.GO);          //Realizo una espera para captura de datos
        _delay(100);
        ADCResult = (ADRESH<<8) + ADRESL ;          //Sumo los registros para saber el nivel de tension

        if(ADCResult<512)           //Encender o apagar led
            PORTCbits.RC5 = 1;
        else
            PORTCbits.RC5 = 0;
    }
    }


void config(void){

    TRISA = 0b00000000;         //Puerto A como entradas
    TRISC = 0b11111111;         //Puerto C como salidas
    ADCON1bits.PCFG = 0b0000;   //Pongo todas las puertas como analogicas
    ADCON0bits.ADCS = 0b00;     //Configuro Fsc/2
    ADCON0bits.ADON = 1;        //Activo el conve
   
   

    ADCON1bits.ADFM= 1;         //Bits mas significativos
   

   

    }
Título: Re: Problema con el ADC, utilizando el pic16f877 y el mplab x (XC8)
Publicado por: AngelGris en 20 de Noviembre de 2013, 15:04:24
  Estás confundido con la configuración de los TRIS un 0 es para configurar como salida y un 1 es para configurar como entrada... Una forma sencilla de recordarlo es 1NPUT y 0UTPUT
Título: Re: Problema con el ADC, utilizando el pic16f877 y el mplab x (XC8)
Publicado por: xcalzada en 25 de Noviembre de 2013, 20:18:11
Muchisimas gracias entre en desesperacion absoluta