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 se supone que debo configurar el ADC10. Quiero usarlo así:
¿Cómo configuro y uso el ADC10 en este caso de uso? Estoy programando el MSP430 en ensamblaje, pero una respuesta en C también es útil.
Así es como creo que se supone que debe configurarse 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í:
ADC10ON
a 1, ENC
y ADC10SC
a 0 y configurar todos los registros.ADC10SC
y ENC
a 10 para iniciar la conversiónADC10MEM
¿Es correcta esta secuencia? ¿Son correctos los ajustes?
Su configuración parece correcta. Sin embargo, tengo la sensación de que no estás seguro acerca del cronometraje.
En su secuencia de muestreo, manténgalo ADC10ON
en 0 hasta que el resto de los registros estén configurados. Luego, cuando esté esperando para tomar muestras, no espere un número específico de ciclos. En su lugar, sondee ADC10BUSY
hasta que sea 0.
Los 64 relojes a los que se hace referencia en la configuración de tiempo de muestra y retención ADC10SHTx
no son relojes de CPU (MCLK); son relojes relativos a cualquier fuente de reloj que seleccione con la ADC10SSELx
configuración, divididos por el ADC10DIVx
valor.
Con su configuración actual, su ADC se ejecuta desde el ADC10OSC
(oscilador interno de ADC) que funciona a aproximadamente 5 MHz, y está dividiendo ese reloj por 1. Su tiempo de muestra está configurado en 64 relojes, o 12,8 µs. Puede multiplicar este tiempo de muestra por 2, 4 u 8 dividiendo el reloj por el mismo valor.
El tiempo de muestra que necesita depende de su hardware, específicamente, cuánto tiempo le tomaría a su fuente de voltaje llenar un capacitor en particular. Si no espera lo suficiente, aún obtendrá una lectura, pero será incorrecta. La Guía del usuario de la familia MSP430 tiene más detalles. Sin embargo, la configuración "simplemente haz que funcione; tengo todo el tiempo del mundo" sería usar la fuente ACLK (12 kHz, suponiendo que ACLK se obtenga internamente del VLO) dividido por 8 (= 1,5 kHz) con 64 muestras de reloj. durante un tiempo de muestra de 42 ms. En realidad, tomará 77 relojes como calculó anteriormente, por lo que la lectura tardará aproximadamente 51 ms en completarse. Esto es realmente lento y exagerado, pero no es un mal punto de partida para sintonizar.
ADC10BUSY
en lugar de esperar) con un reloj de 512 Hz (oscilador externo de 32768 Hz dividido por 64) y parece funcionar hasta ahora. Gracias por tu respuesta, me ayuda.
Olaf
Olaf
Olaf
FUZxxl
FUZxxl
FUZxxl
Olaf
FUZxxl
Olaf
Olaf
FUZxxl
Olaf
REFBURST
depende de la administración de energía.MSC
no importa si no es modo múltiple/secuencia. SHSx depende de su disparador de muestra. Si inicia manualmente, establezca en 0 (bit ADC10SC). Por lo demás, realmente debe verificar la configuración de su hardware. El tiempo depende de qué reloj, frecuencia, etc. Normalmente, comenzaría con la configuración básica, luego usaría periféricos, etc.Olaf
FUZxxl
REFBURST
que no es necesario ya que no estoy usando el generador de voltaje de referencia.Olaf
FUZxxl
FUZxxl
Olaf
FUZxxl
Olaf
prasad
prasad
FUZxxl
FUZxxl
prasad