ADC10 y DTC (MSP430 F2xx) - problemas al leer la entrada analógica en múltiples canales

2

Estamos intentando leer el voltaje analógico suministrado a dos canales simultáneamente utilizando ADC10 y DTC.

No estamos obteniendo los resultados de las conversiones. Nuestro código es el siguiente:

ADC10CTL1 = INCH_2 + CONSEQ_1;
ADC10CTL0 = REF2_5V + SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
ADC10AE0 |= 0x06;
ADC10DTC1 = 0x02;
ADC10SA = 0x200;                        // Data buffer start

while (1)
{
    ADC10CTL0 &= ~ENC;
    while (ADC10CTL1 & BUSY);
    ADC10SA = 0x200;
    ADC10CTL0 |= ENC + ADC10SC; //Sampling and conversion start
     __bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts enabled
}

y, el ISR es:

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{ int * read = 0x200;
//code that reads from the location 'read'
 __bic_SR_register_on_exit(LPM3_bits);        // Clear LPM3 bit from 0(SR)
}

Mientras estamos obteniendo los resultados en AP, no muestran el valor correcto, y el valor no cambia si cambia el voltaje suministrado. ¿Cómo nos aseguramos de que se genere una interrupción solo cuando se completa la conversión?

Muchas gracias por tu tiempo.

    
pregunta user4132

1 respuesta

2

... puedes comenzar usando el vector de interrupción ADC10 en lugar del vector de interrupción timer0 ... también parece que vas a LPM0 al inicio y luego cambias a LPM3 después de que la primera interrupción te despierta (simplemente leyendo comentarios aquí) ...

Consulte la sección 22.2.10 de el manual , extraído aquí para mayor comodidad.

  

Un vector de interrupción y otro de interrupción   están asociados con el ADC10 como se muestra   en la figura 22-16. Cuando el DTC no está   utilizado (ADC10DTC1 = 0) ADC10IFG está configurado   cuando se cargan los resultados de conversión   en ADC10MEM. Cuando se usa DTC   (ADC10DTC1 > 0) ADC10IFG se establece cuando un   transferencia de bloque completa y la   contador de transferencia interna 'n' = 0. Si   Tanto los bits ADC10IE como los GIE son   establecer, a continuación, el indicador ADC10IFG genera   Una solicitud de interrupción. El ADC10IFG   bandera se restablece automáticamente cuando el   solicitud de interrupción es atendida o puede   ser restablecido por el software

También consideraría leer los ejemplos de código proporcionados por TI para su variante de chip particular.

    
respondido por el vicatcu

Lea otras preguntas en las etiquetas