Atmega328p ADC

Estaba necesitando utilizar el ADC del atmega328p, a una frecuencia de muestreo de 44 ksps. Si observamos, las características generales del microcontrolador en la página de atmel http://www.atmel.com/devices/ATMEGA328P.aspx?tab=parameters (key parameters), se menciona que la velocidad del ADC es 15 ksps.

Ahora bien, observando el datasheet, en la sección del ADC se menciona que tarda 15 pulsos de clock la converción y que los pulsos del clock toman la fuente del clock del ADC, los cuales pueden ser divididos en frecuencias del clock central en 2, 4, 8, 16, etc.

Por ende con un cristal de 16MHz, preescalando en 2 veces el clock del ADC (que es lo mínimo) y con 15 pulsos tenemos que el ADC trabaja a 615 ksps. ¿es correcto esto? ¿por qué se menciona 15 ksps en la página principal?

Saludos.
 
No me he leído el datasheet pero microcontroladores de hace una década sampleaban en 16us lo que son unas 50ksps claro que después necesitas memoria para guardar ese chorro de datos.
A mi me suena que debe de hacer la conversión en mucho menos tiempo que 15ksps

 
615ksps :LOL: Sí ves los datos dicen que la máxima vendría cerca de 70ksps, la frecuencia recomendada esta entre 50-200kHz para el ADC, ¿Que pasa si es mayor? Pierdes resolución, los ADC llevan un circuito de muestreos y tienen cierta resistencia y capacitancia de muestreo que le reducen la frecuencia, si subes demasiado la velocidad reduce el tiempo de muestreo y aumenta el error.
 
Es que llega a 13k/15ksps nomás, se te olvida que tenés que seleccionar un preescsler que te dé una frecuencia del reloj del ADC entre 50 y 200khz, suponé que podes hacer que corra a 200khz, la hoja de datos indica que la conversión tarda 13 ciclos más 1,5 de no sé que demomios, digamos unos 15 ciclos del reloj del ADC, haciendo las cuentas, 200000/15=13333 como 13k de conversiones por segundo....

Es lo que Yo entiendo de esa hoja de datos..
Con 13 ciclos llega a 15ksps...
Mas velocidad me parece que tendrás que cambiar de micro, Yo andaba mirando la placa de desarrollo Maple, emplea un ARM Cortex-M3 de 32bit y vienen con el bootloader via usb.
 
¿en el atmega328p, siempre el tiempo de conversión es 13 ciclos del clock ADC y por lo tanto la resolución en bits dependerá de este valor?

Por ejemplo, observo en el datasheet que el registro ADCSRA permite modificar el el input ADC's clock, es decir la frecuencia del clock, dividiendo la frecuencia del clock central pero no observo ningún registro que me permita modificar la cantidad de bits del registro de dato del ADC (con 8 en vez de 10 me bastaría). Por lo tanto la cuenta terminaría en 13 ciclos luego del comienzo. Supongo que esto es así porque es un conversión de aproximaciones sucesivas en vez de un conversor flash pero no estoy 100% seguro.

Por cierto lo que dices AleSergi no creo que sea así, el preescaler es con respecto a la frecuencia del clock central y depende exclusivamente del cristal. Evidentemente, es necesario el preescaler para cristales mayores al MHz
 
Es que así como indicás lo entiendo Yo, tomando desde la frecuencia de funcionamiento del micro, buscas/elegís un preescaler que de por resultado una frecuencia de 50 a 200khz para el ADC.
 
Esto es lo que dice la sección 28.4 Preescaling and timming

By default, the successive approximation circuitry requires an input clock frequency between 50kHz and
200kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency
to the ADC can be higher than 200kHz to get a higher sample rate.

Así que al parecer y según lo que entiendo, si tengo un cristal de 16 MHz y pongo un preescaler de 32 obtengo un clock en el ADC de 500KHz, en donde la conversión se realiza en 13 ciclos y por lo tanto la frecuencia de muestreo es 33Kbps. Ahora bien, la resolución en bits dependerá de cuanto pudo contar en esos 13 ciclos.
Esto es lo que entiendo.

Pero lo que me confunde es lo siguiente:
The ADC module contains a prescaler, which generates an acceptable ADC clock frequency from any
CPU frequency above 100kHz. The prescaling is selected by the ADC Prescaler Select bits in the ADC
Control and Status Register A (ADCSRA.ADPS). The prescaler starts counting from the moment the ADC
is switched on by writing the ADC Enable bit ADCSRA.ADEN to '1'. The prescaler keeps running for as
long as ADEN=1, and is continuously reset when ADEN=0.
Es decir, si yo dejo el registro ADCSRA, sin tocar el preescaler, con un cristal mayor a 1MHz obtendré un error terrible!, por lo que puedo llegar a conjeturar que existe un preescaler anterior al preescaler que podemos configurar y que divide la señal a un valor menor en proporción tal que si el cristal es de 16MHz, el presscaler lo lleva a 200KHz (es decir hay un primer preescaler que lo divide por 80) y de ahí lo podemos preescalar más con el preescaler configurable. Así pues si utilizamos un cristal de 4MHz, siguiendo la proporción, el preescaler lo llevaría a 50KHz y de ahí lo podríamos preescalar más.
 
El error no creo que venga por el comparador, sino como dije antes, por el circuito de muestreo, recuerda que el puerto no es ADC puro, al tener un circuito multiplexor vas a tener cierta resistencia en los transistores de este, y luego viene un condensador de muestreo, lo que hace el ADC es, por un instante capturar una muestra conectando el condensador para cargarlo, después lo desconecta y es cuando el SAR compara la carga con el DAC, el factor clave aquí, es esa red RC que limita la frecuencia, si el tiempo de muestra es muy corto, puede no igualar el voltaje.

El prescaler divide hasta 128, con eso tienes 125kHz de un cristal de 16MHz, no necesitas prescaler oculto, lo que dice que hay es lo que tiene, es responsabilidad del programador elegir el valor adecuado.
 
Última edición:
Atrás
Arriba