Bienvenido: Ingresar
location: Diferencias para "WebHome/Hardware/ModuloADC"
Diferencias entre las revisiones 6 y 16 (abarca 10 versiones)
Versión 6 con fecha 2016-09-29 19:11:38
Tamaño: 7299
Comentario:
Versión 16 con fecha 2016-10-14 21:08:33
Tamaño: 11547
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 2: Línea 2:
Línea 5: Línea 4:
Las características del mismo son las siguientes == Características y Registros ADC ==
El LPC43xx posee 2 ADC idénticos, cada uno de ellos posee las siguientes características:
Línea 8: Línea 8:
 * 8 entradas multiplexadas   * 8 entradas multiplexadas
Línea 10: Línea 10:
 * Tiempo de conversión 2,45us   * Tiempo de conversión 2,45us
Línea 14: Línea 14:
=== Entradas ===
 . El ADC utiliza hasta 6 pines de entrada multiplexados
Línea 15: Línea 17:
=== Entradas ===
 El ADC utiliza hasta 6 pines de entrada multiplexados
   
Línea 26: Línea 25:

El ADC posee entradas separadas de alimentación denominadas V,,DDA,, y V,,SSA,,, usadas para el bloque analógico, las mismas deben estar correctamente aisladas de las demás señales, para no generar errores en la conversión producto de las fluctuaciones en estas lineas.
El ADC posee entradas separadas de alimentación denominadas V,,DDA,, y V,,SSA,,, usadas para el bloque analógico, las mismas deben estar correctamente aisladas de las demás señales para no generar errores en la conversión producto de las fluctuaciones en estas lineas.
Línea 32: Línea 30:
||bits 7-0 ||SEL ||Estos bits determina en cual o cuales de los 8 canales se realizará la conversión, correspondiendo cada bits a cada una de las entradas, este registro funciona de dos maneras diferentes: * Controlado por software, en este modo solo un bits puede ser puesto en 1, el cual será el canal donde se realizará la conversión. * Controlado por hardware, en este modo se selecciona con 1 a todos los canales donde se deben realizar una conversión, una vez activo el ADC en este modo, se producirá un barrido de todos estos canales. ||
||bits 15-8 ||CLKDIV ||El clock interno del ADC se extrae del VPB (PCLK) dividido el valor guardado en CLKDIV, el resultado no deberá ser superior a 4,5 Mhz, generalmente este divisor de configura para producir la máxima frecuencia posible del ADC ( 4,5Mhz) pero en ciertos casos conviene una menor frecuencia, por ejemplo en casos de que la señal a medir provenga de fuentes de alta impedancia. ||
||bit 16 ||BURS ||Si el bit es 0, la conversión es controlada por software requiriendo 11 ciclos de reloj, si en cambio es 1, se activa el control por hardware, ahora el tiempo de conversión y el rango de la misma será designado por CLKS, produciendo un barrido en cada canal que se encuentre activo en el registro SEL, comenzando por el bit menos significativo en 1. La conversión continuará hasta que se borre el el bits del BURST, con lo cual se detendrá el proceso una vez que la convención que se esté efectuando termine. ||
||bits 19-17 ||CLKS ||Este campo es usando en el modo de control por hardware y determina el número de ciclos usados para la conversión y el número de bits de precisión, pudiendo elegir entre 11 clock (10bits) = 000, 10 clock (9bits) = 001 hasta 4 clock (3bits) = 111. ||
||bit 20 || ||Reservado. ||
||bit 21 ||PDN ||1 = el ADC está operacional 0 = el ADC está en modo power down. ||
||bits 23-22 || ||Reservado. ||
||<style="&quot; &amp; quot;text-align:center&amp; quot; &quot;" |9>bits 26-24 ||<style="&quot; &amp; quot;text-align:center&amp; quot; &quot;" |9>START ||Configura de que manera el ADC comenzará a convertir, en caso de estar configurado en modo control por software (BURST = 0). ||<style="&quot; &amp; quot;text-align:center&amp; quot; &quot;" |9> ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x0: no comienza, este es el valor a usar cuando PDN = 0. ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x1: comenzar la conversión ahora. ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x2: flanco del tipo establecido en EDGE en el pin CTOUT_15. ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x3: flanco del tipo establecido en EDGE en el pin CTOUT_8. ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x4: flanco del tipo establecido en EDGE en el pin ADCTRIG0. ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x5: flanco del tipo establecido en EDGE en el pin ADCTRIG1. ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x6: flanco del tipo establecido en EDGE en el pin Motocon PWM output MCOA2. ||
||<style="&quot; &amp; quot; &amp; amp; quot;border:none; &amp; amp; quot; &amp; quot; &quot;">0x7: reservado. ||
|| ||
||bit 27 ||EDGE ||Este bits es utilizado en caso de configurar a START en algún modo que requiera flanco (modo 0x2 a 0x6). EDGE = 0 la conversión inicia en un flanco de bajada. EDGE = 1 la conversión inicia en un flanco de subida. ||
||bits 31-28 || ||Reservado. ||
Línea 33: Línea 50:
|| bits 7-0 || SEL || Estos bits determina en cual o cuales de los 8 canales se realizará la conversión, correspondiendo cada bits a cada una de las entradas, este registro funciona de dos maneras diferentes: Controlado por software, en este modo solo un bits puede ser puesto en 1, el cual será el canal donde se realizará la conversión. Controlado por hardware, en este modo se selecciona con 1 a todos los canales donde se quieren hacer una conversión, una vez activo el ADC en este modo se producirá un barrido de todos estos canales. ||
|| bits 15-8 || CLKDIV || El clock interno del ADC se extrae del VPB (PCLK) dividido el valor guardado en CLKDIV, el resultado no deberá ser superior a 4,5 Mhz, generalmente este divisor de configura para producir la máxima frecuencia posible del ADC ( 4,5Mhz) pero en ciertos casos conviene una menor frecuencia, por ejemplo en casos de que la señal a medir provenga de fuentes de alta impedancia. ||
|| bit 16 || BURS || Si el bit es 0, la conversión es controlada por software requiriendo 11 ciclos de reloj, si en cambio es 1, se activa el control por hardware, ahora el tiempo de conversión y el rango de la misma será designado por CLKS, produciendo un barrido en cada canal que se encuentre activo en el registro SEL, comenzando por el bits menos significativo en 1.La conversión continuará hasta que se borre el el bits del BURST, con lo cual se detendrá el proceso una vez que la convención que se esté efectuando termine. ||
|| bits 19-17 || CLKS || Este campo es usando en el modo de control por hardware y determina el numero de ciclos usados para la conversión y el numero de bits de precisión, pudiendo elegir entre 11 clock (10bits) = 000, 10 clock (9bits) = 001 hasta 4 clock (3bits) = 111 ||
|| bit 20 || || Reservado ||
|| bit 21 || PDN || 1 = el ADC está operacional 0 = el ADC está en modo power down ||
|| bits 23-22 || || Reservado ||
|| bits 26-24 || START || Configura de que manera el ADC comenzará a convertir, en caso de estar configurado en modo control por software (BURST = 0) 0x0: no comienza este es el valor a usar cuando PDN = 0 0x1: comenzar la conversión ahora 0x2: flanco del tipo establecido en EDGE en el pin CTOUT_15 0x3: flanco del tipo establecido en EDGE en el pin CTOUT_8 0x4: flanco del tipo establecido en EDGE en el pin ADCTRIG0 0x5: flanco del tipo establecido en EDGE en el pin ADCTRIG1 0x6: flanco del tipo establecido en EDGE en el pin Motocon PWM
output MCOA2 0x7: reservado ||
|| bit 27 || EDGE || Este bits es utilizado en caso de configurar a START entre 0x2 a 0x6 EDGE = 0 la conversión inicia en un flanco de bajada EDGE = 1 la conversión inicia en un flanco de subida ||
|| bits 31-28 || || Reservado ||
Línea 46: Línea 52:
||bits 15-6 ||V/V3A ||indica el resultado de la conversión. ||
||bits 26-24 ||CHN ||Indica el canal de la ultima conversión. ||
||bit 30 ||OVERRUN ||En modo BURST este bits está en 1 si una o varias conversiones fueron perdidas por no leer a tiempo el registro antes de que una nueva la pisara. ||
||bit 31 ||DONE ||Este registro indica con 1 que la conversión a finalizado, es borrado cuando este registro es leído y cuando el CR es escrito, si el CR es escrito mientras que se estaba realizando una conversión, este bit es puesto a 1 y una nueva conversión arranca ||
Línea 47: Línea 57:
|| bits 15-6 || V/V3A || indica el resultado de la conversión ||
|| bits 26-24 || CHN || indica el canal de la ultima conversión ||
|| bit 30 || OVERRUN || En modo BURST este bits está en 1 si una o varias conversiones fueron perdidas por no leer a tiempo el registro antes de que una nueva la pisara. ||
|| bit 31 || DONE || Este registro indica con 1 que la conversión a finalizado, es borrado cuando este registro es leído y cuando el CR es escrito, si el CR es escrito mientras que se estaba realizando una conversión, este bit es puesto a 1 y una nueva conversión arranca ||
Línea 53: Línea 59:
||bits 7-0 ||ADINTEN ||Indica que canal/es generará/n interrupción, un 1 en el bit 0 indica que el canal 0 generará interrupción al finalizar la conversión, un 1 en el bit 1 corresponderá una interrupción para el canal 1 y asi con los demás canales. ||
||bits 8 ||ADGINTEN ||Cuando su valor es 1 habilita la interrupción cuando el bit DONE se ponga en 1, en caso de 0 la interrupción la genera los canales individuales indicados en ADINTEN. ||
Línea 54: Línea 62:
|| bits 7-0 || ADINTEN || indica que canal/es generará/n interrupción, un 1 en el bit 0 indica que el canal 0 generará interrupción al finalizar la conversión, un 1 en el bit 1 corresponderá una interrupción para el canal 1 y asi con los demás canales ||
|| bits 8 || ADGINTEN || cuando su valor es 1 habilita la interrupción cuando el bit DONE se ponga en 1, en caso de 0 la interrupción la genera los canales individuales indicados en ADINTEN ||
Línea 58: Línea 64:
Línea 62: Línea 67:

