Вы находитесь на странице: 1из 25

INICIO

QUIENES SOMOS

NOTICIAS

IMPORTACIONES

CURSOS

TUTORIALES

SERVICIOS

CONTACTO

Search

XC8

LPC1768 CON RTOS

MSP430

MSP430 EN VIVO

ANSI C

ROBOTICA

PIC18F

Tutorial MSP430 ADC10 Conversor Analogico Digital de 10 Bits


mayo 7, 2013

MSP430, TUTORIALES

PIC18F EN VIVO

MODULOS

CURSO MICROCONTROLADORES

14 Comments

Despus de un par de meses sin postear vamos a continuar con el tutorial del Conversor Anlogo Digital
de 10 Bits que tienen los microcontroladores MSP430, conocido como ADC10. EL ADC10 del
MSP430F2132 es un mdulo muy simplificado, prctico y fcil de usar, siempre que entiendan bien cmo
funciona, pues tiene 4 modos de trabajo o modos de conversin bien definidos con los cuales podemos
armar diversas aplicaciones. Me gustara mencionar que el mdulo ADC10 (conversor analgico de 10 bits
de aproximacin suscesiva) no es el nico mdulo analgico digital presente en los MSP430xxx, existen
tambin el ADC12 (conversor analgico de 12 bits de aproximacin suscesiva), el SD16_A (conversor
analgico de 16 bits sigma-delta) y el SD24_A (conversor analgico multicanal de 24 bits sigma delta),
todos ellos en conjunto le dan el nombre de Mixed Signal Processor (MSP) a esta familia de
microcontroladores.

Tenemos cursos todos los meses de PIC

RECIENTES
Contenido del Curso de PIC Nivel I
Inicio 05 de Marzo 2016
LENGUAJE C CON XC8 TEMA 4
TIPO DE CONSTANTES LITERALES
DEFINIDAS ENUMERADAS
DECLARADAS
LENGUAJE C CON XC8 TEMA 3
TIPO DE DATOS CON COMA
FLOTANTE
LENGUAJE C CON XC8 TEMA 2
TIPO DE DATOS PARA NUMEROS
ENTEROS
LENGUAJE C CON XC8 TEMA 1
INSTALACION MPLABX Y XC8

ARCHIVOS
febrero 2016
mayo 2015
abril 2015
marzo 2015
febrero 2015
diciembre 2013
octubre 2013
septiembre 2013
agosto 2013
Elementos del ADC10 en el MSP430F2132
Naturalmente no voy a explicar cmo funciona un ADC, de eso existe abundante informacin en la red. Lo
que nos importa en realidad es comenzar por tener en claro como est constituido el mdulo ADC10, por
ejemplo tenemos las entradas analgicas o analog inputs (10 canales desde el A0 hasta el A7, Vmid y
Vtemp), las referencias internas (VCC, VSS, 2.5V, 1.5V), las referencias externas (VeREF+ y
VeREF-), mientras que en la etapa funcional tenemos un clock source (ADC10OSC, ACLK,
MCLK,SMCLK) & divisor (ADC10DIV), conversion triggers (ADC10SC, TA0, TA1, TA2) & modes
(conversin de un solo canal, conversin de una secuencia de canales, conversin repetitiva de un solo

julio 2013
junio 2013
mayo 2013
abril 2013

CATEGORIAS
ANSI C
converted by Web2PDFConvert.com

canal, conversin repetitiva de una secuencia de canales), un buffer donde se almacena el resultado de la
conversin ADC10MEM, y un controlador de transferencia de datos para cargar automticamente el
contenido del buffer ADC10MEM en posiciones de memoria dentro del microcontrolador.

CURSOS

Grficamente podemos agrupar las etapas de la siguiente manera:

LPC1768

INDICES

MEKIT
MODULOS
MSP430
MSP430 EN VIVO
NOTICIAS
PIC18F
PIC18F EN VIVO
ROBOTICA
RTOS
TUTORIALES
Uncategorized
XC8

ETIQUETAS
18f2525 18f4550 ansi block Boot

c c18 code Cortex


hardware henry IAR III
Bootloader

instruments interrupcion Keil

laredo LCD led


lenguaje LPC1768 M3
kernel

microchip
microcontrolador

microembebidos
modulo mplab

Toda la informacin la pueden encontrar en el MSP430F2xxx Family User Guide.pdf

msp430 NXP pic

proteus real simulacion


software system teoria texas
tutorial UART USB video
xc8

youtube

META
Acceder
RSS de las entradas
RSS de los comentarios
WordPress.org

SUSCRBETE POR EMAIL


A continuacin comentaremos un poco acerca de cada etapa del ADC10 de los MSP430.

Introduce tu correo electrnico para


suscribirte a este blog y recibir
notificaciones de nuevas entradas.
nete a otros 56 suscriptores

