Hi guys, I have a problem to convert a signal with the ADC of a DSPic33FJ12GP202, because I need a delay to retain the data and to convert it. My problem is with the Delay10KTCYx (660) instruction, because the compiler marks me wrong, my code is as follows, thanks
#include <p33FJ12GP202.h>
#include <delay.h>
#define _XTAL_FREQ 16000000
#define fcy 16000000
//#define fcy
_FOSC ( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT );
int TCY;
int main (void);
void retardo(void);
void inicia_adc(void);
int main (void)
{
TRISB=0X0000;
inicia_adc();
AD1CON1bits.ADON=1; //SE HABILITA EL ADC
/////////////OSCILADOR DE 16MHz/////////////////////
////////TCY=4/16MHz = 1/4us/////////////////////////
while(1)
{
void retardo(void){
//TCY=1/4000000;
Delay10KTCYx(660);//DELAY DE 10X60X1/4MZ=150us
}
}
PORTB=ADC1BUF0;
}
void inicia_adc(void)
{
///////DEFINIMOS LA ENTRADA (RA0), LOS BITS DEL ADC Y SE CONFIGURA SOLO ADCON 1/////////////
TRISA=0X0001; //ENTRADA POR RA0
AD1PCFGL=0; //ENTRADAS ANALÓGICAS
AD1CON1bits.AD12B=1;//ADC DE 12 BITS}
AD1CON1bits.ADSIDL=0;
AD1CON1bits.FORM=0;
AD1CON1bits.ASAM=1;///EL MUESTRO INICIA DESPUÉS DE LA ÚLTIMA CONVERSIÓN
AD1CON1bits.SSRC=0b111;///TERMINA EL MUESTREO
AD1CON1bits.SAMP=1;///INICIA EL MUESTREO
////////////CONFIGURACIÓN AD1CON2//////////////
AD1CON2bits.VCFG=0b00;///VDD Y VSS
AD1CON2bits.CSCNA=1;///ESCANEA LAS ENTRADAS
AD1CON2bits.SMPI=0b111;//DETERMINA LA CANTIDAD DE MUESTRAS (EN ESTE CASO 16)7
AD1CON2bits.BUFM=0;//SIEMPRE SE LLENA EL BUFFER DESDE EL PRINCIPIO
AD1CON2bits.ALTS=0;//SIEMPRE SE UTILIZA LA ENTRADA DE CANAL, PARA EL MUESTREO A
////////////CONFIGURACIÓN AD1CON3//////////////
AD1CON3bits.ADRC=1;//SE SELECCIONA EL RELOJ INTERNO
AD1CON3bits.SAMC=0b11111;//BITS DE AUTO MUESTREO
AD1CON3bits.ADCS=0b11111;//TIEMPO DE CONVERSIÓN DE BITS ADC
////////////CONFIGURACIÓN AD1CHS0://////////////
AD1CHS0bits.CH0NB=0;//VREF
AD1CHS0bits.CH0SB=0b00000;//ENTRADA POSITIVA POR AN0
AD1CHS0bits.CH0NA=0;//ENTRADA NEGATIVA POR -REF
AD1CHS0bits.CH0SA=0b00000;//ENTRADA POSITIVA POR AN0
///////////CONFIGURACIÓN DEL REGISTRO BAJO///////////
// AD1CSSLbits.CSS=1;//SE ESCANEAN LAS ENTRADAS
IFS0bits.AD1IF=1;
IEC0bits.AD1IE=1;/////SI SE REALIZA LA CONVERSIÓN HAY INTERRUPCIÓN
IPC0bits.T1IP=1;//PRIORIDAD DE LA INTERRUPIÓN
AD1CON1bits.DONE=1;
}
#include <p33FJ12GP202.h>
#include <delay.h>
#define _XTAL_FREQ 16000000
#define fcy 16000000
//#define fcy
_FOSC ( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT );
int TCY;
int main (void);
void retardo(void);
void inicia_adc(void);
int main (void)
{
TRISB=0X0000;
inicia_adc();
AD1CON1bits.ADON=1; //SE HABILITA EL ADC
/////////////OSCILADOR DE 16MHz/////////////////////
////////TCY=4/16MHz = 1/4us/////////////////////////
while(1)
{
void retardo(void){
//TCY=1/4000000;
Delay10KTCYx(660);//DELAY DE 10X60X1/4MZ=150us
}
}
PORTB=ADC1BUF0;
}
void inicia_adc(void)
{
///////DEFINIMOS LA ENTRADA (RA0), LOS BITS DEL ADC Y SE CONFIGURA SOLO ADCON 1/////////////
TRISA=0X0001; //ENTRADA POR RA0
AD1PCFGL=0; //ENTRADAS ANALÓGICAS
AD1CON1bits.AD12B=1;//ADC DE 12 BITS}
AD1CON1bits.ADSIDL=0;
AD1CON1bits.FORM=0;
AD1CON1bits.ASAM=1;///EL MUESTRO INICIA DESPUÉS DE LA ÚLTIMA CONVERSIÓN
AD1CON1bits.SSRC=0b111;///TERMINA EL MUESTREO
AD1CON1bits.SAMP=1;///INICIA EL MUESTREO
////////////CONFIGURACIÓN AD1CON2//////////////
AD1CON2bits.VCFG=0b00;///VDD Y VSS
AD1CON2bits.CSCNA=1;///ESCANEA LAS ENTRADAS
AD1CON2bits.SMPI=0b111;//DETERMINA LA CANTIDAD DE MUESTRAS (EN ESTE CASO 16)7
AD1CON2bits.BUFM=0;//SIEMPRE SE LLENA EL BUFFER DESDE EL PRINCIPIO
AD1CON2bits.ALTS=0;//SIEMPRE SE UTILIZA LA ENTRADA DE CANAL, PARA EL MUESTREO A
////////////CONFIGURACIÓN AD1CON3//////////////
AD1CON3bits.ADRC=1;//SE SELECCIONA EL RELOJ INTERNO
AD1CON3bits.SAMC=0b11111;//BITS DE AUTO MUESTREO
AD1CON3bits.ADCS=0b11111;//TIEMPO DE CONVERSIÓN DE BITS ADC
////////////CONFIGURACIÓN AD1CHS0://////////////
AD1CHS0bits.CH0NB=0;//VREF
AD1CHS0bits.CH0SB=0b00000;//ENTRADA POSITIVA POR AN0
AD1CHS0bits.CH0NA=0;//ENTRADA NEGATIVA POR -REF
AD1CHS0bits.CH0SA=0b00000;//ENTRADA POSITIVA POR AN0
///////////CONFIGURACIÓN DEL REGISTRO BAJO///////////
// AD1CSSLbits.CSS=1;//SE ESCANEAN LAS ENTRADAS
IFS0bits.AD1IF=1;
IEC0bits.AD1IE=1;/////SI SE REALIZA LA CONVERSIÓN HAY INTERRUPCIÓN
IPC0bits.T1IP=1;//PRIORIDAD DE LA INTERRUPIÓN
AD1CON1bits.DONE=1;
}