el mÓdulo adc de los avr.pdf

27
UNIVERSIDAD NACIONAL DEL CALLAO FACULTAD DE INGENIERヘA ELノCTRICA Y ELECTRモNICA MICROCONTROLADORE –ATMEGA8 1 UNIVERSIDAD NACIONAL DEL CALLAO FACULTAD DE INGENIERIA ELECTRICA Y ELECTRモNICA CURSO: MICROCONTROLADORES MODULO ADC ATMEGA8 - LENGUAJE C PROFESOR: MSc ING. ASTOCONDOR VILLAR JACOB CALLAO, ........... DEL ..............

Upload: mipapi

Post on 20-Jan-2016

297 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 1

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERIA ELECTRICA Y ELECTRÓNICA

CURSO: MICROCONTROLADORES

MODULO ADC

ATMEGA8 - LENGUAJE C

PROFESOR: MSc ING. ASTOCONDOR VILLAR JACOB

CALLAO, ........... DEL ..............

Page 2: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 2

EL MÓDULO ADC DE LOS AVR

Los AVR de la serie megaAVR tienen un ADC de aproximaciones sucesivas de 10 bits. Es unosolo pero está multiplexado para dar cabida hasta a 8 entradas analógicas. Se convierte solo unaentrada o la diferencia de dos entradas analógicas a la vez.

Concretamente, los AVR de la serie ATmegaXX4 cuentan con 8 canales de conversión, todosubicados en su puerto A. Por otro lado los AVR de la serie ATmegaXX8 destinan todo supuerto C como canales de entrada del ADC.

El detalle con los ATmegaXX8 es que su puerto C solo tiene 6 pines si vienen en empaque DIPpero tiene 8 pines en los empaques TQFP y QFN/MLF. De modo que estos megaAVR puedentener 6 u 8 canales de conversión dependiendo de su empaque.

Operación del Módulo ADC

En las aplicaciones ordinarias solo los registros ADCSRA y ADMUX son los que se manipulanactivamente. Los registros ADCH y ADCL son de solo lectura y como no tienen formato, bastacon recordar sus nombres.

ADCSRA. Es el principal registro de control y estado del ADC. Manipulando los bitsde este registro iniciamos la conversión, establecemos la velocidad de conversión oelegimos el formato del resultado de la conversión. Veremos los detalles en adelante.

ADCSRB. Es el segundo registro de control y estado del ADC. Sus pocos bitsfuncionales configuran el modo de conversiones automáticas y como ese modo esraramente usado, el registro ADCSRB tampoco está muy avistado en los programas.Los viejos AVR no lo tienen.

ADCH y ADCL. Son los registros que almacenan el resultado de la conversión. Unoguarda 8 bits y el otro los dos bits restantes. La forma como se distribuyen se debeespecificar con el bit ADLAR del registro ADMUX.

Para cuestiones de programación estos registros se fusionan para formar un únicoregistro de 16 bits normalmente llamado ADC o ADCW.

ADMUX. Es el registro que selecciona el canal de conversión y establece los voltajesde referencia.

DIDR0. Es también un nuevo registro no disponible en los viejos AVR. Su función esdesconectar los pines seleccionados como canales latentes del conversor para así evitarque se desgaste corriente en parte del circuito del ADC.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 2

EL MÓDULO ADC DE LOS AVR

Los AVR de la serie megaAVR tienen un ADC de aproximaciones sucesivas de 10 bits. Es unosolo pero está multiplexado para dar cabida hasta a 8 entradas analógicas. Se convierte solo unaentrada o la diferencia de dos entradas analógicas a la vez.

Concretamente, los AVR de la serie ATmegaXX4 cuentan con 8 canales de conversión, todosubicados en su puerto A. Por otro lado los AVR de la serie ATmegaXX8 destinan todo supuerto C como canales de entrada del ADC.

El detalle con los ATmegaXX8 es que su puerto C solo tiene 6 pines si vienen en empaque DIPpero tiene 8 pines en los empaques TQFP y QFN/MLF. De modo que estos megaAVR puedentener 6 u 8 canales de conversión dependiendo de su empaque.

Operación del Módulo ADC

En las aplicaciones ordinarias solo los registros ADCSRA y ADMUX son los que se manipulanactivamente. Los registros ADCH y ADCL son de solo lectura y como no tienen formato, bastacon recordar sus nombres.

ADCSRA. Es el principal registro de control y estado del ADC. Manipulando los bitsde este registro iniciamos la conversión, establecemos la velocidad de conversión oelegimos el formato del resultado de la conversión. Veremos los detalles en adelante.

ADCSRB. Es el segundo registro de control y estado del ADC. Sus pocos bitsfuncionales configuran el modo de conversiones automáticas y como ese modo esraramente usado, el registro ADCSRB tampoco está muy avistado en los programas.Los viejos AVR no lo tienen.

ADCH y ADCL. Son los registros que almacenan el resultado de la conversión. Unoguarda 8 bits y el otro los dos bits restantes. La forma como se distribuyen se debeespecificar con el bit ADLAR del registro ADMUX.

Para cuestiones de programación estos registros se fusionan para formar un únicoregistro de 16 bits normalmente llamado ADC o ADCW.

ADMUX. Es el registro que selecciona el canal de conversión y establece los voltajesde referencia.

DIDR0. Es también un nuevo registro no disponible en los viejos AVR. Su función esdesconectar los pines seleccionados como canales latentes del conversor para así evitarque se desgaste corriente en parte del circuito del ADC.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 2

EL MÓDULO ADC DE LOS AVR

Los AVR de la serie megaAVR tienen un ADC de aproximaciones sucesivas de 10 bits. Es unosolo pero está multiplexado para dar cabida hasta a 8 entradas analógicas. Se convierte solo unaentrada o la diferencia de dos entradas analógicas a la vez.

Concretamente, los AVR de la serie ATmegaXX4 cuentan con 8 canales de conversión, todosubicados en su puerto A. Por otro lado los AVR de la serie ATmegaXX8 destinan todo supuerto C como canales de entrada del ADC.

El detalle con los ATmegaXX8 es que su puerto C solo tiene 6 pines si vienen en empaque DIPpero tiene 8 pines en los empaques TQFP y QFN/MLF. De modo que estos megaAVR puedentener 6 u 8 canales de conversión dependiendo de su empaque.

Operación del Módulo ADC

En las aplicaciones ordinarias solo los registros ADCSRA y ADMUX son los que se manipulanactivamente. Los registros ADCH y ADCL son de solo lectura y como no tienen formato, bastacon recordar sus nombres.

ADCSRA. Es el principal registro de control y estado del ADC. Manipulando los bitsde este registro iniciamos la conversión, establecemos la velocidad de conversión oelegimos el formato del resultado de la conversión. Veremos los detalles en adelante.

ADCSRB. Es el segundo registro de control y estado del ADC. Sus pocos bitsfuncionales configuran el modo de conversiones automáticas y como ese modo esraramente usado, el registro ADCSRB tampoco está muy avistado en los programas.Los viejos AVR no lo tienen.

ADCH y ADCL. Son los registros que almacenan el resultado de la conversión. Unoguarda 8 bits y el otro los dos bits restantes. La forma como se distribuyen se debeespecificar con el bit ADLAR del registro ADMUX.

Para cuestiones de programación estos registros se fusionan para formar un únicoregistro de 16 bits normalmente llamado ADC o ADCW.

ADMUX. Es el registro que selecciona el canal de conversión y establece los voltajesde referencia.

DIDR0. Es también un nuevo registro no disponible en los viejos AVR. Su función esdesconectar los pines seleccionados como canales latentes del conversor para así evitarque se desgaste corriente en parte del circuito del ADC.

Page 3: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 3

Registro ADCSRAADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0

Registro ADCSRB----- ACME --- --- --- ADTS2 ADTS1 ADTS0

Registro ADMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Registro DIDR0ADC7D ADC6D ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D

Registro ADCH

Registro ADCL

El ADC de los megaAVR es bastante fácil de controlar si se le emplea en su modo habitual deconversiones normales de entrada única. Tras configurar este modo, se escoge un canal a la vezy se setea el bit ADSC para iniciar la conversión. Después esperamos a que este mismo bit selimpie automáticamente por hardware como señal de que la conversión terminó, y cuando lohaga podremos leer el resultado. Eso sería todo.

El proceso descrito se puede desglosar en los siguientes pasos. Los pasos 2 al 5 (que estánrelacionados con el registro ADMUX) no necesariamente tienen que ir en ese orden de hecho sepueden juntar todos en un solo paso. Esto es porque el registro ADMUX trabaja con un bufferde respaldo del cual es actualizado continuamente para asegurar un buen trabajo del ADC. Estoes, cuando escribimos en ADMUX en realidad escribimos en su buffer, el cual se copiacontinuamente al registro ADMUX hasta que se inicia la conversión. En ese momento elcopiado continuo se detiene y se reanudará cuando termine la conversión. De ese modo seevitan los resultados 'frankenstenianos' de lo que sería un mal uso del registro ADMUX.

1. Seleccionar el reloj del conversor ADC, con los bits ADPS2:ADPS0.

2. Seleccionar los voltajes de referencia del conversor, usando los bits REFS1 y REFS0.

3. Establecer la justificación del resultado con el bit ADLAR.

4. Seleccionar el canal o los canales de entrada del ADC, con los bits MUX4:MUX0.

5. Encender el módulo ADC, seteando el bit ADEN.

6. Iniciar la conversión, seteando el bit ADSC.

7. Esperar a que termine la conversión. Cuando esto pase el flag ADIF se pondrá a uno y

si la conversión es normal y el bit ADSC se limpiará automáticamente.

8. Leer el resultado de la conversión del par de registros ADCH: ADCL.

Para bien o para mal, la flexibilidad del ADC complica aún más su control, pues tambiénexisten el modo de conversiones diferenciales y el modo de conversiones auto-disparadas, elcual se puede aplicar para cada caso, es decir, el ADC puede desdoblar su operación hasta encuatro modos.