Analog Inputs
Direccin de email
En el esquema general del ADC10 podemos ubicar los Analog Inputs en los cuadros con rojo de la figura
de abajo. Observen que son 3 cuadros rojos. Lo hice as para conocer las sub-etapas que lo conforman.

Subscribir

converted by Web2PDFConvert.com

El microcontrolador que usaremos para la experiencia ser el MSP430F2132. Tiene una serie de entradas
analgicas internas y externas que permiten ser ledas por el mdulo ADC10, y son conocidas como
canales.
Los canales analgicos externos que se conectan va los pines del mismo microcontrolador
MSP430F2132 son los siguientes:

Tambin disponemos de los canales de las referencias externas de voltaje positivo y negativo. La
referencia de voltaje de positivo externa VeREF+ est multiplexada con el pin 20 que corresponde con la
entrada analgica A4, por ello slo una de ellas funciona a la vez. Lo mismo sucede con la referencia de
voltaje negativo externa VeREF- que est multiplexada con el pin 19 que corresponde con la entrada
analgica A3. Sobre cmo seleccionarlos y sus detalles hablaremos despus.
Existen dos canales ms para completar el abanico de opciones, son el voltaje equivalente del sensor de
temperatura interno del ADC10 y el voltaje medio de (VCC VSS)/2.

converted by Web2PDFConvert.com

El sensor de temperatura tiene la siguiente ecuacin para hallar su voltaje equivalente:

Observar que el mximo valor en voltaje que puede entregar el sensor es casi 1.4V, por ello se sugiere
trabajar con una referencia positiva de un voltaje similar a 1.4V, por ejemplo 1.5V (que est disponible
como referencia positiva interna VREF+). Para activarlo tan slo tenemos que seleccionar el canal 10 con
los bits INCHx, luego el tratamiento de la seal as cmo la configuracin de referencias es idntica a la
de cualquier otro canal analgico.
Finalmente, la seleccin de los canales se realiza mediante los bits INCHx que se encuentra en el
registro ADC10CTL1:

La configuracin de los bits INCHx para seleccionar un canal son las siguientes:

converted by Web2PDFConvert.com

Voltajes de referencia : Externas e Interna


En el siguiente grfico se aprecia en cuadros las etapas que constituyen toda la configuracin de los
voltajes de referencia en el ADC10:

Las referencias externas (positiva: VeREF+, negativa: VeREF-) y las referencias internas (positiva:
VREF+, no existe negativa) tienen como finalidad ser el punto de comparacin para el voltaje de entrada a
ser muestreado, es decir son los lmites de los voltajes a medir.
Es muy comn utilizar el VCC del microcontrolador como referencia positiva y el VSS como referencia
negativa, sin embargo el ADC10 de estos microcontroladores nos da la posibilidad de incrementar la
resolucin del voltaje medido manipulando no slo el limite superior (referencia positiva) sino
tambin el lmite inferior (referencia negativa). Mediante estas referencias se construye la ecuacin
para determinar el valor decimal de una conversin de voltaje, dicha ecuacin es la siguiente:

converted by Web2PDFConvert.com

Donde:
Nadc = resultado de la conversin en decimal.
nint( x ) = funcin que obtiene el entero ms cercano de x.
Vin = es el voltaje de entrada del canal seleccionado.
VR+ = voltaje de referencia positivo.
VR- = voltaje de referencia negativo.
Pero qu valores puede adoptar VR+ y VR-?, veamos el siguiente cuadro:

Hablando de las referencias externas, recordar que son provistos a travs de los pines A4 (VeREF+) y
A3 (VeREF-), as mismo debemos conocer que tanto la positiva como la negativa tienen un mximo y un
mnimo que se debe respetar dictado por el datasheet del microcontrolador, el cual indica que el VeREF+
(voltaje de referencia externo positivo) puede estar entre 1,4V y VCC, mientras que el VeREF- (voltaje de
referencia externo negativo) puede estar entre 0V y 1.2V.

Si queremos utilizar un voltaje de referencia externo positivo para VR+ tenemos dos opciones: la seal
VeREF+ o la seal Buffered VeREF+. En la siguiente imagen, de color rojo se puede observar el
recorrido que realiza la seal VeREF+ para llegar a ser configurado como VR+ haciendo SREF1 = 1,
SREF0 = 0, as mismo debemos tener desactivados la referencia interna positiva haciendo: REFON = 0,
REFOUT = 0, puesto que tenerla activada no tendra sentido y sera un consumo de energa innecesario.
De color azul tenemos la seal Buffered VeREF+, la cual contina el trayecto de VeREF+ para llegar a
un multiplexor controlado por SREF1 = 1, SREF0 = 1, cuyo seteo permite ingresar al buffer del ADC10 y
luego configurarse como VR+. Este buffer ser necesario cuando queremos aplicar una seal de
referencia con poca impedancia, dbil y fcil de distorsionar.