Permite acceder a los bit DONE y OVERRUN de todos los canales

||
bits 7-0 || DONE || bits DONE de los 8 canales  ||
|| bits 15-8 || OVERRUN || bits OVERRUN de los 8 canales ||
|| bit 16 || ADINT || este bit se pone en 1 cuando algún canal termina de convertir y el mismo está habilitado para generar interrupción via  el registro ADINTEN ||
Permite acceder a los bit DONE y OVERRUN de todos los canales
||bits 7-0 ||DONE ||Bits DONE de los 8 canales. ||
||bits 15-8 ||OVERRUN ||Bits OVERRUN de los 8 canales. ||
||bit 16 ||ADINT ||Este bit se pone en 1 cuando algún canal termina de convertir y el mismo está habilitado para generar interrupción via el registro ADINTEN ||
Línea 71: Línea 74:
=== Configuración y Lectura de un ADC ===
Este es un ejemplo muy simple del uso del ADC
Para configurar el ADC comenzamos directamente a través del registro ADCR, falta en este proceso configurar los pines en el modo ADC, esto no es necesario, debido a que este es el modo por defecto.
Línea 75: Línea 75:
La configuración la vamos realizando previamente en una variable "configura", esto permite ir observando cada bit de configuración que modificamos, una vez realizada la carga de esta variable, la copiamos al registro ADCR
Solo dejamos pendiente el arranque de la conversión el cual es conveniente realizarlo en una escritura separada, cuando ya la configuración esta lista
== Configuración y Lectura de un ADC ==
Para la configuración y lectura del ADC se utilizará las librerías de las LPCOpen
Línea 78: Línea 78:
al final un do while esperará hasta que el bit 31 del ADDR esté en 1 indicando fin de conversión, usamos luego la variable leida "salida" para directamente extraerle el resultado de la conversión === Configuración de la SCU ===
Una diferencia importante que comparten el ADC junto con el DAC con respecto a los demás periférico, es la configuración de los pines de entrada (ADC) o salida (DAC), como se detalló en otros casos, el primer paso es configurar los pines para que estos puedan ser utilizados por el periférico, en la mayoría de los casos esto se realiza con los registros SFSP utilizando la funcion de la LPCOpen {{{Chip_SCU_PinMux()}}}.
Línea 80: Línea 81:
{{{ La situación es diferente para los dos periféricos analógicos (ADC y DAC), en estos casos, es necesario configurar el registro ENAIO (ENAIO0 y ENAIO1 para las dos ADC y ENAIO2 para el caso del DAC), el mismo permite cambiar la configuración de los pines de digital a analógico quedando de esta forma el pin listo para su uso en el periférico correspondiente. De esta manera se configura entonces mediante la siguiente función del LPCOpen.
Línea 82: Línea 83:
int main (void)
{
{{{ STATIC INLINE void Chip_SCU_ADC_Channel_Config(uint32_t ADC_ID, uint8_t channel);}}}
Línea 85: Línea 85:
  unsigned int configura,salida;
  unsigned char canal;
Como ejemplo si se quiere configurar al canal 1 del del ADC0 se escribirá lo siguiente.
Línea 88: Línea 87:
  canal = 1; {{{ Chip_SCU_ADC_Channel_Config(0,ADC_CH1); }}}
Línea 90: Línea 89:
  configura = (16 <<8 ); /* CLKDIV = 16 configuro divisor externo */
  configura |= (1 << 21 ); /* PDN = 1 ADC en modo operacional*/
  configura |= canal; /* canal a realizar la conversión */
=== Inicialización del Periférico ===
La inicialización del ADC se realiza con la función Chip_ADC_Init(), esta función inicializa el periférico y establece una configuración para su funcionamiento por defecto, esta configuración por defecto será la siguiente:
Línea 94: Línea 92:
  AD_ADCR = configura;
  
  while(1) {
    AD_ADCR |= (1 << 24); /* START = 001 comenzar la conversión inmediatamente */
 * Velocidad de conversión = 400Ksamples
 * Cantidad de bits = 10
 * Modo burst (ráfaga) desactivado.
Línea 99: Línea 96:
    do {
      salida = AD_ADDR;
    } while (( salida & (1<<31) ) == 0); /* DONE = 0 termino de convertir */
El formato de la función es el siguiente
Línea 103: Línea 98:
    salida = (salida >>6) & 0x03FF; /* tomar el resultado del bit 6 a 15*/
  }
  return 0;
}
{{{ void Chip_ADC_Init(LPC_ADC_T *pADC, ADC_Clock_Setup_T *ADCSetup);}}}
Línea 108: Línea 100:
Donde ADCSetup es una estructura que devuelve la configuración por defecto.
Línea 109: Línea 102:
}}} === Habilitación del Canal ===
Con el comando

