Hola willynovi,
Lo del directorio de las librerias lo resolvi, pero el problema que tengo ahora es que el XC8 no me define bien el microcontrolador y por tanto en las macros de la librerías no ejecuta el trozo de código correspondiente al micro que uso.
Por ejemplo, yo uso el PIC18F97J60 y dentro del pconfig.h existe el siguiente código que debería ejecutar pero no lo hace (aparece como si estubiera comentado porque no esta definido el __18F97J60):
#ifdef __18F97J60
/*############################################################*/
/* Configuration for device = 'PIC18F97J60' */
/*############################################################*/
/* ADC */
#define ADC_V6
/* ECC */
/*No configuration chosen for this peripheral*/
/* CC */
#define CC_V4
/* EPWM */
#define PWM_V4
/* PWM */
#define PWM_V4
/* PCPWM */
/*No configuration chosen for this peripheral*/
/* USART */
#define EAUSART_V9
/* SPI */
#define SPI_V3
/* I2C */
#define I2C_V3
/* TIMERS */
#define TMR_V4
/* EEPROM */
/*No configuration chosen for this peripheral*/
/* PORT_B */
#define PTB_V2
/* ANCOMP */
#define ANCOM_V2
/* MWIRE */
#define MWIRE_V2
/* CTMU */
/*No configuration chosen for this peripheral*/
/* PPS */
/*No configuration chosen for this peripheral*/
/* RTCC */
/*No configuration chosen for this peripheral*/
/* DPSLP */
/*No configuration chosen for this peripheral*/
/* PMP */
/*No configuration chosen for this peripheral*/
/* FLASH */
#define FLASH_V1_5
#endif
Según creo yo, cuando defines el PIC que vas a usar en la IDE debería asignarse automaticamente el __18F97J60 en mi caso, pero no lo hace, no asigna ni este ni ninguno, y si esta definiendo un micro no es ninguno de los que aparece en la librería o lo esta haciendo mal.
Por otro lado ya me he encargado de hacer mi propia función para leer el ADC del PIC (del LCD también lo tengo por si alguien lo necesita).
Dejo aquí el trozo de código que lee el ADC (es para el PIC18F97J60 por lo que seguramente con otro PIC no funcione si no tiene los mismos registros ADCON):
void configura_ADC(void){
// RA2and RA3 for input;
TRISA2 = 1;
TRISA3 = 1;
//Disable the ADC
ADCON0bits.ADON = 0;
ADCON1 = 0b00001011;
ADCON0 = 0b00001011;
ADCON2 = 0b00111010;
}
unsigned int captura_ADC(int chanel){
ADCON0bits.ADON = 1; //Enable ADC
if(chanel == POT) {
//Chanel IN2
ADCON0bits.CHS0=0;
ADCON0bits.CHS1=1;
ADCON0bits.CHS2=0;
ADCON0bits.CHS3=0;
}
else{
//Chanel IN3
ADCON0bits.CHS0=1;
ADCON0bits.CHS1=1;
ADCON0bits.CHS2=0;
ADCON0bits.CHS3=0;
}
ADCON0bits.GO = 1; //Turn ON capture ADC
while (ADCON0bits.GO);
ADCON0bits.ADON=0; //Disable ADC
return ADRESH;
}
Leo dos canales el AN2 y el AN3, en el AN2 tengo un potenciometro y en el AN3 un sensor de temperatura, por eso vereis que aparece if(chanel == POT)
POT = 2
Un saludo