Capitulo 8 USART

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

Capitulo 8 USART

8.0 Introducción

La comunicación serial es un proceso de envío de múltiples bits de datos sobre un solo alambre. Es
una reminiscencia del telégrafo original, en el cual los bits fueron los puntos y las rayas del código
Morse. Los bits de un byte serial están separados en tiempo tal que el dispositivo receptos puede
determinar los niveles lógicos de cada bit.

El USART es empleado para comunicarse del microcontrolador a varios otros dispositivos.


Ejemplos de estos dispositivos incluyen la herramienta terminal del Code Vision (empleado para
los problemas y la depuración de los problemas de los programas), otros microcontroladores que
requieren comunicarse con otros microcontroladores para efectuar un trabajo.

La forma regular de comunicación serial, la forma que se discutirá aquí, es asíncrona. La cual es
asíncrona en el sentido que la señal de reloj común no se requiere tanto en la transmisión como
en la recepción para la sincronización de la detección de los datos. Comunicación serial asíncrona
emplea un bit de arranque y un bit de fin de transmisión agregados al byte de datos para permitir
al receptor la determinación del tiempo de cada bit.

En la siguiente figura se muestra los elementos del byte de la comunicación serial asíncrona. Esta
figura muestra la definición de cada bit de la palabra serial. El mensaje inicia con una espera
estando en alto y pasando a bajo para iniciar el mensaje. El bit de arranque o inicio toma el valor
de un bit completo y es seguido por los ocho bits de él byte de dato que se muestra sobre una
línea serial en un orden inverso, esto es, el bit menos significativo aparece primero y el bit más
significativo aparece al último. El bit de fin de mensaje sigue al bit más significativo corresponde a
un uno lógico, el mismo valor para el bit de espera.

St Bit de inicio siempre en cero logico.


(n) Bits de datos (0 a 8).
P Bit de pariedad, puede ser par o impar.
Sp Bit o bits de fin de mensaje, siempre en uno logico.
Idle Bit de espera. No existe transferencia de dato sobre la linea de comunicación

El flanco de bajada inicia la secuencia de transmisión en el receptor serial. Iniciando desde el


flanco de bajada del bit de inicio, el receptor espera 1.5 bits antes de muestrear la línea receptora.
Después de eso, el receptor espera 1 bit por cada bit, por lo tanto se muestrea cada bit de dato
sucesivo en el centro del periodo para máxima eficiencia.
Afortunadamente, todo el tiempo del formateo del byte serial, el muestreo de los bits seriales, y la
suma del bit de inicio y el bit de fin de transmisión son manejados automáticamente por el
universal synchronous asynchronous receiver transmitter (USART).

8.1 USART

El transmisor receptor serial asíncrono y síncrono universal (USART) es una unidad de


comunicación periférica muy flexible, que en el microcontrolador atmega48 permite entre otras
funciones.

 Operación full dúplex (se puede enviar y recibir datos simultáneamente)


 Operación síncrona y asíncrona
 Operación en modo maestro esclavo con reloj síncrono
 Soporta frames de 5,6,7,8 y 9 datos y 1 o 2 de parada
 Generador de paridad par o impar
 Detección de errores (sobre flujo de datos, error en el frame)
 Filtrado de ruido (inicio falso, filtro digital)
 Generación de interrupciones por transmisión completa, por recepción completa o por
registro de datos de transmisión vacía
 Comunicación entre multiprocesadores
 Doblador de velocidad modo de comunicación asíncrona

8.2 Norma RS 232

La interfaz RS-232 está diseñada para distancias cortas, de hasta 15 metros según la norma, y para
velocidades de comunicación bajas, de no más de 20 Kilobytes/segundo. A pesar de ello, muchas
veces se utiliza a mayores velocidades con un resultado aceptable. La interfaz puede trabajar en
comunicación asíncrona o síncrona y tipos de canal simplex, half duplex o full duplex. En un canal
simplex los datos siempre viajarán en una dirección, por ejemplo desde DCE (Data communication
equipment) a DTE (Data terminal equipment). En un canal half duplex, los datos pueden viajar en
una u otra dirección, pero sólo durante un determinado periodo de tiempo; luego la línea debe ser
conmutada antes que los datos puedan viajar en la otra dirección. En un canal full duplex, los
datos pueden viajar en ambos sentidos simultáneamente. Las líneas de handshaking de la RS-232
se usan para resolver los problemas asociados con este modo de operación, tal como en qué
dirección los datos deben viajar en un instante determinado.
Si un dispositivo de los que están conectados a una interfaz RS-232 procesa los datos a una
velocidad menor de la que los recibe deben de conectarse las líneas handshaking que permiten
realizar un control de flujo tal que al dispositivo más lento le dé tiempo de procesar la
información. Las líneas de "hand shaking" que permiten hacer este control de flujo son las líneas
RTS y CTS. Los diseñadores del estándar no concibieron estas líneas para que funcionen de este
modo, pero dada su utilidad en cada interfaz posterior se incluye este modo de uso.

La norma RS 232 es un protocolo de comunicación serial que define la transmisión física entre la
terminal DTE (Data terminal equipment) y un modem DCE (Data communication equipment).

Este protocolo define un uno lógico como una señal comprendida en el intervalo de -5 volts a -15
volts y un cero lógico como una señal comprendida en el intervalo de +5 volts a +15 volts.

Bajo esta terminología, la primera transmisión de 1 a 0 lógico, define un bit de inicio, bit de
arranque, a la que le siguen 5, 6,7, 8 o 9 bits de datos. El octavo bit se emplea como bit de
paridad, mecanismo de detección de errores; al final de la transmisión, la señal debe regresar al
valor lógico cero, el cual se define como bit de fin de transmisión, que se puede configurar como
uno o dos bits de parada.

El conector normalizado para este protocolo es el conector V24, de 25 terminales, sin embargo, en
equipos de cómputo es más utilizado el conector DB9 de 9 terminales, las terminales de este
conector se muestran en la siguiente tabla.
Numero Nombre Función
1 CD Carrier detect
2 RXD Recepción de dato
3 TXD Transmisión de dato
4 DTR Data terminal ready
5 GND Tierra del sistema
6 DSR Data set ready
7 RST Request to send
8 CTS Clear to send
9 RI Ring indicator
Tabla 8.1 Pines de conexión RS232 conector DB9.

8.3 Configuración de la USART.

8.3.1 Registro de entrada salida de datos de la USART, UDR.

Es el registro donde se escriben los datos a transmitir (TXB) y donde se leen los datos recibidos
(RXB), sólo se pueden escribir en este registro cuando el bit UDRE (USART data register empty).
Los datos escritos en este registro mientras UDRE esta en cero, serán ignorados.

8.3.2 Registro de control y estado A de la USART, UCSRA.

 Bit 7 – RXC, recepción completa. Este bit se activa cuando existen datos no leídos en el
buffer de recepción.
 Bit 6 – TXC, transmisión completa. Este bit se activa cuando se han enviado todos los datos
del buffer de transmisión.
 Bit 5 – UDRE, registro de datos de la USART vacio. Indica que el buffer UDR está listo para
recibir nuevos datos.
 Bit 4 – FE, error en el frame. Se activa cuando existe un error en el frame de datos
recibidos.
 Bit 3 – DOR, data overrun. Si el buffer de recepción está lleno y se detecta un nuevo bit de
inicio.
 Bit 2 – UPE, error de paridad. Si se activa la verificación de paridad (UPM1=1) y existe un
error de paridad en la transmisión, este bit se activa.
 Bit 1 – U2X, doblador de velocidad de la USART. Sólo tiene efecto en modo asíncrono,
reduce el divisor de baud rate de 16 a 8, lo que ocasiona que se duplique la velocidad de
transmisión.
 Bit 0 – MPCM, modo de comunicación multiprocesador. Activa el modo de comunicación
multiprocesador, todos los frames recibidos que no contengan información de dirección
serán ignorados.

8.3.3 Registro de control y estado B de la USART, UCSRB.

 Bit 7 – RXCIE, habilitación por interrupción por recepción completa.


 Bit 6 – TXCIE, habilitación de interrupción por transmisión completa.
 Bit 5 – UDRIE, habilitación de interrupción por registro de datos de USART vacio.
 Bit 4 – RXEN, habilita el receptor de la USART.
 Bit 3 – TXEN, habilita el transmisor de la USART.
 Bit 2 – UCSZ2, en conjunto con la UCSZ1:0, establecen el tamaño de bits de datos a utilizar.
 Bit 1 – RXB8, si se escogió un frame de 9 bits de datos, aquí se ubica el noveno bit recibido
y debe ser leído antes de leer los 8 bits restantes.
 Bit 0 – TXB8, si s escogió un frame de 9 bits de datos, aquí se debe de escribir el noveno bit
de datos y debe escribirse antes de los ocho restantes.