{{{Chip_ADC_EnableChannel(LPC_ADC_T *pADC, ADC_CHANNEL_T channel, FunctionalState NewState)}}}

Se habilita o se deshabilita uno de los canales del ADC

 * '''channel''' es el número de canal (ADC_CH0, ADC_CH1 ... ADC_CH7)
 * NewState es la accion que se desea aplicar sobre el canal (ENABLE para activar el canal DISABLE para desactivarlo)

=== Modo de Arranque ===
El paso final es configurar el modo de arranque del ADC, es decir que evento generará un '''Start Conversion'''

{{{Chip_ADC_SetStartMode(LPC_ADC_T *pADC, ADC_START_MODE_T mode, ADC_EDGE_CFG_T EdgeOption)}}}

mode puede tener los siguientes valores:

 * ADC_NO_START : Para el caso de funcionamiento modo Burst
 * ADC_START_NOW : Arranca la conversión ahora
 * DDC_START_ON_CTOUT15 : flanco del tipo establecido en EdgeOption en el pin CTOUT_15
 * ADC_START_ON_CTOUT8 : flanco del tipo establecido en EdgeOption en el pin CTOUT_8
 * ADC_START_ON_ADCTRIG0 : flanco del tipo establecido en EdgeOption en el pin ADCTRIG0
 * ADC_START_ON_ADCTRIG1 : flanco del tipo establecido en EdgeOption en el pin ADCTRIG1
 * ADC_START_ON_MCOA2 : flanco del tipo establecido en EdgeOption en el pin Motocon PWM output MCOA2