converted by Web2PDFConvert.com

Mientras que la referencia externa negativa VeREF-, presente en la imagen inferior y de color azul,
solamente necesita que SREF2=1 para ser configurado como VR-.

Ahora hablemos de las referencias internas. En la imagen inferior se puede apreciar que el
MSP430F2132 cuenta con un voltaje de referencia interno positivo indicado como VREF+ el cual se
activa con el bit REFON. Su recorrido es el de color rojo. En el datasheet lo pueden encontrar como
Positive built-in reference voltage y posee dos niveles de voltage fijos: 2.5 y 1.5, los cuales se
seleccionan mediante el bit REF2_5V y requiere que SREF1 = 0, SREF0 = 1, para ser configurado como
VR+. Esta seal siempre pasa por el buffer del ADC10. Debido a esto tenemos la posibilidad de llevar
esta seal al exterior como lo muestra el recorrido de color azul. Esto se realiza mediante el bit REFOUT
y es multiplexada por el pin 20 (pin anlogo A4/VeREF+/VREF+) del microcontrolador. Sirve para utilizarla
como referencia hacia otras etapas del circuito de nuestra aplicacin que requieran este voltaje de
referencia que cuenta con estabilidad y precisin (debido al buffer del ADC10).

converted by Web2PDFConvert.com

El buffer de referencia que hemos estado mencionando posee dos bits de configuracin: REFBURST y
ADC10SR. Cuando el bit REFBUSRT = 1 permite configurar el buffer en modo BURST que significa que se
activar solamente durante los procesos de muestreo y conversin, despus de este proceso se desactiva
para ahorrar energa y luego se activa otra vez cuando hay un muestreo. Si el bit REFBURST = 0 el buffer
siempre estar activado. Cuando el bit ADC10SR = 1 reduce el consumo del buffer y establece un ratio de
muestreo bajo de ~50sKps, mientras que si ADC10SR = 0 el consumo aumenta y se establece un ratio
mximo de ~200ksps.
Finalmente, una vez que estamos seguros de usar referencias externas, internas o los umbrales del VCC
y VSS, corresponde entonces configurar los bits SREFx del registro ADC10CTL0:

Source Clock & Divisor


Est relacionado directamente con seleccin del reloj de conversin del mdulo ADC10 conocido como el
ADC10CLK. Es muy importante entenderlo porque es utilizado para el reloj de conversin y para generar

converted by Web2PDFConvert.com

el periodo de muestreo de la seal analgica a medir. En esta parte corresponde hablar del reloj de
conversin. Primero veamos donde se ubica dentro del diagrama de bloques del ADC10.

Tal como se puede apreciar, las posibles fuentes de reloj para el ADC10CLK pueden ser el MCLK,
SMCLK, ACLK o el oscilador interno ADC10OSC, y son seleccionados mediante los bits ADC10SSELx.
As mismo se cuenta con un divisor de frequencia de 1 hasta 8 mediante los bits ADC10DIVx.
En el siguiente cuadro podemos observar los rangos de frecuencia que admite el ADC10CLK. En color
rojo tenemos el rango de frecuencias para el ADC10CLK (ya sea que provenga del MCLK, SMCLK, ACLK
o el oscilador interno ADC10OSC) el cual vara segn el bit ADC10SR, pues cuando ADC10SR = 1
pueden ingresar frecuencias desde 0.45MHz hasta 6.3MHz, y cuando ADC10SR = 0 pueden ingresar
frecuencias desde 0.45MHz hasta 1.5MHz. Mientras que en color azul tenemos la frecuencia del oscilador
interno ADC10OSC, el cual puede variar entre 3.7 a 6.3MHz, se estila pensar que corre a 5MHz.

En conlusin, los bits y registros que participan en la configuracin del ADC10CLK son:

converted by Web2PDFConvert.com

Conversion Triggers
Cualquier conversion trigger proporciona el pulso SHI que necesita el modulo ADC10 para iniciar un
proceso de conversin. Veamos el siguiente cuadro para observar los componentes de esta etapa:

Comenzando por el cuadro rojo de ms a la derecha, tenemos los conversion triggers, quienes son
seleccionados mediante los bits SHSx, ellos son:
ADC10SC = es un bit de inicio de conversin por software.
TA1 = es la salida OUT1 del Canal 1 del Timer_A .

converted by Web2PDFConvert.com

TA0 = es la salida OUT0 del Canal 0 del Timer_A .


TA2 = es la salida OUT2 del Canal 2 del Timer_A .
Para que se habilite el trigger de dichas seales se necesita que el bit ENC = 1. Luego mediante el bit
ISSH podemos hacer que la seal SHI sea un flanco de subida y active la conversin, o tambin podemos
cambiar la polaridad del disparo.

