Conversor Análogo Digital de 12 bits

Anuncio
Seminario de Computadores I,
1er Semestre 2004
ADC12
Conversor Análogo Digital de 12 bits
Francisco Blancaire
Eduardo González
Michael Kusch
Diego Valencia
ADC12
ÍNDICE GENERAL
Índice General
1 Introducción
3
1.1
Caracterı́sticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2
Diagrama de bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.3
Requerimientos para la operación . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.3.1
Reloj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.3.2
Canales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.3.3
Voltajes de referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.3.4
Muestreo y tiempos de conversión . . . . . . . . . . . . . . . . . . . . . .
6
1.3.5
Consideraciones del tiempo de captura . . . . . . . . . . . . . . . . . . . .
8
2 Registros
2.1
2.2
2.3
2.4
9
Registros de configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.1.1
ADC12CTL0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.1.2
ADC12CTL1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Registros de almacenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2.1
ADC12MEMx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Registros de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.3.1
ADC12MCTLx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
Registros de interrupción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.4.1
ADC12IFG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.4.2
ADC12IE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.4.3
ADC12IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3 Funcionamiento
3.1
3.2
16
Conversión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.1.1
Memoria de Conversión . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.1.2
Modos de Conversión . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.1.3
Sensor integrado de temperatura . . . . . . . . . . . . . . . . . . . . . . .
20
Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.2.1
Interrupciones del ADC12
. . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.2.2
Vector Generador de Interrupciones, ADC12IV . . . . . . . . . . . . . . .
21
Seminario de Computadores I, 2004
1
ADC12
ÍNDICE GENERAL
4 Ejemplo de implementación
22
4.1
Proceso de Inicialización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
4.2
Ejemplo: Conversión única, canal único . . . . . . . . . . . . . . . . . . . . . . .
23
4.3
Ejemplo: Conversión única, secuencia de canales . . . . . . . . . . . . . . . . . .
24
Seminario de Computadores I, 2004
2
ADC12
1
Introducción
Introducción
En este documento se detalla la configuración y funcionamiento del módulo ADC12, que es
un conversor análogo digital de 12 bits que trae incorporado el microcontrolador MSP430F149.
Su función es convertir voltajes analógicos que se introducen por distintas entradas disponibles a palabras binarias de 12 bits. Esto lo realiza utilizando recursos propios de módulo, es
decir sin interferir en el procesamiento principal del microcontrolador. En los microcontroladores con DMA se puede utilizar esta propiedad para tener una conversión fluida y continua sin
interrumpir ningún otro proceso.
1.1
Caracterı́sticas
• Conversión de 12 bits.
• Tasa de muestreo programable, con una máxima de 200k Muestras por segundo.
• Inicio de la conversión por software o por temporizadores .
• Término de cada conversión puede generar interrupciones.
• Fuente de reloj, perı́odo de captura y frecuencia de muestreo programables.
• Generación de referencias configurable por software.
• 8 canales de entrada, más 4 señales internas.
• 4 modos de adquisición.
• Hasta 16 conversiones almacenadas independientemente.
Seminario de Computadores I, 2004
3
ADC12
1.2
Diagrama de bloques
Diagrama de bloques
El diagrama de bloques se muestra a continuación
Se destaca el hecho de que aunque se puedan adquirir varias señales distintas, sólo existe
un modulo conversor.
1.3
Requerimientos para la operación
Se muestran a continuación las opciones básicas que deben configurarse para utilizar el
ADC. Cada sección muestra su parte en el diagrama de bloques para tener una idea del flujo de
las señales.
Seminario de Computadores I, 2004
4
ADC12
1.3.1
Requerimientos para la operación
Reloj (ADC12CLK)
Se utiliza sólo un reloj para la conversión y para generar el perı́odo de muestreo. Con
ADC12SSEL se efectúa la selección de este reloj. Las fuentes posibles de reloj son: SMCLK,
MCLK, ACLK, ADC12OSC.
EL ADC12OSC es un oscilador interno del módulo de 5[M hz], pero varı́a según microcontrolador, voltaje de alimentación y temperatura.
Existe además la posibilidad de dividir el reloj de 1 a 8 configurando los bits ADC12DIVx.
1.3.2
Canales
La elección del canal que se convierte se realiza mediante un multiplexor analógico, diseñado hecho de manera de minimizar el crosstalk
y el ruido. Los canales que no se están convirtiendo quedan puestos a
tierra para evitar aún más ruido.
Los canales externos de entrada corresponden a los pines del puerto 6
del microcontrolador, por lo que se deben configurar como entradas y en
modo entrada/salida para eliminar el buffer que podrı́a crear problemas
con corrientes parásitas.
1.3.3
Voltajes de referencia
Existen varias fuentes disponibles para los voltajes de referencia que ocupa el conversor.
Existe la opción de utilizar voltajes de referencia internos del módulo, que pueden ser 1.5 o
2.5 [V]. Se puede utilizar también un voltaje de referencia externa que se aplica al pin V eREF +
Seminario de Computadores I, 2004
5
ADC12
Requerimientos para la operación
del puerto 6. Por último, se puede utilizar el voltaje de alimentacion del microcontrolador. Para
VREF − se puede elegir AVSS o introducir un voltaje de referencia por el pin V eREF −
Se recomienda que los voltajes aplicados externos (o de alimentación) estén filtrados con
un condensador de 10[µF ] y otro de 0.1[µF ] en paralelo, entre la fuente y tierra.
1.3.4
Muestreo y tiempos de conversión
La conversión completa implica dos fases: muestreo (o captura) y conversión.
La primera fase se inicia con el canto de subida de una señal interna SHI. Una vez concluida
esta fase, comienza la fase de conversión.
Las fuentes de la señal SHI se seleccionan mediante los bits SHSx y son las siguientes:
• Bit ADC12SC.
• Etapa de salida 1 del Timer A.
• Etapa de salida 0 del Timer B.
• Etapa de salida 1 del Timer B.
La polaridad de esta señal puede ser invertida utilizando el bit ISSH.
La señal SAMPCON controla el perı́odo de muestreo y el comienzo de la conversión. Mientras ésta esté alta, está activo el proceso de captura. En el canto de bajada de SAMPCON se
comienza la conversión que dura 13 cantos del reloj (ADC12CLK).
La relación que existe entre la señal SHI y SAMPCON esta determinada por el bit de
control SHP, que determina dos modos distintos de captura:
Seminario de Computadores I, 2004
6
ADC12
Requerimientos para la operación
A. Captura Extendida (SHP=0)
En este modo la señal SHI controla directamente la señal SAMPCON, por lo que define
directamente el perı́odo de muestreo tsample . Una vez que se baja SHI (y por ende SAMPCON)
existe un tiempo de sincronismo hasta el primer canto de subida de ADC12CLK, el cual
comienza la conversión.
B. Captura por pulso (SHP=1)
En este modo la subida de SHI determina la subida de SAMPCON, pero el tiempo tsample
que permanece en alto se configura utilizando los bits SHT0x y SHT1x.
Luego de que sube SHI, se tiene un tiempo de sincronismo con el canto de subida de
ADC12CLK y luego permanece alto SAMPCON durante tsample . El perı́odo de muestreo
real corresponde entonces a tsample + tsync , este último correspondiendo al tiempo de sincronismo.
La conversion se inicia inmediatamente con el canto de bajada de SAMPCON.
Seminario de Computadores I, 2004
7
ADC12
1.3.5
Requerimientos para la operación
Consideraciones del tiempo de captura
Una consideración importante que debe realizarse al convertir es la caracterı́stica de filtro
pasabajos que tiene el canal durante la fase de muestreo (ver Figura).
Vi =Voltaje en el pin.
Vs =Voltaje de la fuente análoga por muestrear.
Rs =Resistencia externa de la fuente análoga.
Ri =Resistencia interna del multiplexor.
Ci =Capacidad del condensador de captura.
Vc =Voltaje del condensador.
Dado que el valor que se convierte es VC , se debe esperar un tiempo prudente para que este
valor sea igual a Vs .
La relación entre el tiempo de captura y estas variables responde al tiempo de carga del
condensador:
tsample > (Rs + Ri ) × ln(213 ) × Ci
Reemplazando los valores tı́picos de Ri = 2[kΩ] y Ci = 40[pF ] se obtiene tsample en función
de la resistencia de la fuente de voltaje:
tsample > (Rs + 2k) × ln(213 ) × 40p[s]
Si se tiene una resistencia de salida Rs = 10[kΩ], se obtiene un perı́odo de captura mı́nimo
de 4, 33[µs].
Seminario de Computadores I, 2004
8
ADC12
2
Registros
Registros
Los registros del Conversor Análogo-Digital se pueden catalogar de la siguiente manera:
dos registros de configuración, tres para el manejo de interrupciones, dieciséis para el control de
conversion y otros dieciséis para almacenar los resultados de la conversion.
2.1
Registros de configuración
2.1.1
ADC12 Control Register 0, ADC12CTL0.
Este registro es el primer registro de control.
Los campos SHT1x y SHT0x son para definir la cantidad de ciclos de reloj que va a durar
el muestreo de los canales por convertir según los registros ADC12MEM8 al ADC12MEM15, y
ADC12MEM0 al ADC12MEM7 respectivamente.
El bit MSC es empleado para muestreos y conversiones múltiples automáticas.
REFON es el bit que habilita el generador de voltaje de referencia interno del conversión,
si no se desea usar, es recomendable mantenerlo apagado (en cero) para ahorrar consumo. Para
seleccionar el nivel del voltaje de referencia interna está el bit REF2 5V, el cual selecciona el
voltaje en 2.5[V] o 1.5[V], asignando un 1 ó 0 respectivamente.
Con el bit ADC12ON podemos encender el conversor si se va a utilizar. En caso contrario
se debe mantener en cero (apagado) para ahorro de consumo. Los bits mencionados sólo pueden
ser modificados cuando el bit que habilita la conversión ENC está en 0.
Para habilitar la interrupción por overflow (desbordamiento) en el resultado, se debe poner
en bit ADC12OVIE en uno. A su vez, si también se quiere que esté la interrupción por Time
Overflow, el bit ADC12TOVIE debe estar en uno. También es condición necesaria que estén
habilitadas las interrupciones globales (GIE).
Para iniciar una conversion se debe levantar el bit ADC12SC.
Ésta es la tabla que muestra cómo configurar los campos SHTxx, para elegir el número de
ciclos de reloj deseados.
Seminario de Computadores I, 2004
9
ADC12
2.1.2
Registros de configuración
ADC12 Control Register 1, ADC12CTL1.
Este es el segundo registro de control del conversor.
Con los bits CSTARTADDx definimos en qué registro de memoria ADC12MEMx iniciar la
conversión. Realmente lo que definimos es con cual de los registros de control ADC12MCTLx
(aquı́ se define el canal de entrada y VREF ) comenzar la conversión, y cuyo resultado será guardado en su respectivo ADC12MEMx.
Los bits SHSx son para elegir la fuente de reloj que inicia todo el ciclo de conversion. Se
configuran de la siguiente forma:
00
01
ADC12SC
TIMER A.OUT1
10
11
TIMER B.OUT0
TIMER B.OUT1
El bit ISSH sirve para invertir la señal de Sample&Hold (bit en 1).
El bit SHP es para ajustar el modo de captura, ya sea por pulso (bit en 1) o extendida (en
cero).
Para elegir el reloj por utilizar por el conversor están los bits ADC12SSELx, los bits se
ajustan de la siguiente forma:
Seminario de Computadores I, 2004
10
ADC12
Registros de almacenamiento
00
01
ADC12OSC
ACLK
10
11
MCLK
SMCLK
Para dividir la frecuencia del reloj elegido, en caso que sea necesario, es posible ajustar los
bits de ADC12DIVx. La configuración de estos bits es la siguiente:
000
100
1
5
001
101
2
6
010
110
3
7
011
111
4
8
Es importante tener en cuenta que para modificar los campos anteriores se debe tener el
bit ENC en cero.
Para elegir el modo de conversión se deben ajustar los bits del campo CONSEQx de la
siguiente manera:
00
01
Único canal
Secuencia de canales
10
11
Repetir único canal
Repetir secuencia de canales
El último bit de este registro, el ADC12BUSY, indica si el conversor está ocupado realizando
una conversión.
2.2
2.2.1
Registros de almacenamiento
ADC12 Conversion Memory Registers, ADC12MEMx.
En estos registros se almacenan los resultados de las conversiones. Se emplean solo 12 bits,
del 0 al 11, porque es un conversor de 12 bits. Los otros bits están siempre en 0 y son de solo
lectura.
En total son 16 de estos registros, y cada uno esta relacionado con su respectivo registro de
control ADC12MCTLx
Seminario de Computadores I, 2004
11
ADC12
2.3
Registros de control
Registros de control
2.3.1
ADC12 Memory Control, ADC12MCTLx.
Este registro es el que define qué canal será convertido.
Para seleccionar un canal se debe ajustar INCHx según la siguiente tabla:
INCHx
0000
0001
0010
0011
0100
0101
0110
0111
Canal
A0
A1
A2
A3
A4
A5
A6
A7
INCHx
1000
1001
1010
1011
1100
1101
1110
1111
Canal
V eREF +
VREF − /V eREF −
Temperature Diode
(AVCC − AVSS )/2
(AVCC − AVSS )/2
(AVCC − AVSS )/2
(AVCC − AVSS )/2
(AVCC − AVSS )/2
El campo SREFx se emplea para seleccionar los voltajes de referencia. El resultado que se
obtiene luego de una conversión esta dado por:
NADC = 4095
VIN − VR−
VR+ − VR−
En este campo se eligen los VR+ y VR− a utilizar, según la siguiente tabla.
SREFx
000
001
010
011
100
101
110
111
Seminario de Computadores I, 2004
VR+
AVCC
VREF +
V eREF +
V eREF +
AVCC
VREF +
V eREF +
V eREF +
VR−
AVSS
AVSS
AVSS
AVSS
VREF − /V eREF −
VREF − /V eREF −
VREF − /V eREF −
VREF − /V eREF −
12
ADC12
2.4
2.4.1
Registros de interrupción
Registros de interrupción
ADC12 Interrupt Flag Register, ADC12IFG.
Cada vez que un resultado se almacena en memoria ADC12MEMx, se levanta la bandera
de este registro, en el bit correspondiente al número del registro.
Poe ejemplo, si una conversión finaliza y se almacena un resultado en ADC12MEM5, entonces se levantará una bandera en ADC12IFG5.
2.4.2
ADC12 Interrupt Enable Register, ADC12IE.
Habilita las interrupciones provocadas por ADC12IFG. Esto se puede hacer de manera
especı́fica, habilitando las interrupciones para algunos ADC12IFG, manteniendo las demás deshabilitadas. Cada vez que se levante una bandera en ADC12IFG, se comprueba si está habilitada
la mascara de interrupción correspondiente. Si es ası́ se generará una interrupción, en caso contrario nada pasa.
Seminario de Computadores I, 2004
13
ADC12
2.4.3
Registros de interrupción
ADC12 Interrupt Vector Register, ADC12IV.
Este registro se utiliza para combinar y priorizar las interrupciones del conversor análogo
digital. Una vez que el ADC ha producido una interrupción, en vez de estar comprobando una
a una las banderas de ADC12IFG, basta con leer este registro para saber qué canal produjo la
interrupción. En este registro sólo está el campo ADC12IVx, y el resto son ceros.
Además de las banderas que se generan por almacenar el resultado de una conversión, en
este registro están las banderas de timeoverflow y conversion memory overflow.
Los valores que puede tomar ADC12IV, están en la siguiente tabla ordenados de mayor
prioridad a menor prioridad.
Si una bandera se ha levantado, pero no ha sido atendida, y se levanta otra de mayor
Seminario de Computadores I, 2004
14
ADC12
Registros de interrupción
prioridad, está ultima sobreescribe el valor de ADC12IV ya que tiene mayor prioridad. En cambio,
si posteriormente llega otra con menor prioridad, no se produce ningún cambio.
Una vez atendida la interrupción de mayor prioridad, si existen otras de menor prioridad
pendiente, ADC12IV tomará el valor de la interrupción que le sigue en prioridad. Esto quiere
decir que las interrupciones de menor prioridad que han sido sobreescritas no se pierden, sólo se
posponen.
Seminario de Computadores I, 2004
15
ADC12
3
Funcionamiento
Funcionamiento
3.1
Conversión
3.1.1
Memoria de Conversión
Existen 16 registros de memoria de conversión ADC12MEMx, cada uno de 16 bit de los
cuales sólo se ocupan 12 para guardar los resultados de cada ciclo de conversión. Cada registro
de conversión está asociado a un registro de control ADC12MCTLx, en el cual se encuentran
SREFx, INCHx y EOS.
SREFx define el voltaje de referencia a usar; INCHx selecciona el canal entrante (esto quiere
decir que no necesariamente por usar el registro de memoria 1 tengo que convertir el canal 1);
el EOS define el final de la secuencia cuando el modo secuencial es utilizado. En caso de que
ningún EOS sea seteado, una secuencia se repetirá indefinidamente.
CSTARTADDx (Control START ADDress) ubicado en ADC12CTL1 define el primer registro de control usado para cualquier conversión. Si la conversión es canal único o repetición de
canal único, el CSTARTADDx indica el único ADC12MCTLx por ser usado.
Si el modo de conversión seleccionado es secuencia de canales o repetición de secuencia
de canales, CSTARTADDx indica el primer ADC12MCTLx por ser usado en la secuencia. Un
puntero invisible es incrementado automáticamente cuando cada conversión esta completa para
que pase al próximo ADC12MCTLx. La secuencia continúa hasta que sea encontrado un EOS=1.
Cuando el resultado de la conversión es escrito en el registro seleccionado ADC12MEMx,
la bandera en el registro ADC12IFGx correspondiente es seteada automáticamente.
3.1.2
Modos de Conversión
El modo de conversión se selecciona mediante CONSEQx ubicado en el registro ADC12CTL1.
CONSEQx
00
01
Canal único, única conversión
Secuencia de canales
:
:
10
11
Repetición de canal único
Repetición Secuencia de canales
:
:
Seminario de Computadores I, 2004
Un único canal es convertido una sola vez
Una secuencia de canales es convertida una sola
vez
Un único canal es convertido repetidas veces
Una secuencia de canales en convertida repetidas
veces
16
ADC12
Conversión
A. Canal único, única conversión (00)
Un único canal es convertido una sola vez. El resultado obtenido es guardado en el registro
de memoria ADC12MEMx definido por el CSTARTADDx.
Las conversiones son disparadas por el ADC12SC bit y cuando cualquier otra fuente de
disparo es usada (TIMER A, TIMER B) el bit ENC debe ser cambiado entre cada conversión.
La siguiente Figura muestra el diagrama de flujo del modo Canal único, única conversión.
B. Secuencia de canales (01)
Una secuencia de canales es convertida una sola vez. Los resultados son guardados en la
memoria de conversión partiendo del registro definido en CSTARTADDx. La secuencia termina con la conversión del registro ADC12MCTLx cuyo bit EOS esté en 1. Nuevamente la
secuencia el gatillada por el ADC12SC y cuando cualquier otra fuente de disparo es usada
(TIMER A, TIMER B) el bit ENC debe ser cambiado entre cada conversión.
La siguiente Figura muestra el diagrama de flujo del modo Secuencia de canales.
Seminario de Computadores I, 2004
17
ADC12
Conversión
C. Repetición de canal único (10)
Un único canal es convertido repetidas veces. El resultado obtenido es guardado en el registro
de memoria ADC12MEMx definido por CSTARTADDx.
Las conversiones son disparadas por el ADC12SC bit y cuando cualquier otra fuente de
disparo es usada (TIMER A, TIMER B) el bit ENC debe ser cambiado entre cada conversión.
Es necesario leer el resultado después que se ha terminado la conversión, debido a que sólo
un registro de memoria es usado y se sobrescribirá éste después de la siguiente conversión
La siguiente Figura muestra el diagrama de flujo del modo Repetición de canal único.
Seminario de Computadores I, 2004
18
ADC12
Conversión
D. Repetición Secuencia de canales (11)
Una secuencia de canales en convertida repetidas veces. Los resultados son guardados en
la memoria de conversión partiendo del registro definido en CSTARTADDx. La secuencia
termina en la lectura de un canal donde su registro de control ADC12MCTLx tenga seteado
el bit EOS, la repetición de secuencia el gatillada por el ADC12SC y cuando cualquier otra
fuente de disparo es usada (TIMER A, TIMER B) el bit ENC debe ser cambiado entre cada
conversión.
La siguiente Figura muestra el diagrama de flujo del modo Repetición Secuencia de canales.
Cómo parar las conversiones
Parar el ADC12 depende del modo de operación que se este usando. Las vı́as recomendadas
para parar una conversión activa son las siguientes:
• Modo (00): Resetear el bit ENC terminarı́a inmediatamente la conversión, lo que implicarı́a
que el resultado de la conversión no serı́a confiable.
• Modo (01): Resetear el bit ENC terminarı́a la conversión al final de la secuencia.
• Modo (10): La conversión es detenida poniendo a ENC en 0 lo que hace terminar la conversión al final del ciclo de conversión.
• Modo (11): Las sucesivas conversiones terminan cuando ENC es igual a 0 lo que hace
terminar la conversión al final de la secuencia.
Seminario de Computadores I, 2004
19
ADC12
Interrupciones
Cualquier modo de conversión puede ser detenido inmediatamente asignando a CONSEQx
igual a (00) y reseteando el bit ENC, en este caso los resultados de las conversiones no serán
confiables.
3.1.3
Sensor integrado de temperatura
Para usar el sensor integrado de temperatura se debe seleccionar la entrada análoga INCHx =
1010. Este canal es usado como cualquier otro.
Para usar el sensor de temperatura el perı́odo de muestreo debe ser mayor que 30[µs] y se
debe considerar que el offset varı́a mucho entre un procesador y otro.
La temperatura se encuentra relacionada con el voltaje de entrada mediante la siguiente
ecuación(con valores nominales),
Vtemp = 3.55 × 10−3 · T + 0.986
De la cual se desprende el siguiente gráfico.
3.2
Interrupciones
3.2.1
Interrupciones del ADC12
El ADC12 posee 18 recursos de interrupción.
• ADC12IFG0-ADC12IFG15: una bandera es seteada cada vez que su registro de memoria asociado ha sido escrito por una conversión. Una interrupción es creada si el correspondiente bit ADC12IEx y el GIE bit son seteados.
• ADC12OV, ADC12MEMx overflow: esta interrupción es generada cuando un resultado
ha sido sobre-escrito en un registro de memoria ADC12MEMx, antes de haber sido leı́do.
• ADC12TOV, ADC12 conversión time overflow: esta ocurre cuando otra petición de conversión es requerida antes que la conversión actual halla terminado.
Seminario de Computadores I, 2004
20
ADC12
3.2.2
Interrupciones
Vector Generador de Interrupciones, ADC12IV
En este registro todas las interrupciones son priorizadas y combinadas en un único vector de
interrupciones. Este vector es usado para poder identificar cuál de las interrupciones ha ocurrido,
sin necesidad de revisar cada una de las banderas de interrupción.
Las interrupciones ADC12TOV y ADC12OV son reseteadas automáticamente con cualquier
acceso a este registro. Las interrupciones originadas por ADC12IFGx son reseteadas una vez que
se hayan leı́do los datos de los registros de memoria ADC12MEMx correspondiente.
En el caso que una interrupción quede pendiente después de un servicio de interrupción, se
generara otra interrupción que será atendida posteriormente.
Seminario de Computadores I, 2004
21
ADC12
4
Ejemplo de implementación
Ejemplo de implementación
4.1
Proceso de Inicialización
Para configurar la conversión ADC12 los pasos son los siguientes:
• Seleccionar los pines del puerto 6 que van a utilizarse como canales análogos y configurarlos
como entradas (P6DIR=0) y uso por periféricos (P6SEL=1).
• Luego debe deshabilitarse el bit ENC del registro ADC12CTL0. Esto es necesario para
poder modificar los registros de configuración del ADC12.
ADC12CTL0:
1. Configurar el tiempo de captura para los canales internos con SHT1 xx y para los canales
externos con SHT0 xx.
2. Si se va a utilizarse la referencia interna de voltaje, habilitar REFON y seleccionar el
voltaje con REF2 5V.
3. Si se utilizan conversiones múltiples, poner en 1 el bit MSC del registro ADC12CTL0 si
se desea que cada conversión se realice apenas hay terminado la anterior. Si se deja en
0, el inicio de cada conversión sucesiva será dado por un timer.
4. Si se van a utilizar interrupciones, configurar los bits ADC12OVIE y ADC12TOVIE
del registro ADC12CTL0 de a cuerdo a la aplicación. También configurar el Registro
ADC12IE.
ADC12CTL1:
1. Seleccionar el primer registro a convertir con CSTARTADD x. Con esto elegimos cual de
los registros ADC12MCTL0 a ADC12MCTL15 será el registro a convertir, o el primero
de la secuencia de conversión.
2. Dejar el bit SHP en 1 para no interrumpir el ciclo de captura, y los bits ISSH y SHS en
0.
3. Seleccionar la fuente de reloj del ADC12 con ADC12SSEL x y el divisor del reloj con
ADC12DIV x. Asegurarse que el tiempo de conversión de 12 ciclos de reloj no sea menor
a 375[ns] y tampoco mucho mayor.
4. Elegir el modo de conversión con CONSEQ x.
Seminario de Computadores I, 2004
22
ADC12
Ejemplo: Conversión única, canal único
ADC12MCTL0 a ADC12MCTL15:
1. Para cada registro de conversión que vaya a utilizarse, seleccionar el canal por convertir
con INCH x.
2. Para cada registro de conversión seleccionar cuál será la referencia V+ y V- con SREF x
3. Si se utiliza el modo secuencia de canales, poner el bit EOS en 1 en el último registro a
convertir.
Al terminar la configuración:
1. Encender el conversor poniendo en 1 el bit ADCON del registro ADC12CTL0
2. Habilitar las conversiones poniendo en 1 el bit ENC del registro ADC12CTL0, bloqueando ası́ la modificación de los bits de configuración de los registros de control
ADC12CTL0, ADC12CTL1 y ADC12MCTL0 a ADC12MCTL15.
Para iniciar la conversión, poner en 1 el bit ADC12SC del registro ADC12MCTL0.
4.2
Programa de ejemplo Conversión única, canal único.
Sólo se convertirá un único canal una única vez. El registro seleccionado para hacer la
conversión es el ADC12MCLT0, por lo tanto el resultado se obtiene en el registro ADC12MEM0.
En esta ocasión, se ha configurado de antemano la referencia de voltaje para el canal a
convertir, que es el voltaje de alimentación V+ = 3.6[V] y V- = 0[V]. La rutina de conversión sólo
elige qué canal convertir, no pudiendo modificarse la referencia de voltaje. La rutina de conversión
inicia y espera a que termine el ciclo de la conversión, retornando el resultado obtenido.
Rutina de inicialización:
void ADC INIT SIMPLE(void)
{
P6SEL |= 0x00FF; //8 lsb Puerto 6 para conversor ADC12
P6DIR &= 0xFF00; //8 lsb Puerto 6 como entradas (análogas)
ADC12CTL0 &= ~ENC; //deshabilita conversion
ADC12CTL0 = SHT1 15 | SHT0 15 | ADC12ON;
ADC12CTL1 = CSTARTADD 0 | SHS 0 | SHP | ADC12DIV 7 | ADC12SSEL 2 | CONSEQ 0;
ADC12MCTL0 = SREF 0;
ADC12IE = 0x00; //Deshabilitadas las interrupciones (bits
ADC12IEx) para todos los ADC12MCTLx
ADC12CTL0 |= ENC; // habilita conversión
}
Seminario de Computadores I, 2004
23
ADC12
Ejemplo: Conversión única, secuencia de canales
Rutina de conversión. Se llama con el argumento del canal a convertir.
int conversion(int CANAL)
{
ADC12CTL0 &= ~ENC; //deshabilita conversion para realizar cambios
ADC12MCTL0 &= 0xFFF0; //borra INCHx
ADC12MCTL0 |= (CANAL & 0x0F); //Selecciona el canal a convertir
ADC12CTL0 |= ENC; //habilita conversión
ADC12CTL0 |= ADC12SC; //inicia conversión
while (ADC12CTL0 & ADC12SC); //espera término
de la conversión, o sea espera que bit ADC12SC = 0
return ADC12MEM0;
}
4.3
Programa de ejemplo Conversión única, secuencia de canales.
Función de inicialización para secuencia de 4 conversiones utilizando los registros ADC12MCTL0
a ADC12MCTL3, cada conversión es generada apenas termina la conversión anterior. El resultado de las conversiones se guardan en variables globales llamadas ResultadoADC[0] a ResultadoADC[3].
Las diferencias con la inicialización de la conversión de un único canal se muestran en rojo.
void ADC INIT SEQ(void)
{
P6SEL |= 0x00FF;
P6DIR &= 0xFF00;
ADC12CTL0 &= ~ENC; //Para poder hacer cambios en los registros
ADC12CTL0 = SHT1 15 | SHT0 15 | ADC12ON | MSC;
//MSC =1 => Cada conversión se realiza apenas la anterior haya terminado
ADC12CTL1 = CSTARTADD 0 | SHS 0 | SHP | ADC12DIV 7 | ADC12SSEL 2 | CONSEQ 1;
//CONSEQx = 1 => MODO DEL ADC12: Secuencia de canales.
ADC12MCTL0 = SREF 0;
ADC12MCTL1 = SREF 0;
ADC12MCTL2 = SREF 0;
ADC12MCTL3 = SREF 0 | EOS;// último canal de la secuencia
ADC12IE = 0x00;
ADC12CTL0 |= ENC; // habilita conversión
}
Seminario de Computadores I, 2004
24
ADC12
Ejemplo: Conversión única, secuencia de canales
Función de conversión. Se llama con argumento de los cuatro canales por convertir. Los
canales pueden estar en cualquier orden deseado y pueden repetirse.
void CONV ADC SEQ(int CH1,CH2,CH3,CH4)
{
ADC12CTL0 &= ~ENC;
ADC12MCTL0 &= 0xFFF0; //Se limpia canal anterior
ADC12MCTL1 &= 0xFFF0; //Se limpia canal anterior
ADC12MCTL2 &= 0xFFF0; //Se limpia canal anterior
ADC12MCTL3 &= 0xFFF0; //Se limpia canal anterior
ADC12MCTL0 |= (CH1 & 0x0F);//Selecciona 1er canal a convertir
ADC12MCTL1 |= (CH2 & 0x0F);//Selecciona 2do canal
ADC12MCTL2 |= (CD3 & 0x0F);//Selecciona 3er canal
ADC12MCTL3 |= (CH4 & 0x0F);//Selecciona 4to canal
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;
while (ADC12CTL0 & ADC12SC);
ResultadoADC[0]=ADC12MEM0; //Los resultados de la conversión
ResultadoADC[1]=ADC12MEM1; //se almacenan en variables
ResultadoADC[2]=ADC12MEM2; // globales
ResultadoADC[3]=ADC12MEM3;
}
Seminario de Computadores I, 2004
25
Descargar