Mientras que !EdgeOption

 * ADC_TRIGGERMODE_RISING : el evento se produce en el flanco de subida
 * ADC_TRIGGERMODE_FALLING : el evento se produce en el flanco de bajada

=== Lectura del ADC ===
Una vez realizada la configuración del periférico ADC y generado el '''Start Conversion''', solo queda efectuar la lectura del valor.

La lectura se realizará en dos pasos

==== Verificación de Fin de conversión ====
Antes de realizar la lectura del calor convertido es necesario verificar si el proceso de conversión ya terminó, esto se realiza cun la instrucción

{{{Chip_ADC_ReadStatus(LPC_ADC_T *pADC, uint8_t channel, uint32_t StatusType)}}}

donde StatusType indica la bandera que se busca leer

 * ADC_DR_DONE_STAT: bandera que indica fin de conversión.
 * ADC_DR_OVERRUN_STAT: bandera para verificar si la última conversión sobrescribió la anterior sin ser antes.
 * ADC_DR_ADINT_STAT: si algún canal terminó de convertir y el mismo está habilitado para generar interrupciones.

Esta función devuelve '''SET''' para el caso afirmativo o '''RESET''' para el caso contrario.

==== Lectura del valor ====
La lectura del valor convertido se realiza mediante la función

{{{Chip_ADC_ReadValue(LPC_ADC_T *pADC, uint8_t channel, uint16_t *data)}}}

