7231
Comentario:
|
7513
|
Los textos eliminados se marcan así. | Los textos añadidos se marcan así. |
Línea 2: | Línea 2: |
Línea 8: | Línea 7: |
* 8 entradas multiplexadas | * 8 entradas multiplexadas |
Línea 10: | Línea 9: |
* Tiempo de conversión 2,45us | * Tiempo de conversión 2,45us |
Línea 14: | Línea 13: |
=== Entradas === . El ADC utiliza hasta 6 pines de entrada multiplexados |
|
Línea 15: | Línea 16: |
=== Entradas === El ADC utiliza hasta 6 pines de entrada multiplexados |
|
Línea 26: | Línea 24: |
Línea 32: | Línea 29: |
||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 || ||<|9>bits 26-24 ||<|9> START ||Configura de que manera el ADC comenzará a convertir, en caso de estar configurado en modo control por software (BURST = 0) ||<|9> || ||<style="border:none;">0x0: no comienza este es el valor a usar cuando PDN = 0|| ||<style="border:none;">0x1: comenzar la conversión ahora 0x2: flanco del tipo establecido en EDGE en el pin CTOUT_15|| ||<style="border:none;">0x2: flanco del tipo establecido en EDGE en el pin CTOUT_8 || ||<style="border:none;">0x3: flanco del tipo establecido en EDGE en el pin CTOUT_8 || ||<style="border:none;">0x4: flanco del tipo establecido en EDGE en el pin ADCTRIG0|| ||<style="border:none;">0x5: flanco del tipo establecido en EDGE en el pin ADCTRIG1 || ||<style="border:none;">0x6: flanco del tipo establecido en EDGE en el pin Motocon PWM output MCOA2|| ||<style="border:none;">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 33: | Línea 49: |
|| 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 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 || |
|
Línea 44: | Línea 51: |
||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 45: | Línea 56: |
|| 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 51: | Línea 58: |
||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 52: | Línea 61: |
|| 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 56: | Línea 63: |
Línea 60: | Línea 66: |
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 61: | Línea 71: |
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 70: | Línea 75: |
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. |
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 73: | Línea 77: |
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 |
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 |
Línea 76: | Línea 79: |
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 | 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 |
Línea 79: | Línea 82: |
Línea 93: | Línea 95: |
while(1) { |
while(1) { |
Línea 103: | Línea 105: |
return 0; | return 0; |
Línea 105: | Línea 107: |
ADC (Analog Digital Converter)
Este periférico permite convertir señales analógicas en una cuenta o valor digital.
Las características del mismo son las siguientes
- 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 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 |
|||
0x2: flanco del tipo establecido en EDGE en el pin CTOUT_8 |
|||
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 |
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
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.
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
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
int main (void) { unsigned int configura,salida; unsigned char canal; canal = 1; 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 */ AD_ADCR = configura; while(1) { AD_ADCR |= (1 << 24); /* START = 001 comenzar la conversión inmediatamente */ do { salida = AD_ADDR; } while (( salida & (1<<31) ) == 0); /* DONE = 0 termino de convertir */ salida = (salida >>6) & 0x03FF; /* tomar el resultado del bit 6 a 15*/ } return 0; }