Saltar al contenido principal
LibreTexts Español

25.2: Sistema ATMega ADC

  • Page ID
    82267
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Un diagrama de bloques del sistema ATMega ADC se encuentra en la Figura\(\PageIndex{1}\).

    Circuitos ADC (Atmel 2014).
    Figura\(\PageIndex{1}\): Circuito ADC (Atmel 2014).

    El corazón del sistema es un solo DAC de aproximación sucesiva con resolución de 10 bits. La velocidad máxima de conversión a resolución completa es de aproximadamente 15 k muestras por segundo. Claramente esto es insuficiente para aplicaciones como audio o video con calidad de CD, pero es más que lo suficientemente rápido para la mayoría de monitoreo de sensores e interfaces de usuario. Las especificaciones de rendimiento del convertidor incluyen un error de no linealidad integral de 0.5 LSB y una precisión absoluta de ±2 LSB. Una referencia a bordo está disponible aunque también se puede usar una referencia externa. El convertidor incluye un sistema de muestreo y retención para estabilizar la medición y cambiar rápidamente las señales de entrada. Hay un mux de ocho canales aunque solo seis de estos canales se utilizan en algunos paquetes (el paquete utilizado en la configuración estándar de la placa Arduino Uno usa seis). El circuito de entrada está optimizado para fuentes que tienen una impedancia de salida de 10 KΩ o menos. También es muy importante reconocer que el sistema es unipolar y sólo responderá a voltajes positivos. Si la señal a medir es bipolar, se requerirá algún tipo de cambio de nivel de CC.

    Existen varios registros asociados con el sistema ADC. Estos se muestran en la Tabla\(\PageIndex{1}\).

    Tabla\(\PageIndex{1}\): Registros ADC.
    Registrar Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    ADCSRA ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
    ADCSRB - ACME - - - ADTS2 ADTS1 ADTS0
    ADMUX REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0
    ADCH ADC9/- ADC8/- ADC7/- ADC6/- ADC5/- ADC4/- ADC3/9 ADC2/8
    ADCL ADC1/7 ADC0/6 -/ADC5 -/ADC4 -/ADC3 -/ADC2 -/ADC1 -/ADC0

    ADCSRA y ADCSRB son los registros analógico-digitales de control y estado. Aquí están sus descripciones de bits:

    • ADEN: ENable. Establezca en uno para habilitar el sistema analógico-digital.
    • ADSC: Iniciar conversión. Establezca en uno para iniciar una conversión. Cuando se complete la conversión, el hardware restablecerá este bit a cero. Escribir cero a este bit no tendrá ningún efecto.
    • ADATE: Activación automática del disparador. Establezca en uno para el modo de disparo automático. Un borde ascendente en la señal de disparo seleccionada iniciará una conversión. La fuente de activación se selecciona a través de los bits ADTS en el registro ADCSRB (abajo).
    • ADIF: Indicador de Interrupción. Esto se usa con el modo de interrupción. Este bit se establece cuando se completa una conversión y se actualizan los registros de datos. Este bit es borrado por el hardware cuando se ejecuta la rutina del controlador de interrupciones. Usar con ADIE.
    • ADIE: Interrupción Habilitada. Establezca en uno para habilitar la interrupción de conversión ADC. Usar con ADIF.
    • ADPS2-0: Brocas preescaladoras. Estos bits se utilizan para dividir el reloj del sistema al reloj ADC. 000 y 001 producen la división por dos y los valores crecientes duplican la división del reloj con 111 rindiendo dividir por 128.
    • ACME: Comparador analógico multiplexor habilitado. Establecer estos bits permite que cualquiera de los ocho pines ADC multiplexados reemplace la entrada negativa al comparador analógico.
    • ADTS2-0: Fuente de activación. Si ADATE se establece en uno, estos bits determinan la fuente de activación. 000 es el modo de ejecución libre, 001 disparadores del comparador analógico, 010 usa la Solicitud de Interrupción Externa 0, y los valores restantes establecen varias fuentes de temporizador/contador.

    ADMUX es el registro de selección de multiplexores analógico-digitales. También se utiliza para la selección de referencias y justificación de datos. Las descripciones de bits siguen:

    • REFS 1-0: Voltajes de referencia. 00 produce el pin AREF, 01 produce AVCC, 11 produce una referencia interna de 1.1 voltios y 10 está reservado.
    • ADLAR: Ajuste Izquierdo Resultado. Establecer este bit justificará a la izquierda los bits de salida en los registros ADCH/ADCL. Poner a cero a la derecha lo justifica.
    • MUX3-0: Multiplexor. Estos bits seleccionan el pin de entrada. 000 selecciona ADC0, 001 selecciona ADC1 y así sucesivamente a 1000 seleccionando ADC8 (el sensor de temperatura). 1110 selecciona la referencia de 1.1 voltios y 1111 selecciona tierra. Todos los demás valores están reservados.

    Finalmente tenemos ADCH y ADCL, los registros de salida ADC High y Low. Hay dos registros porque este es un convertidor de 10 bits pero los registros solo contienen ocho bits cada uno. Hay dos modos de operación en conjunto con el bit ADLAR en el registro ADMUX. Si se establece ADLAR, los ocho bits superiores se colocarán en ADCH y los dos bits inferiores se colocarán en la parte superior de ADCL. Si se borra ADLAR entonces los ocho bits inferiores se encontrarán en ADCL y los dos bits superiores se encontrarán en la parte inferior del ADCH. Simplemente piense en los dos registros como un solo registro de 16 bits con los bits empujados hacia la izquierda o hacia la derecha como se muestra en la Tabla\(\PageIndex{2}\).

    Cuadro\(\PageIndex{2}\): Justificación de datos.
    ADCH ADCL
    ADLAR Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    1 ADC 9 ADC 8 ADC 7 ADC 6 ADC 5 ADC 4 ADC 3 ADC 2 ADC 1 ADC 0 - - - - - -
    0 - - - - - - ADC 9 ADC 8 ADC 7 ADC 6 ADC 5 ADC 4 ADC 3 ADC 2 ADC 1 ADC 0

    Si solo se necesitan ocho bits de resolución, es posible justificar a la izquierda y leer solo ADCH, ignorando ADCL.

    La operación de conversión única es bastante sencilla. Primero, configura tu sección de inicialización. Esto comienza con la configuración de ADEN para habilitar el sistema. Después decide el valor adecuado de la preescala. Las especificaciones del chip indican que los sucesivos circuitos de aproximación funcionarán mejor con un reloj ADC en el rango de 50 kHz a 200 kHz. Una conversión típica tomará 13 ciclos de reloj ADC (la primera conversión tomará 25 debido a la sobrecarga de inicialización). Una vez determinado esto, configure ADLAR para justificación de datos y REFS para el voltaje de referencia. Luego configure los bits ADMUX para determinar el canal de entrada. Finalmente, configure ADSC para iniciar una conversión. Puedes esperar en este bit o volver a él más tarde. Cuando se complete la conversión, el hardware la restablecerá a cero. En ese punto, lea el valor de ADCL y combine (shift y OR) con el valor leído de ADCH en un entero de 16 bits. Tenga en cuenta que debe leer ADCL antes de leer ADCH. La lectura de ADCL bloquea los registros ADC evitando que el hardware sobrescriba los registros en una conversión posterior. La lectura de ADCH los desbloquea.

    Vamos a echar un vistazo más de cerca al proceso de software en el próximo capítulo.


    This page titled 25.2: Sistema ATMega ADC is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.