Page 4: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 4

Señales para iniciar conversiones normales y auto-disparadas.

Conversiones normales de entrada única, donde el ADC convierte el valor de un canal,cada vez que se setee el bit ADSC.

Conversiones normales de entradas diferenciales, donde el ADC convierte la diferenciade dos canales. La conversión se inicia seteando el bit ADSC.

Conversiones auto-disparadas de entrada única, donde el ADC convierte un canalcuando se produzca alguno de los eventos seleccionados por los bits ADTS2, ADTS1 yADTS0, que puede ser, por ejemplo, el desbordamiento de un Timer o simplemente laactivación del flag ADIF. Este último caso es peculiar y se conoce como modo deconversiones de corrida libre, porque el ADC realiza conversiones una tras otra sincesar. Aquí la primera conversión se inicia seteando el bit ADSC.

Conversiones auto-disparadas de entradas diferenciales. Es una combinación de los dosmodos anteriores.

No hay una forma explícita de establecer cada uno de estos cuatro modos de operación delADC. Si la conversión será de entrada única o diferencial será resultado de configurar elmultiplexor del ADC con los bits MUX4...MUX0. Por defecto las conversiones serán normales.Si queremos que se disparen automáticamente habrá que configurarlas con los bits ADTS2,ADTS1 y ADTS0 del registro ADCSRB, siempre que el bit ADATE de ADCSRA valga uno.

Tabla ADTS2ADTS2 ADTS1 ADTS0 Fuente de disparo0 0 0 Modo de Corrida Libre0 0 1 Comparador Analógico0 1 0 Interrupción Externa INT00 1 1 Coincidencia del Timer/Counter01 0 0 Desbordamiento del Timer/Counter01 0 1 Coincidencia B del Timer/Counter11 1 0 Desbordamiento del Timer/Counter11 1 1 Evento de Captura del Timer/Counter1

SELECCIÓN DEL CANAL DE CONVERSIÓN

Las 8 entradas analógicas del ADC son los pines del puerto A de los AVR que tienen 4 puertoso más. En los AVR de 3 puertos son los pines del puerto C; estos AVR tienen 6 entradasanalógicas si vienen en empaque PDIP u 8 si vienen en empaque TQFP, QFP o MLF. Las dosentradas adicionales son pines independientes, que no forman parte de ningún puerto.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 4

Señales para iniciar conversiones normales y auto-disparadas.

Conversiones normales de entrada única, donde el ADC convierte el valor de un canal,cada vez que se setee el bit ADSC.

Conversiones normales de entradas diferenciales, donde el ADC convierte la diferenciade dos canales. La conversión se inicia seteando el bit ADSC.

Conversiones auto-disparadas de entrada única, donde el ADC convierte un canalcuando se produzca alguno de los eventos seleccionados por los bits ADTS2, ADTS1 yADTS0, que puede ser, por ejemplo, el desbordamiento de un Timer o simplemente laactivación del flag ADIF. Este último caso es peculiar y se conoce como modo deconversiones de corrida libre, porque el ADC realiza conversiones una tras otra sincesar. Aquí la primera conversión se inicia seteando el bit ADSC.

Conversiones auto-disparadas de entradas diferenciales. Es una combinación de los dosmodos anteriores.

No hay una forma explícita de establecer cada uno de estos cuatro modos de operación delADC. Si la conversión será de entrada única o diferencial será resultado de configurar elmultiplexor del ADC con los bits MUX4...MUX0. Por defecto las conversiones serán normales.Si queremos que se disparen automáticamente habrá que configurarlas con los bits ADTS2,ADTS1 y ADTS0 del registro ADCSRB, siempre que el bit ADATE de ADCSRA valga uno.

Tabla ADTS2ADTS2 ADTS1 ADTS0 Fuente de disparo0 0 0 Modo de Corrida Libre0 0 1 Comparador Analógico0 1 0 Interrupción Externa INT00 1 1 Coincidencia del Timer/Counter01 0 0 Desbordamiento del Timer/Counter01 0 1 Coincidencia B del Timer/Counter11 1 0 Desbordamiento del Timer/Counter11 1 1 Evento de Captura del Timer/Counter1

SELECCIÓN DEL CANAL DE CONVERSIÓN

Las 8 entradas analógicas del ADC son los pines del puerto A de los AVR que tienen 4 puertoso más. En los AVR de 3 puertos son los pines del puerto C; estos AVR tienen 6 entradasanalógicas si vienen en empaque PDIP u 8 si vienen en empaque TQFP, QFP o MLF. Las dosentradas adicionales son pines independientes, que no forman parte de ningún puerto.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 4

Señales para iniciar conversiones normales y auto-disparadas.

Conversiones normales de entrada única, donde el ADC convierte el valor de un canal,cada vez que se setee el bit ADSC.

Conversiones normales de entradas diferenciales, donde el ADC convierte la diferenciade dos canales. La conversión se inicia seteando el bit ADSC.

Conversiones auto-disparadas de entrada única, donde el ADC convierte un canalcuando se produzca alguno de los eventos seleccionados por los bits ADTS2, ADTS1 yADTS0, que puede ser, por ejemplo, el desbordamiento de un Timer o simplemente laactivación del flag ADIF. Este último caso es peculiar y se conoce como modo deconversiones de corrida libre, porque el ADC realiza conversiones una tras otra sincesar. Aquí la primera conversión se inicia seteando el bit ADSC.

Conversiones auto-disparadas de entradas diferenciales. Es una combinación de los dosmodos anteriores.

No hay una forma explícita de establecer cada uno de estos cuatro modos de operación delADC. Si la conversión será de entrada única o diferencial será resultado de configurar elmultiplexor del ADC con los bits MUX4...MUX0. Por defecto las conversiones serán normales.Si queremos que se disparen automáticamente habrá que configurarlas con los bits ADTS2,ADTS1 y ADTS0 del registro ADCSRB, siempre que el bit ADATE de ADCSRA valga uno.

Tabla ADTS2ADTS2 ADTS1 ADTS0 Fuente de disparo0 0 0 Modo de Corrida Libre0 0 1 Comparador Analógico0 1 0 Interrupción Externa INT00 1 1 Coincidencia del Timer/Counter01 0 0 Desbordamiento del Timer/Counter01 0 1 Coincidencia B del Timer/Counter11 1 0 Desbordamiento del Timer/Counter11 1 1 Evento de Captura del Timer/Counter1

SELECCIÓN DEL CANAL DE CONVERSIÓN

Las 8 entradas analógicas del ADC son los pines del puerto A de los AVR que tienen 4 puertoso más. En los AVR de 3 puertos son los pines del puerto C; estos AVR tienen 6 entradasanalógicas si vienen en empaque PDIP u 8 si vienen en empaque TQFP, QFP o MLF. Las dosentradas adicionales son pines independientes, que no forman parte de ningún puerto.

Page 5: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 5

El ADC solo puede tomar una o dos entradas analógicas por conversión, así que cada vez que sedesee obtener un valor analógico externo se debe seleccionar previamente dicha entradaanalógica mediante los bits MUX4, MUX3, MUX2, MUX1 y MUX0 del registro ADMUX.

Registro ADMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

La siguiente tabla muestra todas las opciones posibles que se pueden obtener. Parececomplicado de descifrar pero enseguida lo explicaremos.

Cananles del ADC del microcontrolador AVRMUX4:MUX0 Entrada Única Entrada Diferencial Positiva Entrada Diferencial Negativa Ganancia00000 ADC0

N/A

00001 ADC100010 ADC200011 ADC300100 ADC400101 ADC500110 ADC600111 ADC7

01000

N/A

ADC0 ADC0 10x01001 ADC1 ADC0 10x01010 ADC0 ADC0 200x01011 ADC1 ADC0 200x01100 ADC2 ADC2 10x01101 ADC3 ADC2 10x01110 ADC2 ADC2 200x01111 ADC3 ADC2 200x10000 ADC0 ADC1 1x10001 ADC1 ADC1 1x10010 ADC2 ADC1 1x10011 ADC3 ADC1 1x10100 ADC4 ADC1 1x10101 ADC5 ADC1 1x10110 ADC6 ADC1 1x10111 ADC7 ADC1 1x11000 ADC0 ADC2 1x11001 ADC1 ADC2 1x11010 ADC2 ADC2 1x11011 ADC3 ADC2 1x11100 ADC4 ADC2 1x11101 ADC5 ADC2 1x

11110 1.1V ( )11111 0 V (GND)

Page 6: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 6

Observemos en primer lugar que la tabla se puede separar en tres secciones.

La primera parte corresponde al denominado modo de conversión simple o de entrada única,la segunda parte es del modo de conversión diferencial y en la tercera parte no se eligeningún canal analógico sino que se convierte el valor de la tensión o GND.

El modo de conversión de entrada única es el que se emplea en la gran mayoría de lasaplicaciones. Aquí los bits del multiplexor MUX4 y MUX3 valen 0 y el ADC solo puedeconvertir una de las 8 entradas analógicas a la vez. El diagrama funcional del ADC en este casose representa así.

Diagrama básico del ADC para conversiones de entrada única.

Debemos tener en cuenta que este modo es compatible en todos los módulos ADC de losmegaAVR que lo tienen. Sobra decir que no tendrán ningún efecto las configuraciones deMUX4:MUX0 que eligen los canales ADC6 y ADC7 en los AVR que no tienen estos pines. Dehecho los megaAVR de 3 puertos no tienen el bit MUX4 y es recomendable dejarlo siempre en 0.

En el modo de conversión diferencial las entradas analógicas se agrupan de a dos. Cada parse constituye por una Entrada Diferencial Positiva y una Entrada Diferencial Negativa. Todaslas combinaciones posibles están establecidas por los bits MUX4:MUX0, de acuerdo con latabla de arriba. Se puede observar allí y en la figura mostrada abajo que en este modo intervieneademás un amplificador de ganancia que puede multiplicar la diferencia entre las entradas porun factor de 1x, 10x o 200x antes de ser convertido a su valor analógico. El inconveniente delamplificador es que reduce la resolución del ADC a 8 bits si se usa la ganancia de 1x o 10x yhasta a 6 bits con la ganancia de 200x. Este modo de operación del ADC solo está disponible enlos megaAVR de 4 puertos o más.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 6

