Capitulo 8 USART
Capitulo 8 USART
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.
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.
8.1 USART
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.
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.
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.
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.
8.4.1 Objetivo.
8.4.2 Desarrollo.
8.4.3 Código.
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
char data;
void init_USART(void){
sei();
void TX_USART(void){
int main(){
init_USART();
while(1);
8.5 Anexo.
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.
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
Programa en C
Se inicia el programa con las librerías respectivas, y se declara una variable "dato".
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.
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.
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.