Actualmente estoy escribiendo mi primera aplicación seria con un controlador MSP430 (específicamente, un MSP430G2553) y estoy un poco confundido por la documentación sobre cómo debo configurar el ADC10. Quiero usarlo así:
- La señal (proveniente de un potenciómetro de 100 kΩ entre V CC y GND) está conectada a la entrada A4 (pin 6) y está en el rango de GND a V CC
- De vez en cuando (cuando el usuario presiona un botón) quiero muestrear el voltaje en esa entrada. Una muestra es suficiente.
- Tengo tiempo suficiente para hacer lo que sea necesario para muestrear la entrada cuando llegue el momento de hacerlo.
- Preferiría hacer esto sincrónicamente (es decir, sin interrupciones) para no complicar demasiado la lógica del programa.
- El ADC10 debe estar apagado cuando no lo estoy usando para ahorrar energía.
- Ni el ADC10 ni el ping 6 se utilizan de ninguna otra manera en esta aplicación.
¿Cómo configuro y uso el ADC10 en este caso de uso? Estoy programando el MSP430 en ensamblador, pero una respuesta en C también es útil.
Aquí es cómo creo que se debe configurar el ADC:
ADC10CTL0:
SREFx = 000 (V_CC)
ADC10SHTx = 11 (64 clocks, we have enough time)
ADC10SR = 1 (50 kbps should be enough)
REFOUT = 0
REFBURST = don't care
MSC = don't care
REF2_5V = don't care
REFON = 0
ADC10ON = 1 (set to 1 after finishing the configuration)
ADC10IE = 0 (no interrupts)
ADC10CTL1
INCHx = 0100 (A4)
SHSx = 00 (sample and hold sourced from ADC10SC)
ADC10DF = 0 (no two's complement)
ISSH = 0 (no inversion)
ADC10DIVx = 000 (not too sure either)
ADC10SSELx = 0 (is this the right clock?)
CONSEQx = 00 (single channel single conversion)
ADC10AE0 = 0x10 (A4 enabled)
ADC10DTC1 = 0 (DTC disabled)
Creo que la secuencia para muestrear datos se ve así:
- establezca
ADC10ON
en 1,ENC
yADC10SC
en 0 y configure todos los registros. - establezca
ADC10SC
yENC
a 10 para iniciar la conversión - espere 64 + 12 + 1 = 77 ciclos para que finalice la conversión
- leer el resultado de
ADC10MEM
¿Esta secuencia es correcta? ¿Son correctos los ajustes?