Sistemas Embebidos
29 de Agosto de 2014, 11:01:35 *
Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Sorteo Segger J Link!
 
   Inicio   Ayuda Buscar Calendario Descargas Tags Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: El conversor Analógico a Digital  (Leído 2044 veces)
Darukur
Ser Supremo
Nivel 256 bits - Maestro
*****
Mensajes: 2529



Ver Perfil WWW
« en: 24 de Septiembre de 2007, 10:08:44 »

Tal como muchos microcontroladores, el AT91SAM7 cuenta con un conversor analógico a Digital del tipo SAR (aproximaciones suscesivas) de 10 bits (maximo 384Ksamples) u 8bits (se puede sacar mayor velocidad).
Tiene un multiplexador de 8 canales para el unico conversor, cada canal posee un registro unico que guarda el valor convertido.

Las entradas estan multiplexadas con otros perifericos y el GPIO salvo 4 pines que son unicamente para uso del Conversor (AD4-AD7)

La fuente para el inicio de conversion puede ser disparada por software (indicacion del programa escribiendo el bit START en el registro ADC_CR) o por hardware desde las fuentes de los timers o por disparo externo desde el pin ADTRG (flanco de subida de la señal ingresada).

Las fuentes de inicio de conversion pueden ser mixtas si se desea, osea una vez conectada la fuente por hard de interrupcion, incluso por soft se puede disparar.




En línea

El que no sabe lo que busca no entiende lo que encuentra
Darukur
Ser Supremo
Nivel 256 bits - Maestro
*****
Mensajes: 2529



Ver Perfil WWW
« Respuesta #1 en: 24 de Septiembre de 2007, 10:24:34 »

A continuacion el registro del conversor analogico a Digital:

Direccion base: 0xFFFD8000

OFFSETREGISTRONOMBRE
0x00=Registro de ControlADC_CR
0x04=Registro de modo de trabajoADC_MR
0x10=Habilitacion de canalesADC_CHER
0x14=Deshabilitacion de canalesADC_CHDR
0x18=Registro de estado del canalADC_CHSR
0x1C=Registro de estadoADC_SR
0x20=Ultimo valor convertidoADC_LCDR
0x24=Registro de habilitacion de interrupcionesADC_IER
0x28=Registro de deshabilitacion de interrupcionesADC_IDR
0x2C=Registro de mascara de interrupcionesADC_IMR
0x30=Registros del canal 0ADC_CDR0
0x34=Registros del canal 1ADC_CDR1
......=Registros del canal nADC_CDRn
0x4C=Registros del canal 7ADC_CDR7
« Última modificación: 24 de Septiembre de 2007, 10:30:25 por Darukur » En línea

El que no sabe lo que busca no entiende lo que encuentra
Darukur
Ser Supremo
Nivel 256 bits - Maestro
*****
Mensajes: 2529



Ver Perfil WWW
« Respuesta #2 en: 24 de Septiembre de 2007, 10:50:24 »

Los pasos requeridos para configurar exitosamente el Conversor Analógico a Digital:

  • Habilito en el PMC los clocks al Conversor
  • Realizo precautivamente un reseteo por soft del periferico
  • Habilito los canales que deseo utilizar (salida a pin)
  • Realizo precautivamente un reseteo por soft del periferico
  • Configuro modo de trabajo:
       
    • Configuro modo de disparo (SOFT/HARD)
    • Configuro fuente de disparo por HARD si se selecciono
    • Configuro resolucion en 8 o 10 bits
    • Configuro clock al CAD con prescaler (se explica luego)
    • Configuro tiempo de Start-Up (se explica luego)
    • Configuro tiempo de Sample&Hold (se explica luego)

En línea

El que no sabe lo que busca no entiende lo que encuentra
Darukur
Ser Supremo
Nivel 256 bits - Maestro
*****
Mensajes: 2529



Ver Perfil WWW
« Respuesta #3 en: 24 de Septiembre de 2007, 10:57:42 »

Configuraciones relacionadas al Timing:

Clock del Conversor:
                              MCK
ADC_CLOCK=----------------------
                    2*(PRESCALER +1)


Tiempo de Start Up:
                          8*(STARTUP+1)
STARTUP_TIME=--------------------
                            ADC_CLOCK


tiempo de Sample&Hold:
                                    (SHTIM+1)
SAMPLE_N_HOLD_TIME=----------------
                                   ADC_CLOCK


En línea

El que no sabe lo que busca no entiende lo que encuentra
Darukur
Ser Supremo
Nivel 256 bits - Maestro
*****
Mensajes: 2529



Ver Perfil WWW
« Respuesta #4 en: 24 de Septiembre de 2007, 12:11:55 »

Como finalizacion de la investigacion les paso un ejemplito que captura cada 1 segundo un valor sobre el CAD (canal 4) y exhibe por la USART a 115200 bauds el valor capturado en volts segun referencia de 3V3 (VDDIN).