Observemos en primer lugar que la tabla se puede separar en tres secciones.

La primera parte corresponde al denominado modo de conversión simple o de entrada única,la segunda parte es del modo de conversión diferencial y en la tercera parte no se eligeningún canal analógico sino que se convierte el valor de la tensión o GND.

El modo de conversión de entrada única es el que se emplea en la gran mayoría de lasaplicaciones. Aquí los bits del multiplexor MUX4 y MUX3 valen 0 y el ADC solo puedeconvertir una de las 8 entradas analógicas a la vez. El diagrama funcional del ADC en este casose representa así.

Diagrama básico del ADC para conversiones de entrada única.

Debemos tener en cuenta que este modo es compatible en todos los módulos ADC de losmegaAVR que lo tienen. Sobra decir que no tendrán ningún efecto las configuraciones deMUX4:MUX0 que eligen los canales ADC6 y ADC7 en los AVR que no tienen estos pines. Dehecho los megaAVR de 3 puertos no tienen el bit MUX4 y es recomendable dejarlo siempre en 0.

En el modo de conversión diferencial las entradas analógicas se agrupan de a dos. Cada parse constituye por una Entrada Diferencial Positiva y una Entrada Diferencial Negativa. Todaslas combinaciones posibles están establecidas por los bits MUX4:MUX0, de acuerdo con latabla de arriba. Se puede observar allí y en la figura mostrada abajo que en este modo intervieneademás un amplificador de ganancia que puede multiplicar la diferencia entre las entradas porun factor de 1x, 10x o 200x antes de ser convertido a su valor analógico. El inconveniente delamplificador es que reduce la resolución del ADC a 8 bits si se usa la ganancia de 1x o 10x yhasta a 6 bits con la ganancia de 200x. Este modo de operación del ADC solo está disponible enlos megaAVR de 4 puertos o más.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 6

Observemos en primer lugar que la tabla se puede separar en tres secciones.

La primera parte corresponde al denominado modo de conversión simple o de entrada única,la segunda parte es del modo de conversión diferencial y en la tercera parte no se eligeningún canal analógico sino que se convierte el valor de la tensión o GND.

El modo de conversión de entrada única es el que se emplea en la gran mayoría de lasaplicaciones. Aquí los bits del multiplexor MUX4 y MUX3 valen 0 y el ADC solo puedeconvertir una de las 8 entradas analógicas a la vez. El diagrama funcional del ADC en este casose representa así.

Diagrama básico del ADC para conversiones de entrada única.

Debemos tener en cuenta que este modo es compatible en todos los módulos ADC de losmegaAVR que lo tienen. Sobra decir que no tendrán ningún efecto las configuraciones deMUX4:MUX0 que eligen los canales ADC6 y ADC7 en los AVR que no tienen estos pines. Dehecho los megaAVR de 3 puertos no tienen el bit MUX4 y es recomendable dejarlo siempre en 0.

En el modo de conversión diferencial las entradas analógicas se agrupan de a dos. Cada parse constituye por una Entrada Diferencial Positiva y una Entrada Diferencial Negativa. Todaslas combinaciones posibles están establecidas por los bits MUX4:MUX0, de acuerdo con latabla de arriba. Se puede observar allí y en la figura mostrada abajo que en este modo intervieneademás un amplificador de ganancia que puede multiplicar la diferencia entre las entradas porun factor de 1x, 10x o 200x antes de ser convertido a su valor analógico. El inconveniente delamplificador es que reduce la resolución del ADC a 8 bits si se usa la ganancia de 1x o 10x yhasta a 6 bits con la ganancia de 200x. Este modo de operación del ADC solo está disponible enlos megaAVR de 4 puertos o más.

Page 7: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 7

Diagrama básico del ADC para conversiones de entradas diferenciales.

Finalmente, hay dos combinaciones de los bits MUX4:MUX0 que hacen que el valor analógicoa convertir sea la señal de tierra GND o una tensión de referencia denominada que varíasegún el microcontrolador. En los megaAVR de las series 4xx y 8xx que son los enfocados conprioridad en cursomicros.com esta tensión vale 1.1V. Si vamos a trabajar con esta característicautilizando otros modelos de AVR, deberemos revisar su datasheet.

Conversión de las tensiones de referencia GND y .

LOS VOLTAJES DE REFERENCIA

Son los valores analógicos límites entre los que deberá estar comprendida la tensión analógica aconvertir. El nivel superior se representa por Vref+ y el inferior por Vref-.

Como seguramente lo habrás notado en los diagramas anteriores, el valor de Vref- es igual alnegativo de Vref+ cuando el ADC realiza conversiones diferenciales y es igual a 0V en losdemás casos. En cualquier modo de operación Vref+ se puede configurar por los bits REFS1 yREFS0, del registro ADMUX y podemos escoger una de estas tres opciones:

El valor del pin AVCC El valor del pin AREF Un Voltaje de Referencia Interno (de 1.1V o 2.56 V) que provee el megaAVR.

Registro DMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 7

Diagrama básico del ADC para conversiones de entradas diferenciales.

Finalmente, hay dos combinaciones de los bits MUX4:MUX0 que hacen que el valor analógicoa convertir sea la señal de tierra GND o una tensión de referencia denominada que varíasegún el microcontrolador. En los megaAVR de las series 4xx y 8xx que son los enfocados conprioridad en cursomicros.com esta tensión vale 1.1V. Si vamos a trabajar con esta característicautilizando otros modelos de AVR, deberemos revisar su datasheet.

Conversión de las tensiones de referencia GND y .

LOS VOLTAJES DE REFERENCIA

Son los valores analógicos límites entre los que deberá estar comprendida la tensión analógica aconvertir. El nivel superior se representa por Vref+ y el inferior por Vref-.

Como seguramente lo habrás notado en los diagramas anteriores, el valor de Vref- es igual alnegativo de Vref+ cuando el ADC realiza conversiones diferenciales y es igual a 0V en losdemás casos. En cualquier modo de operación Vref+ se puede configurar por los bits REFS1 yREFS0, del registro ADMUX y podemos escoger una de estas tres opciones:

El valor del pin AVCC El valor del pin AREF Un Voltaje de Referencia Interno (de 1.1V o 2.56 V) que provee el megaAVR.

Registro DMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 7

Diagrama básico del ADC para conversiones de entradas diferenciales.

Finalmente, hay dos combinaciones de los bits MUX4:MUX0 que hacen que el valor analógicoa convertir sea la señal de tierra GND o una tensión de referencia denominada que varíasegún el microcontrolador. En los megaAVR de las series 4xx y 8xx que son los enfocados conprioridad en cursomicros.com esta tensión vale 1.1V. Si vamos a trabajar con esta característicautilizando otros modelos de AVR, deberemos revisar su datasheet.

Conversión de las tensiones de referencia GND y .

LOS VOLTAJES DE REFERENCIA

Son los valores analógicos límites entre los que deberá estar comprendida la tensión analógica aconvertir. El nivel superior se representa por Vref+ y el inferior por Vref-.

Como seguramente lo habrás notado en los diagramas anteriores, el valor de Vref- es igual alnegativo de Vref+ cuando el ADC realiza conversiones diferenciales y es igual a 0V en losdemás casos. En cualquier modo de operación Vref+ se puede configurar por los bits REFS1 yREFS0, del registro ADMUX y podemos escoger una de estas tres opciones:

El valor del pin AVCC El valor del pin AREF Un Voltaje de Referencia Interno (de 1.1V o 2.56 V) que provee el megaAVR.

Registro DMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Page 8: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 8

Si los bits REFS1:REFS0 eligen como voltaje de referencia Vref+ al pin AVCC, ese pin lodebemos conectar a Vcc mediante un filtro pasa-bajas. Puesto que el pin AREF quedainternamente conectado a AVCC, es más que recomendable colocarle un capacitor para filtrar elruido. Abajo se muestra un boceto del circuito descrito. Recordemos que el pin AVCC es enprincipio la alimentación del puerto que lleva los canales del ADC, así como la alimentación delmismo módulo ADC. Sin embargo, incluso de no usar el ADC, el pin AVCC se debe conectar aVcc, con filtro o sin él.

Si los bits REFS1:REFS0 eligen como voltaje de referencia Vref+ al pin AREF, podemosconectar a ese pin cualquier fuente de voltaje, siempre que no supere el valor de la alimentaciónVcc y en caso de que trabajemos con canales diferenciales no debe ser menor de 2 V. De estoúltimo se deduce que no se podría elegir el Voltaje de Referencia Interno de 1.1V, descritoluego.

Es muy poco frecuente programar el ADC para que opere de este modo, pero si lo vamos ahacer, debemos fijarnos bien en la configuración de los bits REF1 y REF0. Si aplicamos unafuente de tensión en el pin AREF y los bits REF1 y REF0 seleccionan una referencia diferente,entonces se producirá un corto-circuito interno entre el pin AREF y la referencia seleccionada(AVCC, por ejemplo).

Los bits REFS1:REFS0 también pueden elegir como Vref+ alguno de los Voltajes deReferencia Internos que provee el AVR, pero aquí se debe tener en cuenta que sus valorespueden variar entre las diferentes series de AVR, incluso si son de familias cercanas. Tambiénen este caso la referencia se verá reflejada por el pin AREF, de modo que deberíamos conectarallí un capacitor de estabilización.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 8

Si los bits REFS1:REFS0 eligen como voltaje de referencia Vref+ al pin AVCC, ese pin lodebemos conectar a Vcc mediante un filtro pasa-bajas. Puesto que el pin AREF quedainternamente conectado a AVCC, es más que recomendable colocarle un capacitor para filtrar elruido. Abajo se muestra un boceto del circuito descrito. Recordemos que el pin AVCC es enprincipio la alimentación del puerto que lleva los canales del ADC, así como la alimentación delmismo módulo ADC. Sin embargo, incluso de no usar el ADC, el pin AVCC se debe conectar aVcc, con filtro o sin él.