Una vez que la seal SHI ingresa al bloque Sample Timer se desarrolla el muestreo de la seal
analgica y cuyo tiempo de muestreo (tsample) es un valor que debemos saber calcular para poder
realizar conversiones precisas y sacarle el jugo al ADC10. Los bits ADC10SHTx definen el valor del
tiempo de muestreo (4xADC10CLK, 8xADC10CLK, 16xADC10CLK, 64xADC10CLK) que el bloque
Sample&Hold utilizar durante el muestreo. Veamos la siguiente imagen:

En esta imagen podemos apreciar claramente el tiempo que toma proceso completo de una conversin
anloga a digital, la cual realmente se inicia con el muestreo de la seal (sampling). El tiempo del
proceso de muestreo viene dado por el tiempo de sincronizacin (tsync) ms el tiempo de
muestreo (tsample). Inmediatamente despus se inicia el proceso de conversin el cual es siempre 13
ciclos del reloj ADC10CLK (anteriomente tratado y configurado).
El tiempo de sincronizacin (tsync) es un ajuste con el flanco de subida del ADC10CLK. El valor que
nos interesa calcular y donde intervienen los bits ADC10SHTx es el tiempo de muestreo (tsample). En
el datasheet existe un circuito equivalente que permite realizar el calculo necesario:

El cual arroja la siguiente ecuacin:

Donde Ri = 2K Ohm y Ci = 27 pF segn el datasheet, entonces reemplazando valores:

converted by Web2PDFConvert.com

Siguiendo el ejemplo del datasheet, si colocamos una resistencia de 10K ohm en Rs, entonces tsample
> 2.47uSeg, lo que significa que el tiempo de muestreo debe ser mayor a 2.47uSeg.
Pero cmo relaciono esto con los bits ADC10SHTx del SampleTimer? Pues es simple, solamente
hacemos:

Si reemplazamos los valores tendremos: 2.47uSeg x 6.36MHz (suponiendo que estamos trabajando con
el oscilador interno ADC10OSC del propio mdulo) = 14.82 ciclos. Lo que se puede interpretar cmo: se
requieren como mnimo 14.82 ciclos del ADC10CLK para la conversin. Entonces nos conviene utilizar el
valor 16 (16 x ADC10CLK) mediante los bits ADC10SHTx del SampleTimer. Saber calcular este dato es
vital para realizar una buena conversin ya que as permitimos que el condensador del ADC10 de
muestreo se carge completamente durante el tiempo suficiente.
Para concluir con el tema del calculo del tsample, se tiene que considerar el caso cuando se utilize una
referencia interna (REFON = 1) en modo BURST (REFBURST = 1), el datasheet indica que debemos de
tener en cuenta que el tsample debe ser mayor que la frmula del circuito equivalente (expuesto arriba) y
tambin mayor que el tREFBURST:

El valor al que se refiere el caso es el tREFBURST tiene un valor constante definido en el datasheet:

Como pueden apreciar son tiempos super cortos (cuando VCC = 3V el tREFBURST es 4.5uSeg), pues en
el modo BURST el buffer se activa solamente durante el proceso de muestreo y conversin donde el
tiempo al que refiere el tREFBURST es el tiempo que toma en activarse y quedar estable, despus para
todo lo dems se mantiene desactivado. As mismo existen variantes de este tiempo para el estado del
bit ADC10SR del buffer de referencia.
Finalmente veamos donde estn ubicados y que representan los bits que componen esta etapa:

converted by Web2PDFConvert.com

Conversion Modes
Esta es la parte ms fcil de explicar, pues en el msp430f2xxx family guide aparecen diagramas de
bloques super explicativos, as que practicamente slo traducir XD.
En la siguiente imagen podemos observar las etapas involucradas en los modos de conversin del mdulo
ADC10.

Existen 4 modos de conversin determinados por los bits CONSEQx, ellos son:

converted by Web2PDFConvert.com

