Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Adc12 PDF
Adc12 PDF
ADC12
Conversor An
alogo Digital de 12 bits
Francisco Blancaire
Eduardo Gonzalez
Michael Kusch
Diego Valencia
ADC12 INDICE GENERAL
Indice General
1 Introducci
on 3
1.1 Caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Diagrama de bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Requerimientos para la operacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 conversion . . . . . . . . . . . . . . . . . . . . . . 6
1.3.5 Consideraciones del tiempo de captura . . . . . . . . . . . . . . . . . . . . 8
2 Registros 9
2.1 Registros de configuracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 ADC12CTL0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2 ADC12CTL1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Registros de almacenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 ADC12MEMx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Registros de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.1 ADC12MCTLx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Registros de interrupcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.1 ADC12IFG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.2 ADC12IE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.3 ADC12IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 Funcionamiento 16
3.1 Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.1 Memoria de Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.2 Modos de Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.3 Sensor integrado de temperatura . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.1 Interrupciones del ADC12 . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.2 Vector Generador de Interrupciones, ADC12IV . . . . . . . . . . . . . . . 21
4 Ejemplo de implementaci
on 22
4.1 Proceso de Inicializacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2 Ejemplo: Conversion u
nica, canal u
nico . . . . . . . . . . . . . . . . . . . . . . . 23
4.3 Ejemplo: Conversion u
nica, secuencia de canales . . . . . . . . . . . . . . . . . . 24
1 Introducci
on
En este documento se detalla la configuracion y funcionamiento del modulo ADC12, que es
un conversor analogo digital de 12 bits que trae incorporado el microcontrolador MSP430F149.
Su funcion es convertir voltajes analogicos que se introducen por distintas entradas dispo-
nibles a palabras binarias de 12 bits. Esto lo realiza utilizando recursos propios de modulo, es
decir sin interferir en el procesamiento principal del microcontrolador. En los microcontrolado-
res con DMA se puede utilizar esta propiedad para tener una conversion fluida y continua sin
interrumpir ning un otro proceso.
1.1 Caractersticas
Conversion de 12 bits.
Tasa de muestreo programable, con una maxima de 200k Muestras por segundo.
4 modos de adquisicion.
Se muestran a continuacion las opciones basicas que deben configurarse para utilizar el
ADC. Cada seccion muestra su parte en el diagrama de bloques para tener una idea del flujo de
las se
nales.
Se utiliza solo un reloj para la conversion y para generar el perodo de muestreo. Con
ADC12SSEL se efect ua la seleccion de este reloj. Las fuentes posibles de reloj son: SMCLK,
MCLK, ACLK, ADC12OSC.
EL ADC12OSC es un oscilador interno del modulo de 5[M hz], pero vara seg
un microcon-
trolador, voltaje de alimentacion y temperatura.
Existe ademas la posibilidad de dividir el reloj de 1 a 8 configurando los bits ADC12DIVx.
1.3.2 Canales
Existen varias fuentes disponibles para los voltajes de referencia que ocupa el conversor.
Existe la opcion de utilizar voltajes de referencia internos del modulo, que pueden ser 1.5 o
2.5 [V]. Se puede utilizar tambien un voltaje de referencia externa que se aplica al pin V eREF +
Bit ADC12SC.
La polaridad de esta se
nal puede ser invertida utilizando el bit ISSH.
La senal SAMPCON controla el perodo de muestreo y el comienzo de la conversion. Mien-
tras esta este alta, esta activo el proceso de captura. En el canto de bajada de SAMPCON se
comienza la conversion que dura 13 cantos del reloj (ADC12CLK).
Vi =Voltaje en el pin.
Vs =Voltaje de la fuente analoga por muestrear.
Rs =Resistencia externa de la fuente analoga.
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 relacion entre el tiempo de captura y estas variables responde al tiempo de carga del
condensador:
2 Registros
Los registros del Conversor Analogo-Digital se pueden catalogar de la siguiente manera:
dos registros de configuracion, tres para el manejo de interrupciones, dieciseis para el control de
conversion y otros dieciseis para almacenar los resultados de la conversion.
00 ADC12OSC 10 MCLK
01 ACLK 11 SMCLK
Para dividir la frecuencia del reloj elegido, en caso que sea necesario, es posible ajustar los
bits de ADC12DIVx. La configuracion de estos bits es la siguiente:
Es importante tener en cuenta que para modificar los campos anteriores se debe tener el
bit ENC en cero.
Para elegir el modo de conversion se deben ajustar los bits del campo CONSEQx de la
siguiente manera:
00
Unico canal 10 Repetir u
nico canal
01 Secuencia de canales 11 Repetir secuencia de canales
El u
ltimo bit de este registro, el ADC12BUSY, indica si el conversor esta ocupado realizando
una conversion.
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 estan 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
El campo SREFx se emplea para seleccionar los voltajes de referencia. El resultado que se
obtiene luego de una conversion esta dado por:
VIN VR
NADC = 4095
VR+ VR
En este campo se eligen los VR+ y VR a utilizar, seg
un la siguiente tabla.
SREFx VR+ VR
000 AVCC AVSS
001 VREF + AVSS
010 V eREF + AVSS
011 V eREF + AVSS
100 AVCC VREF /V eREF
101 VREF + VREF /V eREF
110 V eREF + VREF /V eREF
111 V eREF + VREF /V eREF
Habilita las interrupciones provocadas por ADC12IFG. Esto se puede hacer de manera
especfica, habilitando las interrupciones para algunos ADC12IFG, manteniendo las demas des-
habilitadas. Cada vez que se levante una bandera en ADC12IFG, se comprueba si esta habilitada
la mascara de interrupcion correspondiente. Si es as se generara una interrupcion, en caso con-
trario nada pasa.
Este registro se utiliza para combinar y priorizar las interrupciones del conversor analogo
digital. Una vez que el ADC ha producido una interrupcion, en vez de estar comprobando una
a una las banderas de ADC12IFG, basta con leer este registro para saber que canal produjo la
interrupcion. En este registro solo esta el campo ADC12IVx, y el resto son ceros.
Ademas de las banderas que se generan por almacenar el resultado de una conversion, en
este registro estan las banderas de timeoverflow y conversion memory overflow.
Los valores que puede tomar ADC12IV, estan en la siguiente tabla ordenados de mayor
prioridad a menor prioridad.
prioridad, est
a ultima sobreescribe el valor de ADC12IV ya que tiene mayor prioridad. En cambio,
si posteriormente llega otra con menor prioridad, no se produce ning un cambio.
Una vez atendida la interrupcion de mayor prioridad, si existen otras de menor prioridad
pendiente, ADC12IV tomara el valor de la interrupcion que le sigue en prioridad. Esto quiere
decir que las interrupciones de menor prioridad que han sido sobreescritas no se pierden, solo se
posponen.
3 Funcionamiento
3.1 Conversi
on
CONSEQx
00 Canal u
nico, u
nica conversion : Un unico canal es convertido una sola vez
01 Secuencia de canales : Una secuencia de canales es convertida una sola
vez
10 Repeticion de canal u
nico : Un unico canal es convertido repetidas veces
11 Repeticion Secuencia de cana- : Una secuencia de canales en convertida repetidas
les veces
A. Canal u
nico, u
nica conversi
on (00)
Un u
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
on.
La siguiente Figura muestra el diagrama de flujo del modo Canal u
nico, u
nica conversion.
C. Repetici
on de canal u
nico (10)
Un u
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
on.
Es necesario leer el resultado despues que se ha terminado la conversion, debido a que s olo
un registro de memoria es usado y se sobrescribira este despues de la siguiente conversion
La siguiente Figura muestra el diagrama de flujo del modo Repeticion de canal u
nico.
D. Repetici
on Secuencia de canales (11)
Una secuencia de canales en convertida repetidas veces. Los resultados son guardados en
la memoria de conversion 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 repeticion 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
on.
La siguiente Figura muestra el diagrama de flujo del modo Repeticion Secuencia de canales.
C
omo parar las conversiones
Parar el ADC12 depende del modo de operacion que se este usando. Las vas recomendadas
para parar una conversion activa son las siguientes:
Modo (00): Resetear el bit ENC terminara inmediatamente la conversion, lo que implicara
que el resultado de la conversion no sera confiable.
Modo (10): La conversion es detenida poniendo a ENC en 0 lo que hace terminar la con-
version al final del ciclo de conversion.
Modo (11): Las sucesivas conversiones terminan cuando ENC es igual a 0 lo que hace
terminar la conversion al final de la secuencia.
Para usar el sensor integrado de temperatura se debe seleccionar la entrada analoga INCHx =
1010. Este canal es usado como cualquier otro.
Para usar el sensor de temperatura el perodo de muestreo debe ser mayor que 30[s] y se
debe considerar que el offset vara mucho entre un procesador y otro.
La temperatura se encuentra relacionada con el voltaje de entrada mediante la siguiente
ecuacion(con valores nominales),
3.2 Interrupciones
3.2.1 Interrupciones del ADC12
ADC12TOV, ADC12 conversion time overflow: esta ocurre cuando otra peticion de con-
version es requerida antes que la conversion actual halla terminado.
En este registro todas las interrupciones son priorizadas y combinadas en un u nico vector de
interrupciones. Este vector es usado para poder identificar cual de las interrupciones ha ocurrido,
sin necesidad de revisar cada una de las banderas de interrupcion.
Las interrupciones ADC12TOV y ADC12OV son reseteadas automaticamente con cualquier
acceso a este registro. Las interrupciones originadas por ADC12IFGx son reseteadas una vez que
se hayan ledo los datos de los registros de memoria ADC12MEMx correspondiente.
En el caso que una interrupcion quede pendiente despues de un servicio de interrupcion, se
generara otra interrupcion que sera atendida posteriormente.
4 Ejemplo de implementaci
on
4.1 Proceso de Inicializaci
on
Seleccionar los pines del puerto 6 que van a utilizarse como canales analogos y configurarlos
como entradas (P6DIR=0) y uso por perifericos (P6SEL=1).
Luego debe deshabilitarse el bit ENC del registro ADC12CTL0. Esto es necesario para
poder modificar los registros de configuracion del ADC12.
ADC12CTL0:
1. Configurar el tiempo de captura para los canales internos con SHT1 xx y para los canales
externos con SHT0 xx.
ADC12CTL1:
1. Seleccionar el primer registro a convertir con CSTARTADD x. Con esto elegimos cual de
los registros ADC12MCTL0 a ADC12MCTL15 sera el registro a convertir, o el primero
de la secuencia de conversion.
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 conversion de 12 ciclos de reloj no sea menor
a 375[ns] y tampoco mucho mayor.
ADC12MCTL0 a ADC12MCTL15:
1. Para cada registro de conversion que vaya a utilizarse, seleccionar el canal por convertir
con INCH x.
2. Para cada registro de conversion seleccionar cual sera la referencia V+ y V- con SREF x
Al terminar la configuraci
on:
2. Habilitar las conversiones poniendo en 1 el bit ENC del registro ADC12CTL0, blo-
queando as la modificacion de los bits de configuracion de los registros de control
ADC12CTL0, ADC12CTL1 y ADC12MCTL0 a ADC12MCTL15.
Rutina de inicializacion:
void ADC INIT SIMPLE(void)
{
P6SEL |= 0x00FF; //8 lsb Puerto 6 para conversor ADC12
P6DIR &= 0xFF00; //8 lsb Puerto 6 como entradas (analogas)
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 on
}
Funcion de conversion. 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 on
ResultadoADC[1]=ADC12MEM1; //se almacenan en variables
ResultadoADC[2]=ADC12MEM2; // globales
ResultadoADC[3]=ADC12MEM3;
}