Si los bits REFS1:REFS0 eligen como voltaje de referencia Vref+ al pin AREF, podemosconectar a ese pin cualquier fuente de voltaje, siempre que no supere el valor de la alimentaciónVcc y en caso de que trabajemos con canales diferenciales no debe ser menor de 2 V. De estoúltimo se deduce que no se podría elegir el Voltaje de Referencia Interno de 1.1V, descritoluego.

Es muy poco frecuente programar el ADC para que opere de este modo, pero si lo vamos ahacer, debemos fijarnos bien en la configuración de los bits REF1 y REF0. Si aplicamos unafuente de tensión en el pin AREF y los bits REF1 y REF0 seleccionan una referencia diferente,entonces se producirá un corto-circuito interno entre el pin AREF y la referencia seleccionada(AVCC, por ejemplo).

Los bits REFS1:REFS0 también pueden elegir como Vref+ alguno de los Voltajes deReferencia Internos que provee el AVR, pero aquí se debe tener en cuenta que sus valorespueden variar entre las diferentes series de AVR, incluso si son de familias cercanas. Tambiénen este caso la referencia se verá reflejada por el pin AREF, de modo que deberíamos conectarallí un capacitor de estabilización.

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 8

Si los bits REFS1:REFS0 eligen como voltaje de referencia Vref+ al pin AVCC, ese pin lodebemos conectar a Vcc mediante un filtro pasa-bajas. Puesto que el pin AREF quedainternamente conectado a AVCC, es más que recomendable colocarle un capacitor para filtrar elruido. Abajo se muestra un boceto del circuito descrito. Recordemos que el pin AVCC es enprincipio la alimentación del puerto que lleva los canales del ADC, así como la alimentación delmismo módulo ADC. Sin embargo, incluso de no usar el ADC, el pin AVCC se debe conectar aVcc, con filtro o sin él.

Si los bits REFS1:REFS0 eligen como voltaje de referencia Vref+ al pin AREF, podemosconectar a ese pin cualquier fuente de voltaje, siempre que no supere el valor de la alimentaciónVcc y en caso de que trabajemos con canales diferenciales no debe ser menor de 2 V. De estoúltimo se deduce que no se podría elegir el Voltaje de Referencia Interno de 1.1V, descritoluego.

Es muy poco frecuente programar el ADC para que opere de este modo, pero si lo vamos ahacer, debemos fijarnos bien en la configuración de los bits REF1 y REF0. Si aplicamos unafuente de tensión en el pin AREF y los bits REF1 y REF0 seleccionan una referencia diferente,entonces se producirá un corto-circuito interno entre el pin AREF y la referencia seleccionada(AVCC, por ejemplo).

Los bits REFS1:REFS0 también pueden elegir como Vref+ alguno de los Voltajes deReferencia Internos que provee el AVR, pero aquí se debe tener en cuenta que sus valorespueden variar entre las diferentes series de AVR, incluso si son de familias cercanas. Tambiénen este caso la referencia se verá reflejada por el pin AREF, de modo que deberíamos conectarallí un capacitor de estabilización.

Page 9: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 9

Las siguientes tablas muestran la configuración de los bits REFS1:REFS0 correspondiente a losAVR de las series ATmegaXX4 y ATmegaXX8. Podemos observar que la clara divergencia seencuentra en la elección de los Voltajes de Referencia Internos. Si vamos a utilizar estasreferencias en otros AVR será recomendable revisar su datasheet respectivo.

Tabla REFS1REFS1 REFS0 Voltaje de Referencia Vref+ para los ATmegaXX40 0 Pin AREF0 1 Pin AVCC con capacitor externo en el pin AREF1 0 Voltaje de Referencia Interno de 1.1V con capacitor externo en el pin AREF1 1 Voltaje de Referencia Interno de 2.56V con capacitor externo en el pin AREF

Tabla REFS1REFS1 REFS0 Voltaje de Referencia Vref+ para los ATmegaXX80 0 Pin AREF0 1 Pin AVCC con capacitor externo en el pin AREF1 0 Reservado1 1 Voltaje de Referencia Interno de 1.1V con capacitor externo en el pin AREF

Suponiendo que trabajamos con conversiones de entrada única, esto es, Vref- conectado a tierra,GND = 0V, como se ve en la siguiente figura, entonces una entrada analógica igual a 0V oinferior se convertirá en 0x000 y las tensiones analógicas iguales a Vref+ o superiores seconvertirán en el valor digital 0x3FF. Recordando la teoría estudiada al inicio de este capítulo,cualquier otro valor analógico Vin comprendido entre estos límites estará sujeto a la fórmula.

Voltajes de Referencia del ADC para conversiones de entrada única.

Page 10: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 10

Por otro lado, si nuestro ADC realiza conversiones diferenciales, entonces la máximadiferencia positiva o negativa que se podrá convertir correctamente será (+/- Vref+)/ganancia,siendo esta ganancia igual a 1, 10 ó 200. En este caso el resultado será un número entero consigno, es decir, positivo o negativo, formateado en complemento a dos. De acuerdo con esto, lamáxima diferencia negativa corresponderá al valor digital 0x200 = -512 y la máxima diferenciapositiva se convertirá en 0x1FF = +511. Cualquier otra diferencia analógica interpolada sedeberá interpretar con la siguiente fórmula.

Donde Vpos en la entrada diferencial positiva y Vneg es la entrada diferencial negativa.

Voltajes de Referencia del ADC para conversiones de entradas diferenciales.

La primera conversión después de cambiar los voltajes de referencia es imprecisa y serecomienda descartarla.

Page 11: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 11

RESULTADO DE LA CONVERSIÓN

El resultado de la conversión es una cantidad binaria de 10 bits que se deposita entre losregistros ADCH y ADCL, según la justificación mostrada en la siguiente figura y de acuerdocon el bit ADLAR (ADC Left Adjust Result) del registro ADMUX.

Registro DMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Justificación del resultado entre los registros ADCH y ADCL

Obviamente debemos esperar a que termine una conversión antes de leer un dato válido de estosregistros. Para esto podemos comprobar la activación del flag ADIF (del registro ADCSRA) ola puesta a cero del bit ADSC (también de ADCSRA), si es que el ADC opera en modo normal.

Los dos registros del resultado son de solo lectura y el acceso a ellos no involucra una operaciónatómica. Sin embargo, debemos saber que después de leer el registro ADCL queda bloqueada laactualización de los otros registros del ADC hasta que leamos el registro ADCH. De este modose asegura que los datos presentes en estos registros corresponden a una misma conversión. Deaquí se desprende que al terminar una conversión debemos empezar por leer ADCL y luegoADCH, o simplemente podemos tomar el valor de ADCH y así permitir que se puedan depositaren ellos los valores de nuevas conversiones.

Cuando se establece la justificacion derecha los registros ADCH y ADCL conforman el registrode 16 bits llamado simplemente ADC y puede ser así reconocido por los compiladores C puestoque ocupan posiciones contiguas en el espacio de los registros de E/S

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 11

RESULTADO DE LA CONVERSIÓN

El resultado de la conversión es una cantidad binaria de 10 bits que se deposita entre losregistros ADCH y ADCL, según la justificación mostrada en la siguiente figura y de acuerdocon el bit ADLAR (ADC Left Adjust Result) del registro ADMUX.

Registro DMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Justificación del resultado entre los registros ADCH y ADCL

Obviamente debemos esperar a que termine una conversión antes de leer un dato válido de estosregistros. Para esto podemos comprobar la activación del flag ADIF (del registro ADCSRA) ola puesta a cero del bit ADSC (también de ADCSRA), si es que el ADC opera en modo normal.

Los dos registros del resultado son de solo lectura y el acceso a ellos no involucra una operaciónatómica. Sin embargo, debemos saber que después de leer el registro ADCL queda bloqueada laactualización de los otros registros del ADC hasta que leamos el registro ADCH. De este modose asegura que los datos presentes en estos registros corresponden a una misma conversión. Deaquí se desprende que al terminar una conversión debemos empezar por leer ADCL y luegoADCH, o simplemente podemos tomar el valor de ADCH y así permitir que se puedan depositaren ellos los valores de nuevas conversiones.

Cuando se establece la justificacion derecha los registros ADCH y ADCL conforman el registrode 16 bits llamado simplemente ADC y puede ser así reconocido por los compiladores C puestoque ocupan posiciones contiguas en el espacio de los registros de E/S

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 11

RESULTADO DE LA CONVERSIÓN

El resultado de la conversión es una cantidad binaria de 10 bits que se deposita entre losregistros ADCH y ADCL, según la justificación mostrada en la siguiente figura y de acuerdocon el bit ADLAR (ADC Left Adjust Result) del registro ADMUX.

Registro DMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Justificación del resultado entre los registros ADCH y ADCL

Obviamente debemos esperar a que termine una conversión antes de leer un dato válido de estosregistros. Para esto podemos comprobar la activación del flag ADIF (del registro ADCSRA) ola puesta a cero del bit ADSC (también de ADCSRA), si es que el ADC opera en modo normal.

Los dos registros del resultado son de solo lectura y el acceso a ellos no involucra una operaciónatómica. Sin embargo, debemos saber que después de leer el registro ADCL queda bloqueada laactualización de los otros registros del ADC hasta que leamos el registro ADCH. De este modose asegura que los datos presentes en estos registros corresponden a una misma conversión. Deaquí se desprende que al terminar una conversión debemos empezar por leer ADCL y luegoADCH, o simplemente podemos tomar el valor de ADCH y así permitir que se puedan depositaren ellos los valores de nuevas conversiones.

Cuando se establece la justificacion derecha los registros ADCH y ADCL conforman el registrode 16 bits llamado simplemente ADC y puede ser así reconocido por los compiladores C puestoque ocupan posiciones contiguas en el espacio de los registros de E/S

