Interrupción ADC AVR


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

interrupción ADC AVR ejemplo imágenInterrupción ADC AVR, mediante la interrupción ADC AVR se puede detener el programa  principal con el cual este trabajando el microcontrolador AVR, para indicarle al microcontrolador que se dedique a realizar otras tareas, al finalizar la Interrupción ADC AVR, se seguirá con el programa principal desde donde fue interrumpido.

En esta sección que es una secuencia del tema tratado en este enlace, se comentará sobre la interrupción que es provocada por el módulo convertidor analógico digital AVR, por lo que es muy importante que se sepa utilizar el convertidor analógico digital AVR ADC, sobre la utilización del ADC ya se ha tratado y se puede ver aquí, para lo que se va a comentar a continuación se utilizará como base el microcontrolador AVR ATmega88.

La programación de la interrupción ADC AVR se hará en C/C++ con el ATMEL STUDIO, se utilizará la librería interrupt.h de la cual se puede hallar una descripción detallada aquí.

La interrupción ADC AVR ocurrirá cuando el módulo convertidor analógico digital AVR termina de convertir una señal analógica en un número digital de 10 bits, que representará esa señal en forma digital.

Para habilitar y detectar el uso de la interrupción ADC AVR se utiliza el registro ADCSRA que se vio aquí, en esta oportunidad lo que interesa son los bits involucrados en el uso de la interrupción ADC AVR.

En la siguiente imagen se tiene el registro ADCSRA para el control del convertidor analógico digital AVR, se pueden ver los nombres que le corresponden a cada uno de sus bits.

convertidor analógico digital AVR adcsra

El bit 7 ADEN es para activar o desactivar el convertidor analógico digital AVR, cuando este bit es puesto a 1 el convertidor está activo y listo para usarse, si este bit es puesto a 0 el convertidor estará apagado no pudiendo utilizarse.

El bit 6 ADSC se pondrá a 1 para iniciar la conversión analógica digital AVR, cuando la conversión de analógico a digital termina este bit se pone a 0 en forma automática, lo que indica que la conversión a terminado.

El bit 5 ADATE al poner este bit a 1 se habilita la opción de disparo o activación automática del convertidor analógico digital AVR, por alguna señal que será elegida de acuerdo al registro ADCSRB.

 😉 El bit 4 ADIF este bit es el que detecta cuando se ha producido una interrupción ADC AVR por  la finalización de una conversión analógica digital AVR, para detectar que ha ocurrido una interrupción ADC AVR hay que poner a 0 si este bit, si está a 1 no detectará la interrupción ADC AVR, al terminar una conversión si este bit a sido previamente puesto a 0, este bit se pondrá automáticamente a 1, es es paso de 0 a 1 de este bit el que permite detectar que se ha producido la interrupción ADC AVR, para seguir detectando mas interrupciones luego de que haya ocurrido alguna hay que poner nuevamente este bit aa 0, al utilizar la rutina de interrupciones en C/C++ con el atmel studio este bit se pone automáticamente a 0 dentro de la rutina de interrupciones.

 😉 El bit 3 ADIE este bit es utilizado para habilitar la interrupción ADC AVR por la finalización de una conversión analógica digital AVR, para habilitar el uso de esta interrupción hay que poner este bit a 1, además deben estar habilitadas las interrupciones globales, lo cual en el ATMEL STUDIO se hará con la instrucción sei(), tal como se comentó aquí.

Los bits 2, 1 y 0 son para elegir el prescaler a utilizar para obtener la frecuencia de trabajo del convertidor analógico digital AVR, mediante la combinación de valores de estos bits, a partir de la frecuencia de trabajo del microcontrolador AVR utilizado, los prescaler que se pueden utilizar son los que se indican es la siguiente tabla para el ATmega88, los valores de la frecuencia de trabajo para el convertidor analógico digital AVR tiene que estar comprendido entre los 50KHz y los 200Khz según la hoja de datos

convertidor analógico digital AVR prescaler

Por ejemplo si el microcontrolador AVR está trabajando a 1MHz, para obtener una frecuencia de trabajo del convertidor analógico digital de 100Khz o uno cercano que esté entre 50Khz y 200Khz, el prescaler a utilizar seria de 8, con el cual se obtiene una frecuencia de trabajo para el convertidor analógico digital AVR de 125Khz.

 

Rutinas de interrupción ADC AVR en C/C++ en el ATMEL STUDIO