Como recordaran el estado inicial de los registros en el MSP430 es cero (0), entonces si estuvieramos
procediendo con la conversin de un canal analgico, por defecto el modo de conversin sera cuando
CONSEQx = 00, es decir el modo conversin individual de un canal, el que est en amarillo sombreado.
A continuacin haremos comentarios utilizando los diagramas de bloques del msp430f2xxx family guide
para los cuatro modos de conversin:
El primer modo conversin individual de un canal (Single Channel Single-Conversion) se configura
haciendo CONSEQx = 00, donde la conversin se realiza de la siguiente manera: cuando se activa el
mdulo ADC10 haciendo ADC10ON = 1, el ADC10 se mantiene esperando la habilitacin de la conversin
(ENC = flanco de subida) mientras apunta al canal seleccionado por INCHx, cuando hay flanco de subida
en ENC, el ADC10 espera del trigger para iniciar la conversin, tambin puede iniciar directamente usando
el bit ADC10SC (flanco de subida), por ambos caminos se llega a la etapa Sample Input Channel y luego
del tsync + tsample llega a la etapa Convert que dura 12 ciclos del ADC10CLK ms 1 ciclo cuando
termina la conversin (total 13 ciclos) y el resultado de la conversin se muestra en el buffer ADC10MEM.
Luego se debe polear el bit ADC10BUSY para estar seguros de aplicarle un flanco de bajada al bit ENC e
iniciar otra conversin. Fijense que colocar un 0 en el bit ENC antes de llegar al final, termina con el
proceso regresando al principio de este modo de conversin.

El segundo modo de conversin conversin individual de una secuencia de canales (Sequence of


Channels) se configura haciendo CONSEQx = 01, donde la conversin de una secuencia de canales
comienza con el canal seleccionado mediante INCHx hasta llegar al canal A0, y se realiza de la
siguiente manera: cuando se activa el mdulo ADC10 haciendo ADC10ON = 1, el ADC10 se mantiene
esperando la habilitacin de la conversin (ENC = flanco de subida) mientras apunta al canal seleccionado
por INCHx, cuando hay flanco de subida en ENC, el ADC10 queda a la espera del trigger para iniciar la
conversin, tambin puede iniciar directamente usando el bit ADC10SC (flanco de subida), por ambos
caminos se llega a la etapa Sample Input Channel y luego del tsync + tsample llega a la etapa Convert
que dura 12 ciclos del ADC10CLK ms 1 ciclo cuando termina la conversin (total 13 ciclos) y el
resultado de la conversin se muestra en el buffer ADC10MEM. Luego lo que contina depende del bit
converted by Web2PDFConvert.com

MSC (multi sample & conversion) donde, si MSC = 1 (rama izquierda) significa que el primer flanco de
subida de la seal SHI bastar continuar haciendo las dems conversiones sin necesidad de esperar ms
triggers para todas las conversiones de la secuencia (desde INCHx hasta A0), mientras que si MSC = 0
(rama derecha) cada conversion de la secuencia necesitar de un flanco de subida de la seal SHI (ya
sea manual con el ADC10SC o esperando los timers del TA1). Cuando se llega a convertir el voltaje del
canal A0 termina el flujo y se vuelve al principio. Poner a cero el bit ENC durante el proceso de secuencias
simplemente detiene la conversin al final de la secuencia.

El tercer modo conversin repetitiva de un canal (Repeat Single Channel) que permite repetir de forma
automtica la conversin de un canal analgico, se configura haciendo CONSEQx = 10, donde la
conversin se realiza de la siguiente manera: cuando se activa el mdulo ADC10 haciendo ADC10ON = 1,
el ADC10 se mantiene esperando la habilitacin de la conversin (ENC = flanco de subida) mientras
apunta al canal seleccionado por INCHx, cuando hay flanco de subida en ENC, el ADC10 espera del
trigger para iniciar la conversin, tambin puede iniciar directamente usando el bit ADC10SC (flanco de
subida), por ambos caminos se llega a la etapa Sample Input Channel y luego del tsync + tsample llega a
la etapa Convert que dura 12 ciclos del ADC10CLK ms 1 ciclo cuando termina la conversin (total 13
ciclos) y el resultado de la conversin se muestra en el buffer ADC10MEM. Luego lo que contina
depende del bit MSC (multi sample & conversion) donde, si MSC = 1 (rama izquierda) significa que el
primer flanco de subida de la seal SHI bastar continuar haciendo conversiones del mismo canal sin
necesidad de esperar otros triggers, mientras que si MSC = 0 (rama derecha) cada conversion de la
secuencia necesitar de un flanco de subida de la seal SHI (ya sea manual con el ADC10SC o
esperando los timers del TA1). Poner a cero el bit ENC durante el proceso simplemente detiene la
conversin al final de la conversin y retorna el proceso al principio del flujo.

converted by Web2PDFConvert.com