Page 12: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 12

RELOJ DEL ADC Y TIEMPO DE CONVERSIÓN

Como todo circuito síncrono, el conversor ADC necesita de una señal de reloj para dirigir lospasos de su algoritmo de aproximaciones sucesivas, ése que describimos al principio. Este relojderiva del oscilador del sistema F_CPU. La frecuencia del reloj del ADC dependerá de laresolucion del resultado que se desee obtener. Por ejemplo, si se va a trabajar con los 10 bits deresolucion, entonces se requerirá de un reloj cuya frecuencia esté entre 50kHz y 200kHz. Si serequiere de una resolucion menor de 10 bits, el reloj del ADC puede superar los 200kHz.

El reloj del ADC es una ramificacion del reloj del sistema, F_CPU. De allí proviene y antes deaplicarse al ADC pasa por un prescaler programable que permite disminuir su valor. Losfactores de división se establecen por los bits ADPS2, ADPS1 y ADPS0, del registro ADCSRA,de acuerdo con la tabla mostrada más abajo.

Diagrama de la fuente del reloj del ADC.

Tabla ADPS2ADPS2 ADPS1 ADPS0 Factor de División0 0 0 20 0 1 20 1 0 40 1 1 81 0 0 161 0 1 321 1 0 641 1 1 128

A modo de ejemplo analicemos los valores de ADPS1, ADPS1 y ADPS0 que podríamos usarsuponiendo que trabajamos con nuestro acostumbrado XTAL (F_CPU) de 8MHz.

Si ADPS2:ADPS0 = 111b, el reloj del ADC tendrá una frecuencia de 8MHz/128 = 62.5kHz,valor suficiente para conseguir resultados fiables de 10 bits, tan fiables como los generados a125kHz con el factor de prescaler de 64.

Sin embargo, si escogemos el factor de 32, con ADPS2:ADPS0 = 101b, el ADC operará a8MHz/32 = 250kHz, que es una frecuencia superior a los 200kHz que garantizan una buenaconversión, de modo que deberemos evitarla, a menos tal vez que solo nos interesen los 8 bits

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 12

RELOJ DEL ADC Y TIEMPO DE CONVERSIÓN

Como todo circuito síncrono, el conversor ADC necesita de una señal de reloj para dirigir lospasos de su algoritmo de aproximaciones sucesivas, ése que describimos al principio. Este relojderiva del oscilador del sistema F_CPU. La frecuencia del reloj del ADC dependerá de laresolucion del resultado que se desee obtener. Por ejemplo, si se va a trabajar con los 10 bits deresolucion, entonces se requerirá de un reloj cuya frecuencia esté entre 50kHz y 200kHz. Si serequiere de una resolucion menor de 10 bits, el reloj del ADC puede superar los 200kHz.

El reloj del ADC es una ramificacion del reloj del sistema, F_CPU. De allí proviene y antes deaplicarse al ADC pasa por un prescaler programable que permite disminuir su valor. Losfactores de división se establecen por los bits ADPS2, ADPS1 y ADPS0, del registro ADCSRA,de acuerdo con la tabla mostrada más abajo.

Diagrama de la fuente del reloj del ADC.

Tabla ADPS2ADPS2 ADPS1 ADPS0 Factor de División0 0 0 20 0 1 20 1 0 40 1 1 81 0 0 161 0 1 321 1 0 641 1 1 128

A modo de ejemplo analicemos los valores de ADPS1, ADPS1 y ADPS0 que podríamos usarsuponiendo que trabajamos con nuestro acostumbrado XTAL (F_CPU) de 8MHz.

Si ADPS2:ADPS0 = 111b, el reloj del ADC tendrá una frecuencia de 8MHz/128 = 62.5kHz,valor suficiente para conseguir resultados fiables de 10 bits, tan fiables como los generados a125kHz con el factor de prescaler de 64.

Sin embargo, si escogemos el factor de 32, con ADPS2:ADPS0 = 101b, el ADC operará a8MHz/32 = 250kHz, que es una frecuencia superior a los 200kHz que garantizan una buenaconversión, de modo que deberemos evitarla, a menos tal vez que solo nos interesen los 8 bits

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 12

RELOJ DEL ADC Y TIEMPO DE CONVERSIÓN

Como todo circuito síncrono, el conversor ADC necesita de una señal de reloj para dirigir lospasos de su algoritmo de aproximaciones sucesivas, ése que describimos al principio. Este relojderiva del oscilador del sistema F_CPU. La frecuencia del reloj del ADC dependerá de laresolucion del resultado que se desee obtener. Por ejemplo, si se va a trabajar con los 10 bits deresolucion, entonces se requerirá de un reloj cuya frecuencia esté entre 50kHz y 200kHz. Si serequiere de una resolucion menor de 10 bits, el reloj del ADC puede superar los 200kHz.

El reloj del ADC es una ramificacion del reloj del sistema, F_CPU. De allí proviene y antes deaplicarse al ADC pasa por un prescaler programable que permite disminuir su valor. Losfactores de división se establecen por los bits ADPS2, ADPS1 y ADPS0, del registro ADCSRA,de acuerdo con la tabla mostrada más abajo.

Diagrama de la fuente del reloj del ADC.

Tabla ADPS2ADPS2 ADPS1 ADPS0 Factor de División0 0 0 20 0 1 20 1 0 40 1 1 81 0 0 161 0 1 321 1 0 641 1 1 128

A modo de ejemplo analicemos los valores de ADPS1, ADPS1 y ADPS0 que podríamos usarsuponiendo que trabajamos con nuestro acostumbrado XTAL (F_CPU) de 8MHz.

Si ADPS2:ADPS0 = 111b, el reloj del ADC tendrá una frecuencia de 8MHz/128 = 62.5kHz,valor suficiente para conseguir resultados fiables de 10 bits, tan fiables como los generados a125kHz con el factor de prescaler de 64.

Sin embargo, si escogemos el factor de 32, con ADPS2:ADPS0 = 101b, el ADC operará a8MHz/32 = 250kHz, que es una frecuencia superior a los 200kHz que garantizan una buenaconversión, de modo que deberemos evitarla, a menos tal vez que solo nos interesen los 8 bits

Page 13: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 13

más significativos del resultado. En este ejemplo, los factores de prescaler inferiores 32conllevarán una operación del ADC deficiente e inaceptable.

De nuestras lecciones iniciales del conversor de aproximaciones sucesivas, sabemos que porcada bit del resultado digital el ADC demora un ciclo del reloj. Esto es, si el conversor generadatos de 10 bits se requerirán de 10 ciclos de reloj por conversión. Eso es del todo cierto solo enel cómputo mismo de la conversión o en un ADC ideal; en un ADC real hay factores deestablecimiento que alargan ligeramente el tiempo de conversión.

En los megaAVR el tiempo de conversión depende del tipo de conversión que se realiza. Lasiguiente tabla muestra las cuatro posibilidades.

Tabla Tipo de Conversión

Tipo de Conversión Muestreo y retención (Ciclos desdeel inicio de la conversión)

Tiempo de Conversión(Ciclos)

Primera conversión 14.5 25Conversiones Normales, de entradaúnica 1.5 13

Conversiones Normales, de entradadiferencial 1.5/2.5 13/14

Conversiones auto-disparadas 2 13.5

La primera conversión en cualquier modo es la que se ejecuta después de habilitar el ADC,seteando el bit ADEN; siempre demora más debido a que se debe inicializar el circuitoanalógico del ADC.

Los ciclos de muestreo y retención se cuentan a partir del momento en que se inicia laconversión, o sea, después de setear el bit ADSC, del registro ADCSRA. Para comprender estodebemos saber que el ADC no capta la señal a convertir directamente del pin ADCx, sino queprimero espera que dicho nivel de tensión se deposite en el capacitor de muestreo y retención

, para luego iniciar la conversión desde allí. El tiempo que demora este capacitor encargarse se denomina periodo de muestreo y retención o a veces tiempo de adquisición. Éstevaría principalmente de acuerdo con la impedancia Rs del circuito externo al canal del ADC. ElADC del AVR está optimizado para acoplarse a impedancias de 10K o inferior.

Circuito de entrada del ADC de los megaAVR.

Junto con su resolución el tiempo de conversión es el parámetro más importante de un ADC.Para fines prácticos esto se calcula como la suma del tiempo de conversión en sí (el queacabamos de describir) más el tiempo de adquisición. Por ejemplo, según la tabla de arriba, lasconversiones normales de entrada única, que son las más usadas, demoran 13+1.5 = 14.5 ciclos.Si el ADC trabajara a su máxima frecuencia recomendada de 200kHz, cada ciclo duraría

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 13

más significativos del resultado. En este ejemplo, los factores de prescaler inferiores 32conllevarán una operación del ADC deficiente e inaceptable.

De nuestras lecciones iniciales del conversor de aproximaciones sucesivas, sabemos que porcada bit del resultado digital el ADC demora un ciclo del reloj. Esto es, si el conversor generadatos de 10 bits se requerirán de 10 ciclos de reloj por conversión. Eso es del todo cierto solo enel cómputo mismo de la conversión o en un ADC ideal; en un ADC real hay factores deestablecimiento que alargan ligeramente el tiempo de conversión.

En los megaAVR el tiempo de conversión depende del tipo de conversión que se realiza. Lasiguiente tabla muestra las cuatro posibilidades.

Tabla Tipo de Conversión

Tipo de Conversión Muestreo y retención (Ciclos desdeel inicio de la conversión)

Tiempo de Conversión(Ciclos)

Primera conversión 14.5 25Conversiones Normales, de entradaúnica 1.5 13

Conversiones Normales, de entradadiferencial 1.5/2.5 13/14

Conversiones auto-disparadas 2 13.5

La primera conversión en cualquier modo es la que se ejecuta después de habilitar el ADC,seteando el bit ADEN; siempre demora más debido a que se debe inicializar el circuitoanalógico del ADC.

Los ciclos de muestreo y retención se cuentan a partir del momento en que se inicia laconversión, o sea, después de setear el bit ADSC, del registro ADCSRA. Para comprender estodebemos saber que el ADC no capta la señal a convertir directamente del pin ADCx, sino queprimero espera que dicho nivel de tensión se deposite en el capacitor de muestreo y retención

, para luego iniciar la conversión desde allí. El tiempo que demora este capacitor encargarse se denomina periodo de muestreo y retención o a veces tiempo de adquisición. Éstevaría principalmente de acuerdo con la impedancia Rs del circuito externo al canal del ADC. ElADC del AVR está optimizado para acoplarse a impedancias de 10K o inferior.

Circuito de entrada del ADC de los megaAVR.

Junto con su resolución el tiempo de conversión es el parámetro más importante de un ADC.Para fines prácticos esto se calcula como la suma del tiempo de conversión en sí (el queacabamos de describir) más el tiempo de adquisición. Por ejemplo, según la tabla de arriba, lasconversiones normales de entrada única, que son las más usadas, demoran 13+1.5 = 14.5 ciclos.Si el ADC trabajara a su máxima frecuencia recomendada de 200kHz, cada ciclo duraría

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 13

más significativos del resultado. En este ejemplo, los factores de prescaler inferiores 32conllevarán una operación del ADC deficiente e inaceptable.

De nuestras lecciones iniciales del conversor de aproximaciones sucesivas, sabemos que porcada bit del resultado digital el ADC demora un ciclo del reloj. Esto es, si el conversor generadatos de 10 bits se requerirán de 10 ciclos de reloj por conversión. Eso es del todo cierto solo enel cómputo mismo de la conversión o en un ADC ideal; en un ADC real hay factores deestablecimiento que alargan ligeramente el tiempo de conversión.

En los megaAVR el tiempo de conversión depende del tipo de conversión que se realiza. Lasiguiente tabla muestra las cuatro posibilidades.

Tabla Tipo de Conversión

Tipo de Conversión Muestreo y retención (Ciclos desdeel inicio de la conversión)

Tiempo de Conversión(Ciclos)

Primera conversión 14.5 25Conversiones Normales, de entradaúnica 1.5 13

Conversiones Normales, de entradadiferencial 1.5/2.5 13/14

Conversiones auto-disparadas 2 13.5

La primera conversión en cualquier modo es la que se ejecuta después de habilitar el ADC,seteando el bit ADEN; siempre demora más debido a que se debe inicializar el circuitoanalógico del ADC.

Los ciclos de muestreo y retención se cuentan a partir del momento en que se inicia laconversión, o sea, después de setear el bit ADSC, del registro ADCSRA. Para comprender estodebemos saber que el ADC no capta la señal a convertir directamente del pin ADCx, sino queprimero espera que dicho nivel de tensión se deposite en el capacitor de muestreo y retención

, para luego iniciar la conversión desde allí. El tiempo que demora este capacitor encargarse se denomina periodo de muestreo y retención o a veces tiempo de adquisición. Éstevaría principalmente de acuerdo con la impedancia Rs del circuito externo al canal del ADC. ElADC del AVR está optimizado para acoplarse a impedancias de 10K o inferior.

Circuito de entrada del ADC de los megaAVR.

Junto con su resolución el tiempo de conversión es el parámetro más importante de un ADC.Para fines prácticos esto se calcula como la suma del tiempo de conversión en sí (el queacabamos de describir) más el tiempo de adquisición. Por ejemplo, según la tabla de arriba, lasconversiones normales de entrada única, que son las más usadas, demoran 13+1.5 = 14.5 ciclos.Si el ADC trabajara a su máxima frecuencia recomendada de 200kHz, cada ciclo duraría

Page 14: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 14

1/200kHz = 5us. De aquí concluimos que cada una de estas conversiones en realidad toma14.5*5 = 72.5us y que en un segundo se pueden realizar hasta 1/72.5u = 13793 conversiones =>14 kSPS. Por si acaso, la unidad kSPS significa kilo Samples Per Second. El datasheet dice quellega a 15 kSPS pero ya ves que según nuestros cálculos no sale así. Como sea, es un conversorbastante lento para mi gusto

INTERRUPCIÓN DEL ADC Y MODO SLEEP

Recordemos que el modo Sleep es un estado en que se detienen las diversas ramificaciones deloscilador del sistema y dependiendo de las ramificaciones que se congelen se pueden conocervarios modos Sleep. Pues bien, son dos los modos Sleep que nos competen en esta ocasión.

Idle mode. Es el estado de sueño menos profundo que existe en los AVR. Aquí solo se congelanlos relojes del CPU y de la memoria FLASH, permitiendo que los demás periféricos como elUSART, TWI, SPI, los Timers,… y, por supuesto, el ADC, continúen trabajando normalmente.

ADC Noise Reduction Mode, o modo de reducción de ruido del ADC. Es el segundo estado desueño y, por su nombre, fue diseñado para que el ADC opere sin interferencias, o sea, aunquenormalmente se piensa en el modo Sleep como una forma de ahorrar energía, el principal objetode usar el ADC en este estado es tomar la señal analógica sin presencia del ruido deconmutación inherente de los otros componentes del microcontrolador. Aparte del CPU en esteestado se congelan todos los periféricos relacionados con las transferencias de datos (USART,SPI, etc.) quedando como despertadores solo las interrupciones asíncronas, aparte del ADC, porsupuesto.

El evento que puede disparar la interrupción del ADC es la conclusión de una conversión. Enese instante, al mismo tiempo que se limpia el bit ADSC, se activará al flag ADIF. El bit ADIFse limpia por hardware al ejecutarse la función de interrupción ISR y si no se va a utilizar dichafunción también se puede limpiar por software escribiendo un uno.

La interrupción del ADC se habilita seteando el bit ADIE, obviamente aparte de I de SREG.

Registro ADCSRAADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0

Para realizar conversiones en modo ADC Noise Reduction se deben seguir los siguientes pasos.

El ADC debe estar habilitado, debe estar configurado para conversiones normales, nodebe tener una conversión en curso y debe tener habilitada la interrupción del ADC.

Entrar en modo ADC Noise Reduction o Idle mode. El ADC iniciará la conversiónapenas se detenga el CPU.

Al terminar la conversión, la interrupción del ADC despertará el CPU y se ejecutará larutina de interrupción respectiva.

Debemos observar que el ADC no se apagará automáticamente al entrar en otros modos Sleepque no sean Idle o ADC Noise Reduction. Se recomienda por tanto apagarlo manualmenteescribiendo cero en el bit ADEN para evitar desperdicio de energía. Si el ADC está habilitadoen dichos modos Sleep y se desea realizar conversiones diferenciales, se recomienda apagar yluego encender el ADC después de salir del modo Sleep para asegurar que se obtenganresultados válidos

Page 15: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 15

REGISTROS DEL MÓDULO ADCADCSRA: ADC Control and Status Register A

Registro ADCSRA

ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0Registro de Microcontrolador

ADEN ADC Enable

Escribiendo uno en este bit se habilita el ADC. Escribiendo un cero el ADC se apaga. Si se apaga elADC cuando hay una conversión en progreso, se interrumpirá y terminará dicha conversión.

ADSC

ADC Start Conversion

En modo de conversión normal escribir uno en este bit iniciará una conversión. En modo deconversiones auto-disparadas, escribir uno en este bit iniciará la primera conversión. La primeraconversión después de escribir en ADSC tras iniciar el ADC o si ADSC fue escrito al mismo tiempo quese habilitó el ADC, tomará 25 ciclos de reloj del ADC en lugar de los 13 ciclos habituales. La primeraconversión conlleva la inicialización del ADC.

ADSC se leerá como uno mientras la conversión esté en progreso. Al terminar la conversión este bitretornará a cero. Escribir cero en este bit no tiene efecto.

ADATEADC Auto Trigger Enable

Cuando se escribe uno en este bit se habilitan las conversiones automáticas del ADC. El ADC iniciaráuna conversión en el flanco positivo de la señal de disparo seleccionada. La fuente de disparo seselecciona por los bits ADTS en el registro ADCSRB.

ADIF

ADC Interrupt Flag

Este bit se setea cuando termina una conversión y se actualizan los registros los registros de datos. Lainterrupción de Conversión de ADC Completada se ejecuta cuando valgan uno los bits ADIE e I deSREG.

El flag ADIF se limpiará automáticamente por hardware cuando se ejecute la correspondiente rutina deinterrupción ISR. Alternativamente, ADIF se limpia escribiéndole un uno. Observa que ejecutar unainstrucción de Lectura-Modificación-Escritura en ADCSRA puede deshabilitar una interrupciónpendiente. Esto también se aplica cuando se usan las instrucciones SBI y CBI.

ADIE ADC Interrupt Enable

Cuando se escribe uno en este bit y el bit I de SREG vale uno se activa la interrupción de Conversión deADC Completada.

ADPS2:0

ADC Prescaler Select Bits

Estos bits determinan el factor de división entre la frecuencia del XTAL y el reloj de entrada del ADC.

Tabla ADPS2ADPS2 ADPS1 ADPS0 Factor de División0 0 0 20 0 1 20 1 0 40 1 1 81 0 0 161 0 1 321 1 0 641 1 1 128

Page 16: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 16

ADCSRB: ADC CONTROL AND STATUS REGISTER B

Registro ADCSRB--- ACME --- --- --- ADTS2 ADTS1 ADTS0

Registro de Microcontrolador

ACME

Analog Comparator Multiplexer Enable

Al escribir uno en este bit estando el ADC apagado (ADEN en ADCSRA es cero), elmultiplexor del ADC selecciona la entrada negativa del Comparador Analógico.Cuando se escribe cero en este bit, la entrada negativa del Comparador Analógicoserá AIN1.

ADTS2:0

ADC Auto Trigger Source

Si el bit ADATE de ADCSRA vale uno, la configuración de los bits ADTS2:0selecciona la fuente de las conversiones auto-disparadas del ADC.