Si se utiliza la interrupción ADC AVR, la rutina de interrupción se realizará dentro de la siguiente función:

ISR(ADC_vect){

//tareas a realizar dentro de la rutina de interrupción ADC AVR por la finalización de una conversión

}

Interrupción ADC AVR

Ejemplo  En el siguiente ejemplo, mediante una resistencia variable, a la entrada analógica 3 ADC3 del ATmega88 se le hará llegar una señal analógica que va desde 0V a 5V, esa señal será convertida a digital cuyos valores en binario serán 0000000000 para 0V y 1111111111 para 5V, estos número binarios mediante el uso de la resolución serán convertidos a números reales que indiquen el voltaje que está llegando al pin ADC3, estos valores será vistos en una pantalla LCD, estos valores cambiarán cada vez que se gire la resistencia variable para obtener los diferentes valores de la señal analógica. En este caso se utilizará la interrupción ADC AVR

Se utilizará una pantalla LCD conectada al puerto D del ATmega88, para visualizar en el LCD los valores que va tomando la tensión analógica que llega al pin ADC3 utilizado como entrada analógica, sobre el uso de la pantalla LCD con el AVR se comentó aquí, en este caso se  asumirá que ya se conoce como utilizar una pantalla LCD con el microcontrolador AVR y el módulo convertidor analógico digital AVR comentado aquí.

Configurando el registro ADMUX para el ejemplo

La tensión de referencia será la tensión a la cual trabaja el ATmega88 esto es 5V, por lo que el bit7 se pondrá a 0 y el bit6 a 1.

La justificación del número binario de 10 bits que representa la valor analógico convertido a decimal será al la izquierda, por lo que el bit5 se pondrá a 1.

El bit4 no se usa por lo que se le pone a 0.

Se utilizará la entrada analógica 3 por lo que la combinación de los bits 3, 2, 1 y 0 será 0011.

Luego entonces la configuración del registro ADMUX para el ejemplo1 será:

ADMUX=0b01100011;//Vref=VCC justificación izquierda ADC3

Configurando el registro ADCSRA para el ejemplo

En un inicio el ADC estará encendido por lo que el bit7 se pondrá a 1.

Como el ADC iniciará encendido, se iniciará la conversión para que pueda utilizarse con la interrupción ADC AVR, por lo que el bit6 se pondrá a 1.

El bit5 a 0 ya que no se utilizará la habilitación automática del convertidor analógico digital AVR.

El bit4 se pone a 0 para que detecte la interrupción ADC AVR.

El bit3 se ponen a 1 para habilitar el uso de la interrupción ADC AVR.

El ATmega88 estará funcionando a 1MHz, se utilizará una frecuencia de conversión para el convertidor analógico digital AVR de 125Khz, por lo que el prescaler utilizado será de 8, para hacer esto el bit2 se pondrá a 0, el bit1 se pondrá a 1 y el bit0 se pondrá a 1.

Luego entonces la configuración del registro ADCSRA para el ejemplo será:

ADCSRA=0b11001011;//ADC apagado no inicia conversión sin habilitación automática sin interrupciones prescaler de 8.

Configurando el registro ADCSRB para el ejemplo

Como no se utiliza habilitación automática, todo este registro a 0, luego entonces la configuracion del registro ADCSRB para el ejemplo será:

ADCSRB=0;//no se utilizan habilitaciones automáticas

Configurando el registro DIDR0 para el ejemplo

Se hará que cuando se utilice el pin ADC3 se deshabilite su parte digital interna, por lo que el bit3 se pondrá a 1, luego entonces la configuración del registro DIDR0 para el ejemplo será:

DIDR0|=(1<<3);//deshabilita la parte digital interna del pin ADC3

El circuito utilizado es el siguiente:

Interrupción ADC AVR ejemplo circuito

El código para el ejemplo2 del uso del módulo convertidor analógico digital AVR con una pantalla LCD, hecho en el ATMEL STUDIO es el siguiente:

interrupción ADC AVR ejemplo código1

interrupción ADC AVR ejemplo código2a

La siguiente es una imagen del circuito realizado para el uso del convertidor analógico digital AVR mediante la interrupción  ADC AVR.

interrupción ADC AVR ejemplo imágen

Si he logrado ayudarte en cuanto a la utilización del módulo ADC convertidor analógico digital AVR, mediante el uso de la interrupción ADC AVR con el microcontrolador AVR, comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias.

Atte: MrElberni

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0