EL MÓDULO ADC DE LOS AVR.pdf
Transcript of 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 ..............
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.
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.
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.
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)
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.
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
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.
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.
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.
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
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
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
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
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
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
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).
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
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.
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.
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.
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
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
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
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
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
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