Buenas,
Estoy diseñando un circuito, quiero entrar por el puerto AN3 una señal analógica y hacer la FFT de esta. Tengo dudas con la configuración del ADC.
Mi ADCInit () es el siguiente:
void ADCInit (){
// 1 Configure the A/D Module
ADPCFG = 0xFFF7; //
ADCON1bits.ASAM = 1; // Sampling begins immediately after last conversion completes. SAMP bit is auto set.
ADCON1bits.SSRC = 7; // 7=111 Internal counter ends sampling and starts conversion
ADCON1bits.FORM = 2; // 11 Signal fractional, 10 Fractional, 01 Signed integer, 00 Integer
ADCON2bits.SMPI = 15; // Interrupció després de 16 mostres en el buffer
ADCON3bits.ADCS=63;// Tad = Tcy*(ADCS+1)/2 = 50ns*(63+1)/2 = 1.6usec Sample time = 15Tad, Tad = internal Tcy/2
//Registre ADCHS
ADCHS = 0x0003; // Connecta RB3/AN3 al canal CH0 d'entrada
ADCSSL = 0 ; //Ja ho controlo amb el CH0SA
ADPCFG = 0xFFF7, // 1111 1111 1111 1011 //Configuro tot el port com digital i AN3 com analògic
//Clear the A/D interrupt flag bit
IFS0bits.ADIF = 0; //
//Set the A/D interrupt enable bit
IEC0bits.ADIE = 1;
ADCON1bits.ADON = 1; //Turn on the A/D converter //This is typically done after configuring other registers// A/D converter module is operating
// T3CON = 0x8010;
}
Y en la interrupción tengo esto:
void __attribute__ ((__interrupt__, no_auto_psv)) _ADCInterrupt(void)
{
/* AD Conversion complete interrupt handler */
IFS0bits.ADIF = 0; /* Clear ADC Interrupt Flag*/
ADResult3 = ADCBUF3; /* Get the conversion result.*/
flagDada = 1;
LED = ~LED;
}
Porqué el LED me baila siempre si no le entro ninguna señal en la entrada?
Yo quiero ponerle una sinusoidal en la entrada de AN3 y que cuando detecte señal salte la interrupción (baile el LED) y me haga la conversión a digital. Si no meto ninguna señal a AN3 porqué entra a la interrupción?
Qué estoy configurando mal?
Gracias,
He pensado que igual tengo configurado el ADC para que me lea todo el rato, lo que hago ahora es que a partir un umbral le hago caso o no a los datos adquiridos.
Ahora toca pelearme con la FFT...
Estoy diseñando un circuito, quiero entrar por el puerto AN3 una señal analógica y hacer la FFT de esta. Tengo dudas con la configuración del ADC.
Mi ADCInit () es el siguiente:
void ADCInit (){
// 1 Configure the A/D Module
ADPCFG = 0xFFF7; //
ADCON1bits.ASAM = 1; // Sampling begins immediately after last conversion completes. SAMP bit is auto set.
ADCON1bits.SSRC = 7; // 7=111 Internal counter ends sampling and starts conversion
ADCON1bits.FORM = 2; // 11 Signal fractional, 10 Fractional, 01 Signed integer, 00 Integer
ADCON2bits.SMPI = 15; // Interrupció després de 16 mostres en el buffer
ADCON3bits.ADCS=63;// Tad = Tcy*(ADCS+1)/2 = 50ns*(63+1)/2 = 1.6usec Sample time = 15Tad, Tad = internal Tcy/2
//Registre ADCHS
ADCHS = 0x0003; // Connecta RB3/AN3 al canal CH0 d'entrada
ADCSSL = 0 ; //Ja ho controlo amb el CH0SA
ADPCFG = 0xFFF7, // 1111 1111 1111 1011 //Configuro tot el port com digital i AN3 com analògic
//Clear the A/D interrupt flag bit
IFS0bits.ADIF = 0; //
//Set the A/D interrupt enable bit
IEC0bits.ADIE = 1;
ADCON1bits.ADON = 1; //Turn on the A/D converter //This is typically done after configuring other registers// A/D converter module is operating
// T3CON = 0x8010;
}
Y en la interrupción tengo esto:
void __attribute__ ((__interrupt__, no_auto_psv)) _ADCInterrupt(void)
{
/* AD Conversion complete interrupt handler */
IFS0bits.ADIF = 0; /* Clear ADC Interrupt Flag*/
ADResult3 = ADCBUF3; /* Get the conversion result.*/
flagDada = 1;
LED = ~LED;
}
Porqué el LED me baila siempre si no le entro ninguna señal en la entrada?
Yo quiero ponerle una sinusoidal en la entrada de AN3 y que cuando detecte señal salte la interrupción (baile el LED) y me haga la conversión a digital. Si no meto ninguna señal a AN3 porqué entra a la interrupción?
Qué estoy configurando mal?
Gracias,
He pensado que igual tengo configurado el ADC para que me lea todo el rato, lo que hago ahora es que a partir un umbral le hago caso o no a los datos adquiridos.
Ahora toca pelearme con la FFT...
Última edición: