Interrupción USART AVR


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

Interrupción USART AVR, es necesario comprender la utilización del módulo USART para la comunicación serial del microcontrolador AVR, este es un tema que se ha tratado y se puede ver aquí, también se han realizado algunos ejemplo sencillos sin el uso de la interrupción USART AVR que se pueden ver aquí, de no ser así se recomienda antes de continuar revisar los enlaces indicados.

En esta sección se comenta como utilizar la interrupción USART AVR, que puede ser producida cuando se transmite o se recibe un caracter al realizar la comunicación serial utilizando el módulo USART AVR.

La forma de trabajo del módulo USART AVR a utilizar en esta sección será en modo asíncrono, los ejemplos serán para la comunicación serial entre el microcontrolador AVR y el ordenador, siendo la idea la misma si se quiere realizar la comunicación serial entre microcontroladores, solo hay que estar muy atentos a las conexiones a realizar.

Se utilizará como referencia el ATMEGA88, en caso de utilizar otro microcontrolador AVR que cuente con un módulo USART AVR el procedimiento será muy similar, siempre hay que estar atentos a cuales son los pines RXD y TXD del microcontrolador utilizado, los registros involucrados en la comunicación serial y en este caso los registros involucrados en la interrupción USART AVR por ello siempre hay que tener a mano la hoja de datos del AVR.

La programación de la interrupción USART 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í.

Interrupción USART AVR

Para habilitar la interrupción USART AVR se utilizará el registro UCSR0B que se vio aquí, 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í.

interrupción USART AVR UCSR0B

Para habilitar la interrupción USART AVR al completar la recepción de un caracter, del registro UCSR0B se pone a 1 su bit7, lo que en el ATMEL STUDIO se hace así:

UCSR0B |= (1<<7);//habilita interrupción por recepción USART AVR.

El bit7 del registro UCSR0A, se pondrá a 1 automáticamente para indicar que se ha producido una interrupción USART AVR al completar la recepción de un caracter en el registro UDR0, cuando se lea el caracter recibido este bit se pondrá automáticamente a 0 para seguir detectando la interrupción USART AVR por la recepción de datos.

Para habilitar la interrupción USART AVR al completar la transmisión de un caracter, del registro UCSR0B se pone a 1 su bit6, lo que en el ATMEL STUDIO se hace así:

UCSR0B |= (1<<6);//habilita interrupción por transmisión USART AVR.

El bit6 del registro UCSR0A, se pondrá a 1 automáticamente para indicar que se ha producido una interrupción USART AVR por la transmisión del caracter que se encontraba en el registro UDR0, cuando se cargue un nuevo caracter en el registro UDR0 este bit se pondrá automáticamente a 0 para seguir detectando la interrupción USART AVR por la transmisión de datos.

Para habilitar la interrupción USART AVR al quedarse vacío el registro UDR0, del registro UCSR0B se pone a 1 su bit5 ,lo que en el ATMEL STUDIO se hace así:

UCSR0B |= (1<<5);//habilita interrupción por vaciado del registro UDR0 USART AVR.

El bit5 del registro UCSR0A, se pondrá a 1 automáticamente para indicar que se ha producido una interrupción USART AVR por vaciado del registro UDR0, cuando se cargue un nuevo caracter en el registro UDR0 este bit se pondrá automáticamente a 0 para seguir detectando la interrupción USART AVR por vaciado del registro UDR0.

Interrupción USART AVR en el ATMEL STUDIO

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

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

ISR(USART_RX_vect){

               dato=UDR0;     //al dato de tipo char se le asigna el valor del registro UDR0

                                       //otras tareas a realizar

}

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

ISR(USART_TX_vect){

              UDR0 = caracter;   //en el registro UDR0 se carga el caracter a transmitir

                                           //otras tareas a realizar

}

Si se utiliza la interrupción por vaciado del registro UDR0 USART AVR, la rutina de interrupción se realizará dentro de la siguiente función:

ISR(USART_UDRE_vect){

                //tareas a realizar dentro de la rutina de interrupción por vaciado del registro UDR0

}

Interrupción USART AVR ejemplos

Interrupción USART PIC ejemplo 1

En este primer ejemplo se  realizará la comunicación serial entre el microcontrolador ATMEGA88 y el ordenador a 9600 baudios asíncrona 8 bits, sin bit de paridad con 1 bit de parada, el ATMEGA88 estará trabajando a 8 MHz, en el ejemplo se encenderá y apagará un led conectado al pin PB0 del microcontrolador, al presionar la tecla + del ordenador se encenderá el led, al presionar la tecla – del ordenador se apagará el led, se utilizará el TERA TERM para realizar la comunicación. La recepción del  caracter transmitido por el ordenador será por interrupción de recepción USART AVR.

El circuito utilizado es el siguiente:

interrupción Usart avr ejemplo 1 circuito

En el código realizado con el ATMEL STUDIO se creará una función para iniciar el módulo USART AVR, en la interrupción por recepción del AVR se leerá el caracter transmitido por el ordenador, para que en el ciclo del programa se encienda o apague el led.

Interrupción USART PIC ejemplo 2

En este segundo ejemplo se  realizará la comunicación serial entre el microcontrolador ATMEGA88 y el ordenador a 9600 baudios asíncrona 8 bits, sin bit de paridad, 1 bit de parada, se transmitirán los caracteres de la A a la Z uno a la vez cada segundo, que serán vistos en pantalla utilizando el TERA TERM en la comunicación serial. La transmisión de los caracteres hacia el ordenador por la interrupción USART AVR por transmisión, se conectará además un led en el pin PB0 que cambiará de estado cada 200ms.

El circuito utilizado es el siguiente:

interrupción Usart pic ejemplo 2 circuito

En el código realizado con el ATMEL STUDIO se creará una función para iniciar el módulo USART AVR, en la rutina de atención a las interrupciones de la interrupción por transmisión del AVR, se transmitirá al ordenador un caracter cada segundo y se deshabilitará esta interrupción, en el ciclo del programa se cambiará el estado del led conectado al pin PB0, con la ayuda de una variable auxiliar se habilitará el uso de la interrupción USART AVR por transmisión cada segundo y se incrementará el valor del caracter a transmitir  al ordenador mediante la interrupción.

Atte:MrElberni.

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