8.3.4 Registro de control y estado C de la USART, UCSRC.

 Bit 7:6 – UMSEL1:0, estos bits seleccionan el modo de operación de la USART. De acuerdo
a la siguiente tabla.
 Bit 5:4 –UPMn1:0 Modo de paridad, las posibles combinaciones para modo de operación
con paridad se muestran en la tabla 8.2.
 Bit 3 – USBS, selección de bits de parada; 0=1 bit de parada, 1=2 bits de parada.
 Bit 2:1 – UCSZ1:UCSZ0, en conjunto con UCSZ2, establecen el tamaño de bits de datos, de
acuerdo a la tabla 8.3.
 Bit 0 – UCPOL, polaridad de reloj, sólo aplica en modo síncrono y determina la relación
entre el cambio en la salida de datos y la entrada de datos y el reloj de sincronía (XCK),
como lo muestra la tabla 8.4.

UPM1 UPM0 Modo de paridad


0 0 Desactivada
0 1 Reservado
1 0 Activada, paridad par
1 1 Activada, paridad impar
Tabla 8.2 Modos de paridad

UCSZ2 UCSZ1 UCSZ0 Tamaño de datos


0 0 0 5 bits
0 0 1 6 bits
0 1 0 7 bits
0 1 1 8 bits
1 0 0 Reservado
1 0 1 Reservado
1 1 0 Reservado
1 1 1 9 bits
Tabla 8.3 Tamaño de datos.

UCPOL Cambio en transmisión (TXD) Muestreo de recepción (RXD)


0 Flanco de subida en XCK Flanco de bajada en XCK
1 Flanco de bajada en XCK Flanco de subida en XCK
Tabla 8.4 Configuración de UCPOL

8.3.5 Registros de sección de baud rate, UDRRH y UDRRL.


 Bit 11:0 – UBRR11:UBRR0, registro de baud rate de la USART. Para una completa lista de
valores de configuración consulte la hoja de datos del microcontrolador, paginas 156-159.

8.4 Práctica del USART.

8.4.1 Objetivo.

Conocer el funcionamiento y los registros que intervienen en la configuración del USART.

8.4.2 Desarrollo.
8.4.3 Código.

//_________________________inicio del programa

#include <avr/io.h>

#include <avr/signal.h>

#include <avr/interrupt.h>

char data;

void init_USART(void){

UBRRL=25; //configurar USART para

UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //baud rate 9600 a 4 Mhz

UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);//2 bits de parada, 8 bits de datos

sei();