Si ADATE vale cero, la configuración de ADTS2:0 no tendrá efecto. La conversiónse inicia en el flanco de subida de la señal seleccionada. Observa que cambiar de unafuente de disparo que vale cero a una fuente que vale uno generará un flanco desubida en la señal de disparo, y si el bit ADEN de ADCSRA vale uno, esto iniciaráuna conversión. El cambio al Modo de Corrida Libre (ADTS2:0 = 000) no originaráun evento de disparo, incluso si está activado el flag de interrupción del ADC.

Tabla ADTS2ADTS2 ADTS1 ADTS0 Fuente de disparo0 0 0 Modo de Corrida Libre0 0 1 Comparador Analógico0 1 0 Interrupción Externa INT00 1 1 Coincidencia del Timer/Counter01 0 0 Desbordamiento del Timer/Counter01 0 1 Coincidencia B del Timer/Counter11 1 0 Desbordamiento del Timer/Counter11 1 1 Evento de Captura del Timer/Counter1

Page 17: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 17

ADMUX: ADC MULTIPLEXER SELECTION REGISTER

Registro ADMUXREFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Registro de Microcontrolador

REFS1:0

Reference Selection Bits

Estos bits seleccionan los voltajes de referencia del ADC, como se muestra en lasiguiente tabla. Si estos se cambian durante una conversión, el cambio no tendráefecto hasta que termine la conversión (hasta que se ponga a uno el flag ADIF enADCSRA). Si se usa un voltaje de referencia aplicado al pin AREF, no se podránusar las opciones de voltaje de referencia internos.

Nota: Si se seleccionan canales diferenciales, solo se podrá usar 2.56V comoVoltaje de Referencia Interno.

Tabla REFS1

REFS1 REFS0 Voltaje de Referencia Vref+ Seleccionado (ATmega 4xx)

0 0 Pin AREF, Vref Interno desconectado

0 1 Pin AVCC con capacitor externo en el pin AREF

1 0 Voltaje de Referencia Interno de 1.1Vcon capacitor externo en el pin AREF

1 1 Voltaje de Referencia Interno de 2.56Vcon capacitor externo en el pin AREF

ADLAR

ADC Left Adjust Result

El bit ADLAR afecta la representación del resultado de la conversión en losregistros de datos del ADC. Al escribir uno en ADLAR el resultado se justificará ala izquierda, de otro modo, el resultado se justifica a la derecha. El cambio del bitADLAR afectará inmediatamente los registros de datos del ADC, sin importar sihay conversiones en curso.

MUX4:0

Analog Channel and Gain Selection Bits

El valor de estos bits selecciona la combinación de las entradas analógicas que seconectan al ADC. Estos bits también seleccionan la ganancia de los canalesdiferenciales. Para más información ver la sección Selección del Canal deConversión. Si se cambian estos bits durante una conversión, el cambio no tendráefecto hasta que se complete la conversión en curso (hasta que el bit ADIF deADCSRA se ponga a uno).

Page 18: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 18

ADCH Y ADCL: ADC DATA REGISTER

Registro ADCH

Registro ADCL

Registro de MicrocontroladorADC Conversion Result

Cuando termine una conversión del ADC el resultado será almacenado en estos dos registros.Si se usan canales diferenciales, el resultado se presentará en formato de complemento a dos.

Al leer ADCL los registros de datos del ADC no se actualizan hasta que se lea ADCH. Comoconsecuencia, si el resultado se justifica a la izquierda y si no se requiere de más de 8 bits deprecisión, bastará con leer ADCH. De otro modo, ADCL se deberá ser el primer registro enleer.

El bit ADLAR del ADMUX y los bits MUXn de ADMUX afectan el modo en que se lee elresultado de estos registros. Si ADLAR vale uno, el resultado se justifica a la izquierda. SiADLAR vale cero (valor por defecto), el resultado se justifica a la derecha.

DIDR0: Digital Input Disable Register 0

Registro DIDR0ADC7D ADC6D ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D

Registro de Microcontrolador

Bit 7:0

ADC7D..ADC0D: ADC7:0 Digital Input Disable

Cuando se escribe uno en este bit, se deshabilita el buffer de entrada digitalcorrespondiente al pin ADCx. Si este bit vale uno, el correspondiente bit del registroPIN se leerá siempre como cero. Cuando se aplica una señal analógica al pin ADC7.0 yno se necesita la entrada digital de este pin, este bit se debería setear para reducir elconsumo de energía en el buffer de entrada digital

Page 19: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 19

PRACTICA 1MODULO ADCCONVERSION DE SEÑAL ANALOGICA A DIGITAL CON

EL ATMEGA8

FUNDAMENTO TEORICO

El Conversor Analógico a Digital del ATMEGA8 tiene una resolución deconversión de 10bits de hasta 15kSPS, 6 canales Analógicos, Ajuste aderecha i izquierda del resultado de la conversión, Voltajes de referencia, 2modos de conversión: simple y continuo, Interrupción en el momento de laconversión completada, cancelación de ruido activando modo Sleep, yalgunos má que se pueden ver en la hoja de datos.

El método de conversión que usa el micro es de aproximaciones sucesivas.

Los registros involucrados con el Conversor A/D son: ADMUX – ADC Multiplexer Selection Register – ADMUX ADCSRA – ADC Control and Status Register A ADCL and ADCH – The ADC Data Register

ADMUX – ADC Multiplexer Selection Register – ADMUX

Este registro es muy importante ya que en el se realizan la mayoría de lasconfiguraciones para el ADC:

Bit 7:6 – REFS1:0: Reference Selection Bits:Se utilizan para seleccionar el tipo

de voltaje de referncia que se usará, si interno, externo o deshabilitado, según la

tabla:

Bit 5 – ADLAR: ADC Left Adjust Result: Configurado con 1, ajustará el resultado

de la conversión en los registros ADCH y ADCL a la Izquierda, caso contrario con un

0 lo hará a la derecha, esto lo veremos más adelante con unas imágenes.

Page 20: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 20

Bits 3:0 – MUX3:0: Analog Channel Selection Bits: Estos bits seleccionarán el

canal analógico que se usará en la presente conversión, de acuerdo a la siguiente

tabla:

ADCSRA – ADC Control and Status Register A

En este registro se hacen las demás configuraciones y también se tiene los bits de

control de inicio/fin de conversión.

Bit 7 – ADEN: ADC Enable: Es la habilitación del ADC para su uso (1), caso

contrario el ADC estará apagado (0)

Bit 6 – ADSC: ADC Start Conversion: Colocando un 1 en este bit se inicia la

conversión analógica, ya sea en modo normal o en modo contínuo, salvo que en el

contínuo no hará falta volverlo a colocar a 1 cuando se necesite otra conversión, lo

que si se debe hacer en modo normal, ya que el conversor en este modo coloca a

cero por hardware a este bit cuando la conversión AD se ha terminado

Bit 5 – ADFR: ADC Free Running Select: Con 1 se habilita el modo contínuo

(free running), y el ADC muestreará y actualizará los registros de datos de la

conversión contínuamente, colocando un 0 el modo contínuo se detiene.

Page 21: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 21

Bit 4 – ADIF: ADC Interrupt Flag: Este bit se coloca a 1 cuando la conversión AD

es completada y los registros de datos de la conversión son actualizados. Se

ejecutará la rutina de interrupción si esta implementada y se tiene configurada las

máscaras correspondientes para esta interrupción y el bit de Interrupciones

globales, y se pondrá a 0 por hardware al terminar la rutina de interrupción.

Bit 3 – ADIE: ADC Interrupt Enable: Es la máscara de habilitación para la

interrupción por Conversión AD completada, se la habilita colocando un 1.

Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits: Estos bits determinan el divisor

entre la frecuencia del Osilador principal y la entrada de reloj del ADC, es según la

tabla:

ADCL and ADCH – The ADC Data Register

Por último los registros de datos donde se almacena el resultado de 10bits de laconversión AD, que son de dos formas según la justificación configurada en ADLAR

ADLAR=0

ADLAR=1

Cuando la conversión AD ha sido completada, el resultado puede ser encontrado enéstos 2 registros, en el formato que ADLAR indique, primero se debe leer ADCL yposteriormente ADCH. Si no más de 8 bits de resolución son necesarios se puedeusar ADLAR=1 y leer directamente ADCH.

Page 22: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 22

PRACTICA1 -ADC

En este ejemplo veremos cómo funciona el ADC de 10bits de resolución del micro,usaremos un potenciómetro conectado en el canal 0 el cual nos dará los diferentesvalores de tensión analógica entre 0 y 5V. Visualizaremos el dato convertido en 10LEDs conectados en el puertoD y los restantes 2 en los bits menossignificativos del puerto B.

PROGRAMA

;Programa: Conversor A/D de 10bits;Notas:Este programa realiza una conversión de una tensión analógica a valores;digitales de 10bits;;Registros: r16 para configuraciones de los puertos, del ADC, y para lectura de la;conversión. r17 y r18 para retardos.;

MODULO ADC

1O BITS

VISUALIZACION50%

RV2

1k

CANAL 0PC0

ATMEGA8

PB0/ICP114

PB1/OC1A15

PB2/SS/OC1B16

PB3/MOSI/OC217

PB4/MISO18

PB5/SCK19

PB6/TOSC1/XTAL19

PB7/TOSC2/XTAL210 PC6/RESET 1

PD0/RXD 2

PD1/TXD 3

PD2/INT0 4

PD3/INT1 5

PD4/T0/XCK 6

PD5/T1 11

PD6/AIN0 12

PD7/AIN1 13

PC0/ADC0 23

PC1/ADC1 24

PC2/ADC2 25

PC3/ADC3 26

PC4/ADC4/SDA 27

PC5/ADC5/SCL 28

AREF21

AVCC20

U1

ATMEGA8

85%

RV11k

D1LED-YELLOW

D2LED-YELLOW

.

.D4.

D5-

D6LED-YELLOW

D7LED-YELLOW

D8LED-YELLOW

D9LED-YELLOW

D10LED-YELLOW