Configuracion de CAD:
Código:
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_ADC); //Habilito Clocks a CAD
 AT91F_ADC_SoftReset(AT91C_BASE_ADC); //Reseteo conversor
 AT91F_ADC_EnableChannel(AT91C_BASE_ADC,AT91C_ADC_CH4); //Habilito canal 4 de CAD
 AT91F_ADC_CfgModeReg(AT91C_BASE_ADC,AT91C_ADC_LOWRES_10_BIT|(9<<8)); //10 bits de res y prescaler en 9, otros parametros indiferente

Adquisicion (sin interrupciones):
Código:
AT91F_ADC_StartConversion(AT91C_BASE_ADC);
 while ((AT91F_ADC_GetStatus(AT91C_BASE_ADC) & AT91C_ADC_EOC4) == 0); //Espero conclusion de tarea sobre el canal seleccionado
 return AT91F_ADC_GetLastConvertedData(AT91C_BASE_ADC); //Toma valor sobre la ultima conversion

Saludos
« Última modificación: 08 de Octubre de 2007, 09:19:49 por Darukur » En línea

El que no sabe lo que busca no entiende lo que encuentra
DasGringuen
Nivel 16 bits - Participante
**
Mensajes: 63


Ver Perfil Email
« Respuesta #5 en: 12 de Abril de 2009, 04:03:13 »

una preguntita. En este ejemplo a que frecuencia esta muestreando?
En línea
Darukur
Ser Supremo
Nivel 256 bits - Maestro
*****
Mensajes: 2529



Ver Perfil WWW
« Respuesta #6 en: 14 de Abril de 2009, 12:51:42 »

Jajaja a 1 captura por segundo!

Código
GeSHi (c):
  1. void Timer_Services_1S (void) //Servicios atendidos cada segundo en background
  2. {if (AT91F_PIO_GetInput(AT91C_BASE_PIOA)&LED1)
  3. {AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED1);}
  4. else {AT91F_PIO_SetOutput  (AT91C_BASE_PIOA,LED1);}
  5. //
  6. printf ("Transmision: %d, Valor: %f\n",++counter,(ADC_Get()*3.3)/1023);  
  7. }
  8.  
Created by GeSHI 1.0.7.20

Este metodo se llama cada 1 seg, obviamente podes llamarlo con mas celeridad pero obviamente como no uso nada de interrupciones no esta optimizado, es solo para comprender el uso del CAD.
En línea

El que no sabe lo que busca no entiende lo que encuentra
DasGringuen
Nivel 16 bits - Participante
**
Mensajes: 63


Ver Perfil Email
« Respuesta #7 en: 16 de Abril de 2009, 03:34:31 »

a si, jeje sorry por la pregunta tonta.
Marce otra pregunta viste que en la placa usa un cristal de 18mhz, y despues con el pll (en este ejemplo llega a 82mhz con el divisor en 5 y el multiplicador en 25) la pregunta es, cual es la frecuencia del micro, la del pll o la del cristal principal osea los 18 o los 82.
No me queda claro lo que dice en las hojas de datos.
Esa frecuencia es la MCK de la primer ecuacion?
En línea
Darukur
Ser Supremo
Nivel 256 bits - Maestro
*****
Mensajes: 2529



Ver Perfil WWW
« Respuesta #8 en: 16 de Abril de 2009, 06:07:04 »

Gringo, si miras los ejemplos para ARM, en el header file te vas a encontrar con esto:

Código
GeSHi (c):
  1. //Relojes del sistema
  2. #define    EXT_OC        18432000                                          //Cristal externo
  3. #define    MUL             25                                                    //Multiplicador del PLL
  4. #define    DIV              5                                                     //Divisor del PLL
  5. #define    PRESCALER    2                                                     //Prescaler divisor final
  6. #define    MCK             ((MUL+1)*EXT_OC)/(DIV*PRESCALER)    //Master Clock en Mhz CORREGIDO!!
  7. #define    MCKKHz        (MCK/1000)                                       //Master Clock en Khz
  8.  
Created by GeSHI 1.0.7.20

MCK representa la frecuencia del reloj que va alimentar al sistema.
Es lo mismo que en un PLL, tenes una señal de entrada, un oscilador libre, un divisor/multiplicador de ese oscilador libre y un comparador de la salida contra la señal de entrada. Al engancharse el oscilador libre despues del divisor/multiplicador contra la entrada garantizas que el oscilador libre oscila a N veces de la entrada comparada.
Ademas podes tener un prescaler como es el caso del arm.

Fijate tambien en la IDE en la seccion de arranque (asm) que esta configurable los parametros y te muestra el valor de XTAL resultante.
En línea

El que no sabe lo que busca no entiende lo que encuentra
Tags:
Páginas: [1]
  Imprimir  
 
Ir a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006, Simple Machines
XHTML 1.0 válido! CSS válido!
Página creada en 3.541 segundos con 22 queries.