void TX_USART(void){

data=data-32; // resta 32 para obtener


loop_until_bit_is_set(UCSRA,UDRE); // valor ASCII en mayúsculas

UDR=data; // enviar dato

ISR (SIG_UART_RECV){ //interrupción de recepción USART

Data=UDR; //leer dato recibido

TX_USART(); //función de envío de dato

int main(){

init_USART();

while(1);

8.5 Anexo.

8.5.1 Hyperterminal (configuración).

 Para comenzar la configuración, diríjase al botón de Inicio y seleccione: Programas -


Accesorios - Hyperterminal. Si no tiene la carpeta de Hyperterminal:
 Dentro de Mi PC haga doble click sobre el icono de Panel de Control. Luego haga doble
click sobre Agregar o Quitar Programas y haga un click sobre la pestaña de Instalación de
Windows. Ahora para verificar las opciones de comunicaciones que tiene instalada, haga
doble click sobre Comunicaciones, luego en las Propiedades, y marque la opción de
Hyperterminal y seleccione Aceptar hasta que el programa empiece a instalar el
Hyperterminal.
 Se visualizará una ventana como lo muestra la figura. Haga doble clic sobre el ícono
Hypertrm.

 Al presentarse esta pantalla, en el campo de Nombre, escriba el nombre con el que desea
identificar la sesión (puede escribir T-NET) y oprima el botón de Aceptar.
 En el campo de Conectar utilizando, se selecciona el puerto de comunicación (COM) en
donde se encuentre su módem instalado. Oprima el botón de Aceptar.

 Las propiedades del puerto (COM x) no deben sufrir modificaciones. En esta pantalla
oprima el botón de Aceptar.
 En esta pantalla empezará a parpadear el cursor, en donde debe escribir el siguiente
comando AT&V y oprimir la tecla de Enter. De no visualizarse las letras al teclearlo escriba
el siguiente comando ATE1 y presione Enter al tratar de escribir podrá visualizar los
comandos.
 Esta será la pantalla con todo los perfiles que tiene configurado, en donde hay que
observar los valores que se encuentran en: S7, S9, S10, y en S12. Si tienen valores por
debajo de los que se mencionarán a continuación hay que modificarlos, para que la
transmisión no sea interrumpida.
 Ahora escriba los siguientes comandos:
 ats7=80 Haga un click en la tecla de ENTER. Deberá aparecer OK
 ats9=100Haga un click en la tecla de ENTER. Deberá aparecer OK
 ats10=255 Haga un click en la tecla de ENTER. Deberá aparecer OK
 ats12=120 Haga un click en la tecla de ENTER. Deberá aparecer OK
 at&w Haga un click en la tecla de ENTER. Deberá aparecer OK. De lo contrario
escriba atw
 atx3 Haga un click en la tecla de ENTER. Deberá aparecer OK
 at&k3 Haga un click en la tecla de ENTER. Deberá aparecer OK. De lo contrario
estriba atk3
 at%c=1 Haga un click en la tecla de ENTER. Deberá aparecer OK. De lo contrario
escriba at%c1 , at&c=1 ó at&c1
 at&w Haga un click en la tecla de ENTER. Deberá aparecer OK. De lo contrario
escriba atw
 Una vez concluida la configuración, vaya al menú de File (Archivo) y seleccione Exit (Salir).
Le preguntará si desea desconectarse, haga un click en Yes (Si), y si desea guardar sesión,
seleccione la opción Yes (Si).
 Saldrá un nuevo ícono con el nombre o la letra que coloca al principio, cierre la ventana y
realice la conexión nuevamente directamente desde el ícono Internet, observando si fue
solventado el inconveniente con el módem.
8.6 Información adicional.

8.6.1 Practica de la USART.

Comunicación Serial USART

Descripción
En este proyecto, se estudia una de las maneras de entablar comunicación del microcontrolador
con la computadora, para realizar esta práctica se requiere del uso de varios componentes los
cuales se describen a continuación, la comunicación serial es una de las maneras más sencillas de
comunicar al microcontrolador hacia el exterior, ya sea con una computadora o con algún otro
microcontrolador. Para este proyecto se configurara el microcontrolador con el oscilador interno a
8 MHz y se emplea del programa Teraterm el cual es el equivalente de la hyperterminal en
Windows Vista. Básicamente el programa realizara un eco del dato mandado, si se manda una "a"
el microcontrolador recibirá esa "a" y la enviara de vuelta. Esto con la finalidad de aislar la
comunicación de cualquier proceso, en su momento es posible mandar un dato, aplicarle algún
proceso o algoritmo y regresar el resultado.

Diagrama Esquemático
Materiales
Max 232
4 capacitores de 10 µF
1 Microcontrolador ATmega48
Programador
1 Cable USB a Serial en caso de que la computadora no tenga puerto serial

Introducción
Características de la USART del ATmega8

La USART o Universal Synchronous and Asynchronous serial Receiver and Transmitter es un


dispositivo de comunicación serial altamente flexible, sus principales características son:
-Operación Full Dulpex
-Registros de transmisión y recepción independientes
-Operación síncrona o asíncrona
-Generador de Baud Rate de alta resolución
-Detección de error
-Filtro de ruido
-Modo de comunicación multiproceso
-Doble velocidad en modo de comunicación asíncrono
El manejo de la comunicación serial presenta muchos beneficios, entre los que destacan, el control
de sistemas a través de la computadora realizando cálculos complejos, visualización y graficado de
datos, entre otros. Es importante destacar que existen muchos programas aparte de la
hyperterminal los cuales pueden entablar comunicación serial con el microcontrolador, programas
como MatLab, LabVIEW, TeraTerm entre otros.

Programa en C

#include<avr/io.h> //se llama a las librerías de entrada salida


#include<util/delay.h> //se llama a las librerías de retardo
int dato; //se declara una variable entera
void InitUART( unsigned char baudrate ) { //configurando la UART
UBRRL = baudrate; //seleccionando la velocidad
UCSRB = (UCSRB | _BV(RXEN) | _BV(TXEN)); //habilitando la transmisión y recepción
}
unsigned char ReceiveByte( void ){ //función para recibir un byte
while ( !(UCSRA & (1<<RXC)) ); //esperar la recepción
return UDR; //retornar el dato tomado de la UART
}
void TransmitByte( unsigned char data ) { //función para transmitir dato
while ( !( UCSRA & (1<<UDRE)) ); //esperar transmisión completa
UDR = data; //depositar el dato para transmitirlo
}
int main (void) {
InitUART( 51 ); //inicializa la UART
while(1){
=ReceiveByte(); //recibir un dato de la UART
(dato); //mandar el mismo dato
}
}

Detalles del programa


#include<avr/io.h>
#include<util/delay.h>
int dato;

Se inicia el programa con las librerías respectivas, y se declara una variable "dato".

void InitUART( unsigned char baudrate ) {


UBRRL = baudrate;
UCSRB = (UCSRB | _BV(RXEN) | _BV(TXEN));
}

Se declara la función que configura el USART, es conveniente recordar que en este caso se
trabaja el microcontrolador a una frecuencia de 8 MHz .El primer registro a configurar es el
UBRRL.

Como se puede ver el UBRR (11:0) contiene 12 bits, en este registro se ajusta la velocidad de
trabajo de la comunicación, el baud rate. Hay que substituir los valores indicados en las
siguientes formulas para obtener el valor que va en el UBRR y él % de error.
Como se emplea el modo asíncrono normal, se emplean la primeras formulas para calcular el
UBRR y después los bauds. Primero se resuelve la del UBRR para obtener el valor el cual se
calcula con 9600 bauds, posteriormente se calculan los bauds con el valor del UBRR (Pero el
valor entero ya que en los registros sólo se pueden asignar números enteros), y el resultado
corresponde a los bauds reales.

El valor obtenido para 9600 bauds es de 51.0833 por lo tanto, se toma el valor de 51
redondeando el valor obtenido, y con el cual se calcula los bauds reales.

= 16 +1 = (8000000)(16)( 51)+1 = .

9615.3846 Corresponde al valor real de bauds con los que el microcontrolador trabaja, para
obtener el %de error respecto al valor de 9600 aplicamos la siguiente formula.
Como se puede ver el porcentaje de error es pequeño. Las operaciones realizadas se
ejecutaron para conocer un poco más el funcionamiento del registro y el cómo calcular el
valor respecto a algún baud rate deseado, en caso de no desear ejecutar las anteriores
operaciones existen tablas en la hoja de datos con los valores más empleados.

Como se puede ver, los valores obtenidos para el UBRR son similares a los de la tabla.
Volviendo al registro, sólo se le asigna el valor al UBRRL el cual es suficiente modificar ya que
el 51 en binario es 0b110011, como se puede ver sólo se necesitan los bits del 0 al 6.

Para el UCSRB

Como se observa en el código se habilitan los bits RXEN y TXEN los cuales habilitan el
transmisor y el receptor de la USART además de los pines correspondientes RXD y TXD.

unsigned char ReceiveByte( void ){ //función para recibir un byte


while ( !(UCSRA & (1<<RXC)) ); //esperar la recepción
return UDR; //retornar el dato tomado de la UART
}
El uso del registro UCSRA para la función de recibir un byte, es por el bit 7 el RXC el cual
indica que hay algún dato para leer en el registro. Por lo tanto el ciclo while espera hasta que
haya un dato, posteriormente finaliza la función con un return, el cual regresa el valor en el
UDR (donde se encuentra el dato) fuera de la misma.

void TransmitByte( unsigned char data ){


while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}

Al igual que la función de recibir un byte esta espera el UDRE en el UCSRA el cual indica que el
buffer de transmisión está listo para recibir nuevos datos, una vez que salga del ciclo, se
coloca el dato deseado en el UDR para transmitirlo.

init main (void) {


InitUART( 51 );
while(1){
dato=ReceiveByte();
TransmitByte(dato);
}
}

Como ya se explico, se inicializa la UART con un 51 el valor correspondiente, una vez


configurada el programa entra al ciclo, en donde la función espera recibir un dato, una vez que
se recibe el dato, este mismo sin sufrir modificación alguna es mandado a través de la UART.

Es conveniente recordar que se está mandando un byte esto es, que al recibir el
microcontrolador una letra en una variable de tipo entero, esta variable tendrá el valor que
corresponde a esa letra (ver la tabla ASCII), por ejemplo si se manda una variable con el valor
57 en la terminal se observar una "a", pero si se envía una variable tipo char con una 'a' en la
terminal se verá esa misma "a", en la tabla se muestran varios ejemplos.

Por lo tanto dependiendo del programa que se esté empleando, se debe de tener cuidado si sé
recibe los bytes y los toma como caracteres o como enteros.

También podría gustarte