Donde data es el puntero a la variable donde se guardará el valor.

La propia instrucción verifica antes de leer el dato si un valor nuevo espera ser leído (bit DONE) devolviendo '''ERROR''' si no hay dato nuevo o '''SUCCESS''' en caso de una lectura exitosa.

ADC (Analog Digital Converter)

Este periférico permite convertir señales analógicas en una cuenta o valor digital.

Características y Registros ADC

El LPC43xx posee 2 ADC idénticos, cada uno de ellos posee las siguientes características:

  • Conversor de 10 bits
  • 8 entradas multiplexadas
  • Rango de entrada de 0 a 3,3 V
  • Tiempo de conversión 2,45us
  • Modo Ráfaga (Burst) para una entrada o múltiples entradas (multiplexado).
  • Un registro de resultado para cada canal AD

Entradas

  • El ADC utiliza hasta 6 pines de entrada multiplexados
  • ADC0_0 a ADC0_7 Entrada del ADC 0.
  • ADC1_0 a ADC1_7 Entrada del ADC 1.
  • ADCTRIG0 Entrada Trigger ADC0/1.
  • ADCTRIG1 Entrada Trigger ADC0/1.

Estos nombres deben buscarse dentro del mapa del SCU y configurar adecuadamente el pin para su uso como ADC.

Alimentación

El ADC posee entradas separadas de alimentación denominadas VDDA y VSSA, usadas para el bloque analógico, las mismas deben estar correctamente aisladas de las demás señales para no generar errores en la conversión producto de las fluctuaciones en estas lineas.

VDDA es usada además como VREF

Registro de control (CR)

bits 7-0

SEL

Estos bits determina en cual o cuales de los 8 canales se realizará la conversión, correspondiendo cada bits a cada una de las entradas, este registro funciona de dos maneras diferentes: * Controlado por software, en este modo solo un bits puede ser puesto en 1, el cual será el canal donde se realizará la conversión. * Controlado por hardware, en este modo se selecciona con 1 a todos los canales donde se deben realizar una conversión, una vez activo el ADC en este modo, se producirá un barrido de todos estos canales.

bits 15-8

CLKDIV

El clock interno del ADC se extrae del VPB (PCLK) dividido el valor guardado en CLKDIV, el resultado no deberá ser superior a 4,5 Mhz, generalmente este divisor de configura para producir la máxima frecuencia posible del ADC ( 4,5Mhz) pero en ciertos casos conviene una menor frecuencia, por ejemplo en casos de que la señal a medir provenga de fuentes de alta impedancia.

bit 16

BURS

Si el bit es 0, la conversión es controlada por software requiriendo 11 ciclos de reloj, si en cambio es 1, se activa el control por hardware, ahora el tiempo de conversión y el rango de la misma será designado por CLKS, produciendo un barrido en cada canal que se encuentre activo en el registro SEL, comenzando por el bit menos significativo en 1. La conversión continuará hasta que se borre el el bits del BURST, con lo cual se detendrá el proceso una vez que la convención que se esté efectuando termine.

