Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Generating delay problem ADC

Status
Not open for further replies.

Humberto

New Member
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;
}
 
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;
}
The line in red is wrong. You also never start the ADC(?), so that transferring its value to PORTB is pointless
 
Status
Not open for further replies.

Latest threads

Back
Top