Precisión del ADC del ATMega

Puede parece una pregunta chorra, pero, asumiendo una alimentación estable, y que se va a medir un tensión constante (conseguida, por ejemplo, con un divisor resistivo partiendo de una fuente de alimentación de la misma calidad), ¿el conversor ADC del ATMega llega realmente a la precisión de 10 bits?

Lo lógico sería que si, pero lo que no sé es si el propio ruido de conmutación dentro del chip hace que realmente el último bit no sirva para nada.
Por ejemplo, ¿tienen entradas de alimentación separada VCC - AVCC el chip?

A parte están los problemas de diseño del PCB donde se monte, que por lo que he estado viendo por ahí, los arduinos estandar dejan mucho de desear.

Y ya por último, ¿las medidas del ATMega son radiometrica (ratiometric), si no usas Aref externa? Es decir, se ven realmente afectadas por la tensión de alimentación real del chip que, por ejemplo, cuando se usa USB, es algo menor?

Las medidas son relativamente fiables si no tienes mucho ruido en los railes de alimentación. El ruido de conmutación se cuela en las medidas y verás como el rango dinámico se ve afectado.

Contestando a tus preguntas:

  • el bit menos significativos lo vas a perder de todas todas con las placas de Arduino. En la vinciDuino no tanto (me pueden los colores ;-))
  • siempre puedes implementar por SW un filtro paso bajo para eliminar los picos en las lecturas.
  • el AVR tiene entradas de alimentación separadas, Vcc y AVcc al igual que los planos de tierra separados. Si te descargas el esquemático de la vinciDuino, verás como AVcc está derivada de Vcc pero con su correspondiente filtro en Pi y los planos de tierra AGND y GND están separados y unidos en un único punto en la placa.
  • Para mejorar las lecturas analógica (ojo solo para aplicaciones que lo requierar) la gama ATMega tiene un modo para mandar a dormir al micro mientras se hace la conversión AD. Es un modo "power saving" donde prácticamente toda la electrónica la madas a dormir. Funciona muy bien. El uso es como el de un chupete - configuras interrupciones, configuras el modo power save (quiero recordar que se llama ADC noise reduction mode), configuras conversión y mandas a dormir al micro. En el momento que mandes a dormir al micro, comenzará la conversión y te despertará cuando termine. Lo puedes ver en el datasheet de cualquier AVR (328p o 32U4). También puedes jugar con los tiempos de conversión para tener unas lecturas más "fiables".
  • El procesador también tiene un comparador con un modulo especial para cancelar el ruido, util por ejemplo para detectar un consumo excesivo y cortar alimentación (vamos, hacerse un polyswitch inteligente).
  • En toda la familia AVR puedes seleccionar la referencia que usa el conversor ADC: AVcc (tiene que estar a +/- 0.3V de Vcc), referencia externa usando Vref, referencia interna "bandgap" de 2.56V (creo recordar). Todas las medidas se hacen relativas a cualquiera de estas tensiones.
  • En el ATMega 32U4 también tiene entradas diferenciales, muy útiles para rechazar ruido.

Bueno,
es que me tendré que leer el daatsheet entero cuando empiece a jugar con el juguete ... menos mal que casi, casi, casi me gusta :slight_smile:

Si realmente necesitas algo mejor que lo que trae de serie algunas librerías lo mejor es leerse el datasheets. El micro es muy flexible.

@fm perdon por molestar pero tu sabes bastante de los atmega. Te pregunto: he tomado la idea de usar el atmega32au4 para otro proyecto y no voy a usar la parte analogica, o talvez solo 1 canal para un termometro lm35, hace falta el filtro? puedo usar un filtro LCL tipo murata? me quedo chico de espacio en el pcb y queria ahorrar espacio.

Pues realmente depende mucho de tu aplicación. Si lo que necesitas es sacar los 0.5 grados de resolución del LM35 o no. Si la respuesta es si, su alimentación no debería tener un rizado superior a los 3-4mV. Aunque siempre puedes promediar. Normalmente si ya tienes un filtro en Avcc y alimentas el LM35 con ese raíl, con un desacoplo debería valerte y siempre puedes mejorar las lecturas promediando varias adquisiciones des ADC.

Si no distingues entre Vcc y AVcc en tu aplicación entonces dependerá mucho de: la aplicación y rutado.

Gracias, voy a reordenar para ver si cabe y dejar el filtro por las dudas.

Para el que quiera ampliar el tema, Atmel tiene una interesante nota técnica:
http://www.atmel.com/images/doc8003.pdf

Saludos,

Igor R.