bits 19-17

CLKS

Este campo es usando en el modo de control por hardware y determina el número de ciclos usados para la conversión y el número de bits de precisión, pudiendo elegir entre 11 clock (10bits) = 000, 10 clock (9bits) = 001 hasta 4 clock (3bits) = 111.

bit 20

Reservado.

bit 21

PDN

1 = el ADC está operacional 0 = el ADC está en modo power down.

bits 23-22

Reservado.

bits 26-24

START

Configura de que manera el ADC comenzará a convertir, en caso de estar configurado en modo control por software (BURST = 0).

0x0: no comienza, este es el valor a usar cuando PDN = 0.

0x1: comenzar la conversión ahora.

0x2: flanco del tipo establecido en EDGE en el pin CTOUT_15.

0x3: flanco del tipo establecido en EDGE en el pin CTOUT_8.

0x4: flanco del tipo establecido en EDGE en el pin ADCTRIG0.

0x5: flanco del tipo establecido en EDGE en el pin ADCTRIG1.

0x6: flanco del tipo establecido en EDGE en el pin Motocon PWM output MCOA2.

0x7: reservado.

bit 27

EDGE

Este bits es utilizado en caso de configurar a START en algún modo que requiera flanco (modo 0x2 a 0x6). EDGE = 0 la conversión inicia en un flanco de bajada. EDGE = 1 la conversión inicia en un flanco de subida.

bits 31-28

Reservado.

Registro global de datos (GDR)

bits 15-6

V/V3A

indica el resultado de la conversión.

bits 26-24

CHN

Indica el canal de la ultima conversión.

bit 30

OVERRUN

En modo BURST este bits está en 1 si una o varias conversiones fueron perdidas por no leer a tiempo el registro antes de que una nueva la pisara.

bit 31

DONE

Este registro indica con 1 que la conversión a finalizado, es borrado cuando este registro es leído y cuando el CR es escrito, si el CR es escrito mientras que se estaba realizando una conversión, este bit es puesto a 1 y una nueva conversión arranca

Registro de habilitación de interrupción (INTEN)

bits 7-0

ADINTEN

Indica que canal/es generará/n interrupción, un 1 en el bit 0 indica que el canal 0 generará interrupción al finalizar la conversión, un 1 en el bit 1 corresponderá una interrupción para el canal 1 y asi con los demás canales.

bits 8

ADGINTEN

Cuando su valor es 1 habilita la interrupción cuando el bit DONE se ponga en 1, en caso de 0 la interrupción la genera los canales individuales indicados en ADINTEN.

Registro de Datos (DR0-DR7)

Es una copia del registro GDR pero particular para cada canal, disponiendo del último dato convertido para un canal en particular, el bit DONE para verificar si hay un nuevo dato a leer y OVERRUN para detectar perdida de datos convertidos.

Registro de Status (STAT)

Permite acceder a los bit DONE y OVERRUN de todos los canales

bits 7-0

DONE

Bits DONE de los 8 canales.

bits 15-8

OVERRUN

Bits OVERRUN de los 8 canales.

bit 16

ADINT

Este bit se pone en 1 cuando algún canal termina de convertir y el mismo está habilitado para generar interrupción via el registro ADINTEN

Configuración y Lectura de un ADC

Para la configuración y lectura del ADC se utilizará las librerías de las LPCOpen

Configuración de la SCU

Una diferencia importante que comparten el ADC junto con el DAC con respecto a los demás periférico, es la configuración de los pines de entrada (ADC) o salida (DAC), como se detalló en otros casos, el primer paso es configurar los pines para que estos puedan ser utilizados por el periférico, en la mayoría de los casos esto se realiza con los registros SFSP utilizando la funcion de la LPCOpen Chip_SCU_PinMux().

La situación es diferente para los dos periféricos analógicos (ADC y DAC), en estos casos, es necesario configurar el registro ENAIO (ENAIO0 y ENAIO1 para las dos ADC y ENAIO2 para el caso del DAC), el mismo permite cambiar la configuración de los pines de digital a analógico quedando de esta forma el pin listo para su uso en el periférico correspondiente. De esta manera se configura entonces mediante la siguiente función del LPCOpen.

  STATIC INLINE void Chip_SCU_ADC_Channel_Config(uint32_t ADC_ID, uint8_t channel);