El cuarto modo de conversin conversin repetitiva de una secuencia de canales (Repeat Sequence of
Channels) muestrea y convierte de forma repetitiva una secuencia de canales, la cual se configura
haciendo CONSEQx = 11, donde la conversin de una secuencia de canales comienza con el canal
seleccionado mediante INCHx hasta llegar al canal A0, y se realiza de la siguiente manera: cuando se
activa el mdulo ADC10 haciendo ADC10ON = 1, el ADC10 se mantiene esperando la habilitacin de la
conversin (ENC = flanco de subida) mientras apunta al canal seleccionado por INCHx, cuando hay flanco
de subida en ENC, el ADC10 queda a la espera del trigger para iniciar la conversin, tambin puede iniciar
directamente usando el bit ADC10SC (flanco de subida), por ambos caminos se llega a la etapa Sample
Input Channel y luego del tsync + tsample llega a la etapa Convert que dura 12 ciclos del ADC10CLK ms
1 ciclo cuando termina la conversin (total 13 ciclos) y el resultado de la conversin se muestra en el
buffer ADC10MEM. Luego lo que contina depende del bit MSC (multi sample & conversion) donde, si
MSC = 1 (rama izquierda) significa que el primer flanco de subida de la seal SHI bastar continuar
haciendo las dems conversiones sin necesidad de esperar ms triggers para todas las conversiones de
la secuencia (desde INCHx hasta A0, y vuelve a comenzar de INCHx), mientras que si MSC = 0 (rama
derecha) cada conversion de la secuencia necesitar de un flanco de subida de la seal SHI (ya sea
manual con el ADC10SC o esperando los timers del TA1). Cuando se llega a convertir el voltaje del canal
A0, vuelve a comenzar de INCHx. Poner a cero el bit ENC durante el proceso de secuencias
simplemente detiene la conversin al final de la secuencia reiniciando todo.

converted by Web2PDFConvert.com

Para cerrar con los modos de conversin, a continuacin presentamos los bits y registros involucrados en
la configuracin de esta etapa:

Data Transfer Controller


converted by Web2PDFConvert.com

Esta funcionalidad del ADC10 me recuerda al DMA (Direct Memory Access) presente en muchos micros.
Consiste en llevar el resultado de una conversin alojado en el buffer de salida ADC10MEM, hacia alguna
posicion de memoria dentro del chip MSP430. Y lo puede hacer de dos formas: ONE BLOCK TRANSFER
y TWO BLOCK TRANSFER.
En el modo de transferencia ONE BLOCK TRANSFER, podemos almacenar n resultados de
conversiones analgicas cuando son cargadas en el registro ADC10MEM a partir de una direccin en la
memoria de datos que tenemos que especificar. Dicho almacenamiento puede ser contnuo (una vez que
termina de almacenar los n resultados, vuelve a cargarlos) o esperar a que lo reiniciemos escribiendo la
direccin donde sern guardados los n datos otra vez.
Este modo se selecciona haciendo el bit ADC10TB = 0. El nmero n se especifica en el registro de 8
bits ADC10DTC1, por lo cual mientras sea igual a 0 (cero) no comienza la transferencia, y puede variar
desde 1 hasta 255. Luego nos pedir que ingresemos la direccin inicio en el registro ADC10SA que es
una direccin de la memoria de datos. A partir de ahi realizar las n transferencias tras verificar que el
registro ADC10MEM contenga el valor de una nueva conversin analgica y al final nos avisa haciendo
ADC10IFG = 1. Luego continuar realizando ms transferencias siempre y cuando est en 1 (uno) el bit
ADC10CT. De lo contrario esperar a que escribamos otra vez una direccin de memoria en el registro
ADC10SA.

El modo de transferencia TWO BLOCK TRANSFER trabaja de una forma similar al anterior. Te permite
tener dos bloques de transferencia para que trabajes en uno mientras el otro bloque se va cargando. Son
dos bloques de tamao n. Las direcciones del primer bloque incian en la direccin puesta en ADC10SA.
Luego de n transferencias la siguiente posicin ser ADC10SA + n, y despus se reinicia desde
ADC10SA.

converted by Web2PDFConvert.com

Para seleccionar este modo se configura el bit ADC10TB = 1. El nmero n se especifica en el registro de
8 bits ADC10DTC1, por lo cual mientras sea igual a 0 (cero) no comienza la transferencia, as mismo
debemos resetear el bit ADC10B1 = 0 para especificar que comenzaremos con el bloque 1 de
transferencia. Luego nos pedir que ingresemos la direccin inicio en el registro ADC10SA que es una
direccin de la memoria de datos. A partir de ahi realizar las n transferencias del primer bloque tras
verificar que el registro ADC10MEM contenga el valor de una nueva conversin analgica y al final nos
avisa haciendo ADC10IFG = 1. En este punto tambin podemos consultar por el bit ADC10B1 pues se
setear a 1 (uno) para indicar que corresponde el bloque 2 . Luego continuar realizando el siguiente
bloque de transferencias siempre y cuando est en 1 (uno) el bit ADC10CT. De lo contrario esperar a que
escribamos otra vez una direccin de memoria en el registro ADC10SA.

Los bits y registros de los modos de transferencia son:

converted by Web2PDFConvert.com

