Que tal:
Uso un 30f2010 y no se que pasa con mi sistema pero no arroja lo que la simulación hace.
podrían ayudarme a revisar mi código y decirme si está bien programado?
quiero muestrear una señal de audio por AN2 con una frecuencia de muestreo de 2400Hz aprox.
uso el ADC con TIMER3 y pretendo llenar 64 muestras del buffer para mandarlos a una funcion fft.
el codigo está aquí:
Gracias.
Uso un 30f2010 y no se que pasa con mi sistema pero no arroja lo que la simulación hace.
podrían ayudarme a revisar mi código y decirme si está bien programado?
quiero muestrear una señal de audio por AN2 con una frecuencia de muestreo de 2400Hz aprox.
uso el ADC con TIMER3 y pretendo llenar 64 muestras del buffer para mandarlos a una funcion fft.
el codigo está aquí:
Código:
#define _NOPSV __attribute__((no_auto_psv))
# include <p30f2010.h>
# include <math.h>
_FOSC(CSW_FSCM_OFF & XT_PLL8);
_FBORPOR(PBOR_OFF & MCLR_EN);
_FGS(CODE_PROT_OFF);
# define M_PI 3.141592654
unsigned char flag=0;
unsigned AdcValue=0;
void Iniciar_Adc(void);
unsigned char i=0,ind=0;
int *apunta;
int buf[64];
int P[64];
*apunta=&buf[0];
int interval[6];
volatile int liminf,c=0,prom=0,ii=0,k,p,j=0;
double long sum=0,sum1=0;
void _ISR _NOPSV _ADCInterrupt(void)
{
IFS0bits.ADIF=0;
AdcValue=ADCBUF0;
flag=1;
}
main()
{
TRISE=0;
Iniciar_Adc();
Init_Timer();
IFS0bits.ADIF=0;
IEC0bits.ADIE=1;
ADCON1bits.ADON=1;
T3CONbits.TON=1;
while(1)
if(flag==1){
flag=0;
*apunta=ADCBUF0-512;
*apunta++;
ind++;
if(ind==64){
ind=0;
ADCON1bits.ADON=0;
T3CONbits.TON=0;
fft();
apunta=0x800;
*apunta=&buf[0];
ADCON1bits.ADON=1;
T3CONbits.TON=1;
}
}
}
void Init_Timer(void)
{
T3CONbits.TCKPS=3;
T3CONbits.TON=0;
PR3=31;
TMR3=0;
}
void Iniciar_Adc(void)
{
ADCON1bits.SSRC=2;//Autosample
ADCON1bits.FORM=0;
ADCON2bits.SMPI=0;
//ADCON3bits.ADCS=63;
//ADCON3bits.SAMC=31;
ADCHS=0x0002;
ADCSSL=0;
ADPCFG =0;
ADCON1bits.ASAM=1;
ADCON2bits.VCFG=0;
}
Gracias.