Como ejemplo si se quiere configurar al canal 1 del del ADC0 se escribirá lo siguiente.

 Chip_SCU_ADC_Channel_Config(0,ADC_CH1); 

Inicialización del Periférico

La inicialización del ADC se realiza con la función Chip_ADC_Init(), esta función inicializa el periférico y establece una configuración para su funcionamiento por defecto, esta configuración por defecto será la siguiente:

  • Velocidad de conversión = 400Ksamples
  • Cantidad de bits = 10
  • Modo burst (ráfaga) desactivado.

El formato de la función es el siguiente

 void Chip_ADC_Init(LPC_ADC_T *pADC, ADC_Clock_Setup_T *ADCSetup);

Donde ADCSetup es una estructura que devuelve la configuración por defecto.

Habilitación del Canal

Con el comando

Chip_ADC_EnableChannel(LPC_ADC_T *pADC, ADC_CHANNEL_T channel, FunctionalState NewState)

Se habilita o se deshabilita uno de los canales del ADC

  • channel es el número de canal (ADC_CH0, ADC_CH1 ... ADC_CH7)

  • NewState es la accion que se desea aplicar sobre el canal (ENABLE para activar el canal DISABLE para desactivarlo)

Modo de Arranque

El paso final es configurar el modo de arranque del ADC, es decir que evento generará un Start Conversion

Chip_ADC_SetStartMode(LPC_ADC_T *pADC, ADC_START_MODE_T mode, ADC_EDGE_CFG_T EdgeOption)

mode puede tener los siguientes valores:

  • ADC_NO_START : Para el caso de funcionamiento modo Burst
  • ADC_START_NOW : Arranca la conversión ahora
  • DDC_START_ON_CTOUT15 : flanco del tipo establecido en EdgeOption en el pin CTOUT_15

  • ADC_START_ON_CTOUT8 : flanco del tipo establecido en EdgeOption en el pin CTOUT_8

  • ADC_START_ON_ADCTRIG0 : flanco del tipo establecido en EdgeOption en el pin ADCTRIG0

  • ADC_START_ON_ADCTRIG1 : flanco del tipo establecido en EdgeOption en el pin ADCTRIG1

  • ADC_START_ON_MCOA2 : flanco del tipo establecido en EdgeOption en el pin Motocon PWM output MCOA2

Mientras que EdgeOption

  • ADC_TRIGGERMODE_RISING : el evento se produce en el flanco de subida
  • ADC_TRIGGERMODE_FALLING : el evento se produce en el flanco de bajada

Lectura del ADC

Una vez realizada la configuración del periférico ADC y generado el Start Conversion, solo queda efectuar la lectura del valor.

La lectura se realizará en dos pasos

Verificación de Fin de conversión

Antes de realizar la lectura del calor convertido es necesario verificar si el proceso de conversión ya terminó, esto se realiza cun la instrucción

Chip_ADC_ReadStatus(LPC_ADC_T *pADC, uint8_t channel, uint32_t StatusType)

donde StatusType indica la bandera que se busca leer

  • ADC_DR_DONE_STAT: bandera que indica fin de conversión.
  • ADC_DR_OVERRUN_STAT: bandera para verificar si la última conversión sobrescribió la anterior sin ser antes.
  • ADC_DR_ADINT_STAT: si algún canal terminó de convertir y el mismo está habilitado para generar interrupciones.

Esta función devuelve SET para el caso afirmativo o RESET para el caso contrario.

Lectura del valor

La lectura del valor convertido se realiza mediante la función

Chip_ADC_ReadValue(LPC_ADC_T *pADC, uint8_t channel, uint16_t *data)

Donde data es el puntero a la variable donde se guardará el valor.

La propia instrucción verifica antes de leer el dato si un valor nuevo espera ser leído (bit DONE) devolviendo ERROR si no hay dato nuevo o SUCCESS en caso de una lectura exitosa.

UntitledWiki: WebHome/Hardware/ModuloADC (última edición 2016-10-18 21:40:36 efectuada por GuillermoSteiner)