CONVERSION DE SELAN ANALOGICA A DIGITAL

Page 23: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 23

;Conexiones: ADC0/C0 -> Potenciometro a Vcc y Gnd; D0-D7 -> Led's;B0 y B1 -> Led's;--------------------------------------------------------------------------------

;DIRECTIVAS EN ENSAMBLADOR.include "m8def.inc" ;ATmega8

;reset-vector address $0000.org $0000

rjmp main ;ve al main

;PROGRAMA PRINCIPAL

main:ldi r16,$04 ;Configuracion de...out sph,r16ldi r16,$5Fout spl,r16 ;...la pila: Stack: $045F=RAMENDclr r16 ;r16 <- $00out ddrc,r16 ;portC entradaser r16 ;r16 <- $ffout ddrd,r16 ;portD salidasout ddrb,r16 ;portB salidasldi r16,$40 ;r16 <- $40out admux,r16 ;configuro ADC a canal0, ajuste a derecha y referencia en Vref con cap

ldi r16,$85 ;r16 <- $85out adcsra,r16 ;habilito ADC, interrupcion y free running desactivados, divisor 32rcall delay200u ;retardo para inicializar el conversor A/D;se necesita 25 cilos del clock ADC, el clock ADC esta puesto a 4MHz/32=125kHz;25 ciclos de 125Khz, es 200us que se debe esperar para la configuración de todo el circuito

;interno del conversor A/D del microloop:

sbi adcsra,adsc ;se inicia conversion A/D, seteando el bit adscconvertir:

sbis adcsra,adsc ;pregunto por el bit de conversión terminadarjmp leer ;si termino la conversión, voy a leer la conversiónrjmp convertir ;si no se sigue esperando hasta que termine

leer: ;rutina de lectura de los datos convertidosin r16,adcl ;carga el valor de ADCL en r16out portd,r16 ;muestra por el puertoDin r16,adch ;carga el valor de ADCH en r16out portb,r16 ;muestra por el puertoBrcall delay25m ;retardo para visualizar, puede no ser necesariorjmp loop ;bucle infinito

; =============================; delay loop generator; 100000 cycles:; -----------------------------; delaying 99990 cycles:delay25m:

ldi R17, $A5YY1: ldi R18, $C9XX1: dec R18

brne XX1dec R17

Page 24: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 24

brne YY1; -----------------------------; delaying 9 cycles:

ldi R17, $03ZZ1: dec R17

brne ZZ1; -----------------------------; delaying 1 cycle:

nopret

; =============================

; delay loop generator; 800 cycles:; -----------------------------; delaying 798 cycles:delay200u:

ldi R17, $02YY2: ldi R18, $84XX2: dec R18

brne XX2dec R17brne YY2

; -----------------------------; delaying 2 cycles:

nopnopret

; =============================

CIRCUITO DE SIMULACION CON PROTEUS

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 24

brne YY1; -----------------------------; delaying 9 cycles:

ldi R17, $03ZZ1: dec R17

brne ZZ1; -----------------------------; delaying 1 cycle:

nopret

; =============================

; delay loop generator; 800 cycles:; -----------------------------; delaying 798 cycles:delay200u:

ldi R17, $02YY2: ldi R18, $84XX2: dec R18

brne XX2dec R17brne YY2

; -----------------------------; delaying 2 cycles:

nopnopret

; =============================

CIRCUITO DE SIMULACION CON PROTEUS

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 24

brne YY1; -----------------------------; delaying 9 cycles:

ldi R17, $03ZZ1: dec R17

brne ZZ1; -----------------------------; delaying 1 cycle:

nopret

; =============================

; delay loop generator; 800 cycles:; -----------------------------; delaying 798 cycles:delay200u:

ldi R17, $02YY2: ldi R18, $84XX2: dec R18

brne XX2dec R17brne YY2

; -----------------------------; delaying 2 cycles:

nopnopret

; =============================

CIRCUITO DE SIMULACION CON PROTEUS

Page 25: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 25

PRACTICA2PROGRAMACION DEL ADC ATMEGA8 CON LENGUAJE C

DESCRIPCIÓN

Con este programa podremos visualizar a través de los LEDs, el valor en binariotomado del ADC conectado a un potenciómetro. El ADC se trabajara a manera deconversión simple y se tomaran solo 8 de los 10 bits, de los cuales se ajustaran paraque la salida vaya de 0 a 63, que será representada por los LEDs conectados almicrocontrolador.

DIAGRAMA ESQUEMÁTICO

MATERIALES

1 Potenciómetro 6 LEDs 7 Resistencias de 220 Ohms 1 Microcontrolador ATmega8 Programador USBasp V3.0

INTRODUCCIÓN

EL ADC

El ADC convierte señales continuas a números discretos. El ADC es un dispositivo electrónicoque pasa un nivel de voltaje de entrada a un valor digital proporcional a la magnitud de laentrada, la salida digital puede estar descrita por diferentes codificaciones.

En este caso, el ADC a utilizar es el del microcontrolador ATega8 el cual es un ADC de 10 bits,de los cuales solo usaremos 8. Las características principales del ADC del ATmega8 son:

Resolución de 10 bits ± 2 bits de precisión 13 a 260 us de tiempo de conversión

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 25

PRACTICA2PROGRAMACION DEL ADC ATMEGA8 CON LENGUAJE C

DESCRIPCIÓN

Con este programa podremos visualizar a través de los LEDs, el valor en binariotomado del ADC conectado a un potenciómetro. El ADC se trabajara a manera deconversión simple y se tomaran solo 8 de los 10 bits, de los cuales se ajustaran paraque la salida vaya de 0 a 63, que será representada por los LEDs conectados almicrocontrolador.

DIAGRAMA ESQUEMÁTICO

MATERIALES

1 Potenciómetro 6 LEDs 7 Resistencias de 220 Ohms 1 Microcontrolador ATmega8 Programador USBasp V3.0

INTRODUCCIÓN

EL ADC

El ADC convierte señales continuas a números discretos. El ADC es un dispositivo electrónicoque pasa un nivel de voltaje de entrada a un valor digital proporcional a la magnitud de laentrada, la salida digital puede estar descrita por diferentes codificaciones.

En este caso, el ADC a utilizar es el del microcontrolador ATega8 el cual es un ADC de 10 bits,de los cuales solo usaremos 8. Las características principales del ADC del ATmega8 son:

Resolución de 10 bits ± 2 bits de precisión 13 a 260 us de tiempo de conversión

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 25

PRACTICA2PROGRAMACION DEL ADC ATMEGA8 CON LENGUAJE C

DESCRIPCIÓN

Con este programa podremos visualizar a través de los LEDs, el valor en binariotomado del ADC conectado a un potenciómetro. El ADC se trabajara a manera deconversión simple y se tomaran solo 8 de los 10 bits, de los cuales se ajustaran paraque la salida vaya de 0 a 63, que será representada por los LEDs conectados almicrocontrolador.

DIAGRAMA ESQUEMÁTICO

MATERIALES

1 Potenciómetro 6 LEDs 7 Resistencias de 220 Ohms 1 Microcontrolador ATmega8 Programador USBasp V3.0

INTRODUCCIÓN

EL ADC

El ADC convierte señales continuas a números discretos. El ADC es un dispositivo electrónicoque pasa un nivel de voltaje de entrada a un valor digital proporcional a la magnitud de laentrada, la salida digital puede estar descrita por diferentes codificaciones.

En este caso, el ADC a utilizar es el del microcontrolador ATega8 el cual es un ADC de 10 bits,de los cuales solo usaremos 8. Las características principales del ADC del ATmega8 son:

Resolución de 10 bits ± 2 bits de precisión 13 a 260 us de tiempo de conversión

Page 26: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 26

6 Canales de entrada multiplexados Rango de voltaje de entrada de 0-Vcc Selector de voltaje de referencia de 2.56v Tipos de conversión continuo o simple Interrupción de conversión Ahorro de energía

PROGRAMA EN C

#include<avr/io.h>#include<util/delay.h>

int main (void){int ADC_val;DDRD = 0xFF;

ADCSRA = 0xC0; //Configurar el registro ADCSRAADMUX = 0x22; //Configurar el registro ADMUX

while(1) {

ADCSRA|=_BV(ADSC); //Activar el bit ADSC del registroADCSRA inicio de conversiónADC_val=(ADCH*63)/255; //Ajustar la recta para que vaya de 0 a63PORTD = ADC_val;}}

EXPLICACION DEL PROGRAMA

ADCSRA = 0xC0;

Para el registro ADCSRA se asigno 0xC0 o 0b11000000, hexadecimal o binariorespectivamente. El bit 7 ADEN habilita el uso del ADC, y el bit 6 ADSC al escribirle un unoinicia la conversión.ADMUX = 0x22;

Se activan los bits 5 y 2 por lo que el registro nos queda como 0b00100010 (lo que es igual enhexadecimal a 0x22), al activar el bit 1 le indicamos al ADC que tome la entrada del pin delADC2

Page 27: EL MÓDULO ADC DE LOS AVR.pdf

UNIVERSIDAD NACIONAL DEL CALLAOFACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

MICROCONTROLADORE –ATMEGA8 27

con el bit 5 (ADLAR) del registro ADMUX configuramos la manera en la que nos deposita elvalor en los dos registros, para este caso se configuro de la siguiente manera, en la que comose puede ver se ignoraron los dos bits más significativos.

ADCSRA|=_BV(ADSC);

Al estar trabajando el ADC en este modo es necesario indicarle cada cuando tiene que realizarla conversión, con esta instrucción solo entra al bit ADSC del registro y lo habilita, no semodifica cualquier otro valor del registro ADCSRA.

ADC_val=(ADCH*63)/255;

Ya que el valor del ADCH es de 8 bits (como se ve en la imagen al ajustar el ADLAR), se tieneque ajustar la salida a que sea de 6 bits, ya que se están usando solo 6 LEDs, esto se haceajustando la recta, multiplicando por el máximo de nuestra salida ideal y dividiéndolo por elmáximo de la salida obtenida