Programa de Aplicacin
El programa de ejemplo es super sencillo, lo quise hacer as para poder asimilar mejor todo lo estudiado
en la parte terica de nuestro tutorial. Me estoy guardando un ejemplo ms interesante con el ADC10 para
el siguiente tutorial en el cual se enviarn las conversiones va comunicacin serial a la PC. El ejemplo
consiste en un potenciometro conectado a un pin analgico cuyo valor es ledo y convertido mostrandolo
en la LCD2x16, adems tiene un led el cual se prender cuando supere la mitad del voltaje (aprox mayor a
1.66), espero les guste y sobretodo le saquen provecho.

converted by Web2PDFConvert.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

#include "io430.h"
#include "intrinsics.h"
#include <lcd2x16.h>
int main( void )
{
unsigned char titulo[16] = " microembebidos ";
unsigned char datos[4];
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ADC10CTL0 = SREF_2 + ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
ADC10AE0 |= BIT0+BIT4;
// P2.0 ADC option select
P1DIR |= 0x01;

// Set P1.0 to output direction

LcdInit();
LcdStringXY(titulo,16,1,1);
for (;;)
{
ADC10CTL0 |= ENC + ADC10SC;

// Sampling and conversion start

__low_power_mode_0();//__bis_SR_register(CPUOFF + GIE);// LPM0, ADC10_ISR will force exit


if (ADC10MEM < 0x1FF){
P1OUT &= ~0x01;
} else {
P1OUT |= 0x01;
}

// Clear P1.0 LED off


// Set P1.0 LED on

datos[0] = ADC10MEM/1000;
datos[1] = (ADC10MEM - (datos[0]*1000))/100;
datos[2] = (ADC10MEM - (datos[0]*1000 + datos[1]*100))/10;
datos[3] = (ADC10MEM - (datos[0]*1000 + datos[1]*100 + datos[2]*10));
datos[0] |= 0x30;
datos[1] |= 0x30;
datos[2] |= 0x30;
datos[3] |= 0x30;
//void LcdStringXY(unsigned char *dato, char longitud, char x, char y);
LcdStringXY(datos,4,1,2);
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__low_power_mode_off_on_exit();//__bic_SR_register_on_exit(CPUOFF);
}

// Clear CPUOFF bit from 0(SR)

Videos

Archivos
4Shared
Boxnet
Estos nuevos enlaces estn compilados con la versin del software IAR 5.40 :
4Shared

converted by Web2PDFConvert.com

Boxnet
Henry Laredo Q.

Comprtelo:

Facebook 36

Google

Correo electrnico

Imprimir

ADC10, ADC10BUSY, ADC10CTL0, ADC10CTL1, ADC10DF, ADC10DIV, ADC10DTC0, ADC10DTC1, ADC10IE,


ADC10IFG, ADC10ON, ADC10SA, ADC10SC, ADC10SHT, ADC10SR, ADC10SSEL, analog inputs, analogo, c,
clock, clock source, CONSEQ, conversor, conversor anlogo digital, digital, divisor, ENC, henry, IAR, INCH,
instruments, ISSH, laredo, microcontroladores, modes, MSC, msp430, msp430f2132, proteus, REF2_5V,
REFBURST, referencia, REFON, REFOUT, SHS, signal processor, simulacion, SOURCE, SREF, teoria, texas,
transfer, trigger, tutorial, video, Vmid, voltaje, VREF+, Vtemp, youtube

14 Responses to Tutorial MSP430 ADC10 Conversor


Analogico Digital de 10 Bits
David dice:
mayo 9, 2013 a las 11:11 am

Hola ya tengo un poco mas claro el proceso de cada modo de conversion y he hecho mas ejercicios pero
si yo quiero hacer 20 muestras por el canal 1 y luego 20 muestras por el canal 0 y mostrarlos por aparte
en la LCD eso se puede hacer con CONSEQ_2 o con CONSEQ_3 puedo tomar 20 muestras de el canal 1
y luego otras 20 muestras por el canal 0 ?
Responder

Henry Laredo dice:


mayo 9, 2013 a las 9:29 pm

hola David!!! antes que nada disculpa por traerte hasta por aca jejej pero no pude rescatar los
comentarios, bueno igual ya sabes que por aca tambin podemos continuar dandole a este tema.
Me inclino por usar el CONSEQ_2, ya que puedes activarlo para el canal0 y con un contador
puedes verificar si realiz 20 conversiones, luego de detienes la conversion automatica, cambias de
canal y reinicias para el otro canal. Saludos!!!
Responder

David dice:
mayo 9, 2013 a las 11:15 pm

ok oy a probar y te digo al igual he realizado algunos codigos y maana los voy a probar para detener la
conversion automatica es con adc10ctl0 &=~ENC; e iniciar por el otro canal simplemente cambio el inchx
de todas maneras tengo unos codigos que en ni busqueda yo encontre mas tarde te los paso para que los
mires
Responder

Henry Laredo dice:


mayo 10, 2013 a las 7:22 am

excelente, a darle duro a las pruebas!


Responder
converted by Web2PDFConvert.com

David dice:
mayo 11, 2013 a las 2:38 pm

Oye que pena yo puedo reemplazar esta instruccion de while ( ADC10CTL1 & ADC10BUSY );
por _delay_cycles(20) aproximadamente 20 microsegundos mientras hace muestreo y conversion el
ADC?
Gracias
Responder

Henry Laredo dice:


mayo 12, 2013 a las 8:42 am

Claro que si, pero asegurate despues de ese delay que las banderas busy esten en cero, ya que
ellas te indican si el ADC10 est listo para otra conversin. Saludos!!!!
Responder

David dice:
mayo 12, 2013 a las 12:21 pm

Oye que pena otra pregunta en el modo de single channel CONSEQ_0 yo estoy haciendo dos
conversiones una despues de otra pero no sale bien te envio el codigo para que lo revises porfavor porque
al principio de cada conversion le pongo ADC10CTL0 = ~ENC pero no hace bie la conversion es como si
se confundiera pero si le quito esa instruccion solo hace una sola conversion gracias por tu ayuda!
Responder

Henry Laredo dice:


mayo 13, 2013 a las 1:02 am

ok mandalo con su simulacion con proteus.


Responder

David dice:
mayo 14, 2013 a las 10:47 am

Oye muchas gracias por tus consejos y apoyo ademas del blog porque yo queria leer dos canales
analogos pero en modo CONSEQ_0 y ya lo logre el problema era de los retardos que yo estaba
colocando y ya no se pierde el micro muchas gracias y voy a seguir con este micro y con el gran blog que
es de gran ayuda!!
Responder

Henry Laredo dice:


mayo 15, 2013 a las 8:32 am

Hola David, que buena onda que te llego a funcionar, ojala que todo te siga yendo bien. Saludos!
Responder

Daniel Gustavo Martinez Martinez dice:


junio 21, 2013 a las 9:55 am

Habla doc, no se ven algunas imgenes del tuto.


Responder

Henry Laredo dice:


junio 21, 2013 a las 12:22 pm

fuck! la culpa la tiene el imageshit! justo estoy mudando las imagenes al server de hostgator pero
toma tiempo. te aviso cuando lo restablezca. Gracias por pasar la voz.

converted by Web2PDFConvert.com

Responder

edr dice:
septiembre 19, 2014 a las 6:44 pm

Hola tengo un problema estoy leyendo del canal A1 y A5 pero me inducen las senales
es decir como si estos dos ADC se hicieran corto circuito, esto es lo que hago:
ADC10CTL1|=INCH0;
ADC10CTL0 |= ENC + ADC10SC;
dat=((ADC10MEM*200)/255);
ADC10CTL0 &=~ ENC;
ADC10CTL1|=INCH2+INCH0;
ADC10CTL0 |= ENC + ADC10SC;
dat=((ADC10MEM*200)/255);
ADC10CTL0 &=~ ENC;
el problema es que la senal1 aparece en la senal 2 y al reves sin mencionar que me suman un voltaje
como si el adc estuviese mandando voltaje y mucho ruido ademas
Responder

Henry Laredo dice:


noviembre 8, 2014 a las 8:01 am

el ADC internamente es imposible de por s que infringa un corto circuito en canales ya que tiene
un multiplexor, lo debe estar sucediendo es un problema de hardware en la placa.
Responder

Deja un comentario
Introduce tu comentario aqu...

RECIENTES

ETIQUETAS

CONTACTO

Contenido del Curso de PIC Nivel I 18f2525 18f4550 ansi block Boot
Inicio 05 de Marzo 2016
Bootloader
c18 code Cortex
LENGUAJE C CON XC8 TEMA 4
TIPO DE CONSTANTES
hardware
IAR III
LITERALES DEFINIDAS
instruments
interrupcion
Keil
ENUMERADAS DECLARADAS

Escribeme al correo:
henry.laredo@microembebidos.com

henry

LENGUAJE C CON XC8 TEMA 3 kernel

laredo LCD led


converted by Web2PDFConvert.com

TIPO DE DATOS CON COMA


FLOTANTE
LENGUAJE C CON XC8 TEMA 2
TIPO DE DATOS PARA NUMEROS
ENTEROS

lenguaje LPC1768 M3
microchip
microcontrolador

microembebidos

LENGUAJE C CON XC8 TEMA 1 modulo mplab msp430 NXP


INSTALACION MPLABX Y XC8
pic proteus real
software system

simulacion

teoria texas tutorial

video xc8
youtube
UART USB

Bienvenidos al mundo de los microcontroladores y sistemas embebidos. MicroEmbebidos la Web.

converted by Web2PDFConvert.com

Вам также может понравиться