Está en la página 1de 16

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.

co 1

TUTORIAL Comunicación Serial

OBJETIVOS

• Manejar el módulo USART para comunicaciones seriales asíncronas.


• Realizar transmisiones y recepciones seriales útiles para el control y
monitoreo de eventos.

INTRODUCCIÓN:

En este tutorial se explica una comunicación vía puerto serial al PC, para ello
manejaremos el módulo USART del microcontrolador PIC16F887.
Realizaremos una envío de datos a ser visualizados en el LCD.

Algunas Generalidades del puerto serial:

¿Porque serial?

Hay muchas razones diferentes para usar una interfaz serial. Una de las más
comunes es la necesidad de hacer interfaces con PCs, durante el desarrollo y
en la aplicación. Casi todos los PCs tienen algún tipo de interfaz con bus serial
disponible para conectar los periféricos.

Un beneficio de las comunicaciones seriales es el poco número de pines


necesarios. Las comunicaciones seriales pueden ser hechas con solamente un
pin de I/O (entrada/salida), comparado con los 8 ó más pines necesarios para
lograr una comunicación paralela. Muchos periféricos comunes en los sistemas
embebidos, tales como conversores análogo a digital, conversores digital a
análogo, LCDs, y sensores de temperatura, soportan interfaces seriales.

Terminología

Antes de detallar las interfaces seriales, debemos definir varios términos:

• En un bus asíncrono, los datos son enviados sin una señal de reloj, un
bus síncrono envía los datos con una señal de reloj.

• Full duplex significa que los datos pueden ser transmitidos y recibidos
simultáneamente. Half-duplex es cuando los datos pueden ser enviados
o recibidos, pero no al mismo tiempo.

• Maestro/Esclavo. Describe un bus donde un dispositivo es el maestro y


otros son esclavos. Los buses maestro/esclavo son usualmente
sincrónicos, el maestro frecuentemente proporciona el reloj de
temporización para los datos que están siendo enviados en ambas
direcciones.

• Un bus multimaestro es un bus maestro/esclavo que puede tener más


de un maestro. Estos buses deben tener un esquema de arbitración que

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 1


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 2

pueda resolver conflictos cuando más de un maestro quiera controlar el


bus al mismo tiempo.

• Las interfaces punto a punto o par a par son las que tienen dos
dispositivos que tienen una relación de igual a igual, el uno al otro; no
hay maestro ni hay esclavos. Las interfaces pares son frecuentemente
asíncronas.

Ventajas de usar transmisión serial sobre la transmisión paralela:

1) Los cables seriales pueden ser más largos que los cables paralelos. El
puerto serial transmite un '1' como un -3 ó -25 voltios y un '0' como un +3 ó +25
voltios. La variación en voltaje puede llegar a ser de hasta 50 V mientras que
con el puerto paralelo es de 5V.
2) No se necesitan tantos cables para la transmisión paralela.
3) se puede adaptar a interfaces infrarrojas.

Protocolo de Comunicación RS-232

TIA/EIA-232-F (Normalmente referido como RS-232) es una interfaz común


que puede ser encontrada en casi todos los PCs.

RS-232 es un estándar completo, no solamente incluyendo características


eléctricas, sino características físicas y mecánicas, como una conexión de
hardware, pin-outs, nombres de señales. Una interfaz punto a punto, RS-232
es capaz de lograr a distancias moderadas velocidades de hasta 20-Kbps.
Aunque no se especifique en el estándar, velocidades más altas de 115.2Kbps
son posibles en distancias relativamente cortas.

Un bus RS-232 es un bus no balanceado capaz de establecer comunicaciones


full-duplex entre pares receptor/transmisor, Cada uno tiene una señal de
transmisión que está conectada a la señal de recepción en el otro lado.

Muchos productores de microcontroladores incluyen soporte para RS-232,


llamado Universal Asynchronous Receiver Transmitters (UARTs). Otros tipos
de comunicaciones seriales que se pueden encontrar en los sistemas robóticos
son RS-422 y RS-485, I2C, SPI. Estos protocolos no se estudian aquí.

Los puertos seriales vienen en dos "tamaños", esta el conector tipo D de 25


pines y el conector tipo D de 9 pines, normalmente tienen terminal macho en la
parte trasera del PC, por lo tanto se requiere un conector hembra en el
dispositivo a conectar. A continuación mostramos la tabla con la asignación de
pines de un conector típico DB9 y DB25.

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 2


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 3

En la siguiente tabla se explica el funcionamiento de las señales usadas por El


protocolo RS-232.

D-Type D-Type Abreviación Nombre Función


25 Pin 9 Pin completo
TD Transmisión Salida serial de datos
Pin 2 Pin 3 de datos
RD Recepción Entrada serial de datos
Pin 3 Pin 2 de datos
CTS Clear to
Esta línea indica que el
Pin 5 Pin 8 send dispositivo esta listo para enviar
datos
DCD Data Carrier Cuando el dispositivo detecta
Pin 8 Pin 1 Detect una portadora de un equipo al
otro lado de la línea.
DSR Data Set Esta línea le indica al equipo que
Pin 6 Pin 6 Ready esta listo para establecer el
enlace.
DTR Data Es opuesto al DSR. Esta le dice
Pin 20 Pin 4 Terminal a el MODEM que la UART esta
Ready lista para el enlace.
RTS Request to Esta línea le informa al equipo
Pin 4 Pin 7 Send que la UART esta lista para
intercambiar datos
RI Ring Se activa cuando un equipo
Pin 22 Pin 9 Indicador detecta una señal de teléfono en
la RTPC
Pin 7 Pin 5 SG Signal Señal de referencia a tierra
Ground
Tabla 1. conectores de 9 pines y de 25 pines

Formas de onda RS232


La comunicación RS232 es asíncrona. Esto es porque la señal de reloj no es
enviada con los datos. Cada palabra es sincronizada durante el bit de inicio, y
el reloj interno en cada lado de la comunicación, mantiene un registro de la
temporización.

El diagrama superior muestra la forma de onda que sale del modulo serial
cuando se utiliza un formato común 8N1. 8N1 significa 8 bits de datos, no
Paridad y un bit de Stop. La línea RS232, cuando en estado de espera está en
el estado de uno lógico. Una transmisión comienza con un bit que es un cero
lógico. A continuación cada bit es enviado por la línea, uno ala vez. El LSB (Bit
menos significativo) es enviado primero. Un bit de Stop (uno lógico) es luego
adherido a la señal para cerrar la transmisión.

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 3


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 4

El diagrama, muestra que el siguiente bit después del bit de stop es un cero
lógico. Esto significa que otra palabra está siguiendo en la transmisión, y este
es el bit de Start. Si no hay más datos siguiendo, entonces la línea receptora
estará en un estado de espera (uno lógico). Nosotros podemos encontrar en la
transmisión serial algo llamado una señal de "Break". Esto ocurre cuando la
línea de datos es mantenida en un estado de cero lógico por un tiempo superior
al necesario para enviar una palabra completa. Desde luego, si uno no lleva la
línea de nuevo al estado de espera, la terminal receptora interpretará esto
como una señal de break.

Los datos están enmarcados entre el bit de Start y el bit de Stop. Los datos que
se envían de esta forma se dice que están enmarcados.

Los niveles RS-232 utilizan desde +3 a +25 voltios para significar un "espacio"
(cero lógico) y desde -3 a -25 voltios para significar una "marca"(uno lógico).
Cualquier voltaje en estas regiones (entre -3 y +3 voltios) es indefinido. La
señal digital normalmente se lleva a una etapa de conversión de niveles
RS232. Esta es la señal presente en el puerto RS-232 del computador como se
observa en la imagen.

Niveles típicos de transmisión serial RS-232 (+10, -10)

La grafica anterior se aplica tanto a las líneas transmisoras como receptoras en


el puerto RS-232.

Convertidores de nivel RS-232

Casi todos los dispositivos digitales requieren niveles lógicos TTL o CMOS. El
primer paso para conectar un dispositivo a un puerto RS-232 es transformar los
niveles RS-232 a niveles de 0 y 5 voltios. Como hemos comentado
anteriormente esto es realizado con convertidores de nivel RS-232.

Un dispositivo usado es el MAX232. Este incluye unas Bombas de Carga, que


generan +10V y -10V de una fuente sencillas de 5V. Este circuito integrado
también incluye dos receptores y dos transmisores en el mismo paquete. Esto
es útil en muchos casos cuando uno solamente se quieren usar las líneas de

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 4


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 5

datos de transmisión y recepción. No será necesario utilizar dos chips, uno será
usado para la línea de recepción y otra para la línea de transmisión.

MANEJO DE LA COMUNICACIÓN EN EL PIC (USART):

En la mayoría de las aplicaciones realizadas con microcontroladores se usa


una forma más simple de la comunicación RS 232 en la cual solo se usan los
pines de TX(TD) RX (RD) y obviamente la tierra (GND). En este tipo de
comunicación no se manejan los pines de protocolo (Handshaking).

La comunicación serial está implementada en dos módulos en la mayoría de


los microcontroladores PIC. Un módulo denominado SSP se encarga de las
comunicaciones I2C y SPI usadas para comunicar circuitos integrados entre sí;
en este tutorial nos centraremos en el otro módulo, el USART, el cual es usado
para realizar la comunicación serial con un PC siguiendo el protocolo RS232.

USART (Universal Synchronous Asynchronous Receiver Transmitter) es un


modulo que permite realizar comunicaciones tanto sincronas como asincronas,
para la comunicación con el computador obviamente usaremos el modo de
transmisión asíncrona. El USART trabaja sobre dos pines del microcontrolador,
el TX (RC6) y el RX (RC7).

El USART consta de varias partes, un generador de baudios (BRG) un


transmisor (Tx) y un receptor (Rx). El generador de baudios es un reloj interno
que sincroniza la comunicación, las dos partes a ser comunicadas deben
configurarse a la misma cantidad de baudios (Pc y microcontrolador). El
transmisor está conformado básicamente por un buffer donde se escribe el
dato a ser enviado (TXREG) y un registro de desplazamiento (TSR) que se
encarga de enviar uno a uno los bits escritos en TXREG al ritmo dado por el
generador de baudios. Análogamente el receptor está conformado por un
registro de desplazamiento (RSR) que recibe los datos bit a bit y un buffer
(RCREG) que guarda el dato recibido. Los registros de desplazamiento RSR
TSR son manejados internamente por el microcontrolador y no se tiene acceso
a ellos desde el software.

El USART cuenta con los siguientes registros:

TXSTA: registro de control y estado de transmisión.

Bit 7: CSRC: Este bit no se usa en modo asíncrono, en modo síncrono indica si
se es maestro o esclavo.

Bit 6: TX9: Este bit indica si se van a transmitir 8 bits (0) o 9 bits (1),
generalmente en una comunicación con el PC se usan 8 bits, el noveno bit se
usa en ocasiones para direccionamiento o paridad.

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 5


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 6

Bit 5: TXEN: Este bit activa (1) o desactiva (0) el trasmisor.

Bit 4: SYNC: Selecciona entre modo síncrono (1) o asíncrono (0), recuerdese
que trabajaremos en modo asíncrono.

Bit 3: No implementado.

Bit 2: BRGH: Este bit controla el generador de baudios, este bit conjuntamente
con el registro SPBRG controla los baudios a los cuales trabajará la
comunicación.

Bit1: TRMT: Este bit es una bandera (solo lectura) que indica si el registro de
desplazamiento TSR esta lleno (0) o vacío (1). Puede servir para identificar el
fin de una transmisión al colocarse en 1.

Bit 0: TX9D: Si se selecciono transmisión a 9 bits acá se escribe el noveno bit a


ser transmitido.

RCSTA: Registro de control y estado de receptor:

Bit 7: SPEN: Habilitador de puerto serial, al colocarlo en 1 habilita los pines


RC6 y RC5 para la comunicación serial de resto estos se habilitan como pines
de uso general.

Bit 6: RX9: Selecciona entre recepción de 8 (0) o 9 bits (1).

Bit 5: SREN: No se usa en modo Asíncrono.

Bit 4: CREN: Activa el receptor (1) o lo desactiva (0)

Bit 3: ADDEN: Se usa para activar un modo especial del usart en el cual se usa
el 9 bit para propósitos de direccionamiento, no trabajaremos con este modo
por lo tanto este bit lo pondremos en cero.

Bit 2: FERR: Esta bandera indica que sucedió un Framing Error, este error
sucede cuando el bit de parada no se recibe correctamente. Se libera al leer el
RCREG y recibir el siguiente dato válido.

Bit 1: OERR: Bandera que indica que sucedió un error de Overrun, sucede
cuando se recibe un bit antes de haberse leído el anterior en el registro
RCREG lo cual produce que el dato anterior se pierda. Se limpia al poner en
cero CREN.

Bit 0: RX9D: Noveno dato recibido si esta activada la recepción de 9 bits.

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 6


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 7

SPBRG: Este registro se utiliza para configurar la velocidad (baudios) a la cual


trabajará el puerto, para ello se utiliza también el bit BRGH según el estado de
este se usará una de las siguientes fórmulas para obtener el valor a escribir en
SPBRG según los baudios deseados:

Obsérvese que al ser SPBRG un valor entero no se obtendrá un valor exacto si


no que se tendrá un cierto porcentaje de error, generalmente este error es
menor si se usa BRGH=1.

En la hoja de datos se proporcionan valores ya calculados para distintos


baudios y frecuencias de reloj, pueden consultarse estas tablas para evitar la
realización del cálculo.

RCREG: Registro que guarda el resultado de la recepción.


TXREG: Registro en el que se escribe el dato a ser enviado.

PIR1, PIE1, INTCON: El módulo USART puede generar interrupciones al recibir


o enviar un dato, para ello deben habilitarse los bits TXIE o RCIE (PIE1) para
las interrupciones de transmisión o recepción respectivamente, las banderas
para dichas interrupciones son TXIF y RCIF, todos estos bits del registro PIR1.
Recuérdese habilitar las interrupciones globales (GIE) y las de periféricos (PIE).

PASOS PARA REALIZAR UNA COMUNICACIÓN SERIAL:

1. Configurar los registros TXSTA y RCSTA.


2. Configurar los pines RC6 y RC7 como entradas (TRISC6 y 7 en 1)
3. Configurar el registro SPBRG para la velocidad en Baudios, recuerdese
configurar a la misma velocidad el Pc y el micro.
4. A partir de este momento pueden realizarse transmisiones y
recepciones:
a. Transmisión:
i. Escribir el dato a ser transmitido en el registro TXREG.
ii. Esperar que el bit TMRT se coloque en 1 indicando que la
transmisión ha terminado (Registro de desplazamiento
vacío). En este momento se está listo para transmitir otro
dato.
b. Recepción:
i. Esperar que el bit RCIF del registro PIR1 se coloque en 1
indicando que se ha recibido un nuevo dato.
ii. Leer el dato recibido en el registro RCREG, al hacer esto
AUTOMÁTICAMENTE se limpia la bandera RCIF.

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 7


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 8

Usando interrupciones:
La transmisión y la recepción pueden realizarse usando interrupciones,
esto permite realizar otros procesos mientras se están enviando o
recibiendo datos.

La recepción por interrupciones es muy simple, simplemente se espera


que ocurra la interrupción se verifica que sea por recepción (RCIF==1) y
se lee el dato, al leerlo la bandera automáticamente se coloca en cero y
se puede salir de la interrupción. La bandera RCIF NO puede limpiarse
manualmente.

La transmisión por interrupción es ligeramente diferente. La bandera


TXIF se enciende no cuando una transmisión se ha completado si no
cuando el dato ha sido traspasado de el registro TXREG al registro de
desplazamiento TSR. Esto permite tener un dato “En cola” mientras el
otro se envía, cuando el primer dato se ha enviado el segundo se
transfiere al TSR y comienza a enviarse al tiempo que se genera una
interrupción para cargar el tercer dato en el TXREG.

Téngase en cuenta que al encender el transmisor configurando el bit


TXEN se generará una interrupción indicando que el TXREG está vacío
y esperando datos, dentro de esta interrupción puede colocarse el primer
dato a enviar. Cuando vuelva a generarse la interrupción la única forma
de limpiar la bandera es escribir un nuevo dato a TXREG, si no desean
enviarse más datos deben deshabilitarse la interrupción por recepción
para evitar que la bandera mantenga al micro en interrupción constante.
La bandera TXIF solo puede ser limpiada al escribir a TXREG, NO
puede limpiarse manualmente.

CODIFICACIÓN:

A continuación desarrollaremos un código que recoge un dato del PC,


luego lo visualiza en el LCD y lo reenvía nuevamente al PC. La
comunicación en el PC se realiza por medio del programa Hiperterminal
que viene incluido en el Windows, personas con conocimientos en
programación de computadores pueden desarrollar software para
comunicarse por el puerto serial y realizar interfaces específicamente
diseñadas para la recolección y envío de datos para un proceso
particular.

Al iniciar el hiperterminal se debe configurar la salida por el puerto serial


(Generalmente COM1) luego se debe configurar la velocidad de
transmisión a la misma velocidad elegida en el micro, el número de bits
de datos debe ser 8 (o 9 si así se eligió en el micro) se debe trabajar con
un solo bit de parada y sin control de flujo. (esto se explica en el anexo
1)

A continuación se detalla el código obtenido, nótese que como la


transmisión serial envía los caracteres en código ASCII no es necesario

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 8


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 9

realizar conversiones para enviarlos al LCD. Es de aclarar que este


codigo no esta realizando comunicación serial por interrupciones sino
por polling (Polling en computación hace referencia a una operación de consulta
constante, generalmente hacia un dispositivo de hardware, en este caso RCIF==0 y
TRMT==0, tal como se realizo en el tutorial de conversion analogo a digital)

#include <pic.h>
#include "delay.h"
#include "lcd.h"

unsigned char contador=0;


unsigned char frase[ ]="Dato recibido:";

void main (void)


{
TRISC=0b11000000; //Puerto C es salidas LCD
TXSTA=0b00100100; //Habilito puerto serial
RCSTA=0b10010000; //Tanto tranmsmisor como receptor
SPBRG=25; //Configuro velocidad de 9600baudios
//A 4Mhz y con BRGH=1.
lcd_init(); //Inicializo el LCD.
lcd_clear(); //Limpio el LCD.
lcd_puts(frase); //Mensaje de bienvenida.
lcd_goto(0x40);

while(1)
{
while(RCIF==0)
{
//Espero recepción de dato
}
contador++; //Incremento contador de datos
if(contador==15)
{
contador=0; //Prevengo llenado de la linea del LCD
lcd_goto(0x40);
}
lcd_putch(RCREG); //Al recibir dato lo envio al LCD.
TXREG=RCREG; //Inicio el reenvio del dato recibido.
while(TRMT==0)
{
//Espero fin de transmisión.
}
}
}

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 9


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 10

Diagrama de conexiones:
Para comunicacionserial se utiliza el chip MAX232, que sirve de interface entre
los voltajes del computador y el micro, aquí se presenta la forma de conectar
dichi integrado y un pic 16F877A, similarmente es para el 16F887, en la pagina
siguiente se muestra el circuito de la simulacion en proteus

Para la simulacion en proteus se debe tener en cuenta varias cosas:

1- Simulamos un computador con el dispositivo Terminal Virtual

en proteus se denomina VTERM, este dispositivo se debe configurar


con las mismas caracteristicas de la comunicación serial del
microcontrolador, es decir 9.600 baudios, 1 bit de inicio, 8 bit de
datos, 1 bit de parada, sin paridad, sin control de flujo ( Xon-Xoff)

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 10


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 11

2- En el circuito en proteus, no se coloca el max232, ya q no permite el


funcionamiento adecuadamente, simplemente montan el ciruito
directo como en la siguiente grafica

3- Luego inician la simulacion en proteus (PLAY), y abren la terminal


virtual, dando clic derecho sobre ella, y seleccionando la ultima
opcion denominada Virtual Terminal - VT1

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 11


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 12

4- Ya con la pantalla de la terminal virtual abierta, damos clic derecho


sobre ella y habilitamos el eco sobre los caracteres que pulsemos en
el teclado del computador, tal como la siguiente grafica, esto sirve
para visualizar en la terminal local los caracteres q estamos enviando
al microcontrolador por comunicación serial

5- Finalmente, probamos el funsionamiento del circuito pulsando


diferentes teclas, estas se veran en pantalla, se enviaran al micro, el
cual las miestra por LCD y las reenvia al computador, por lo q en
pantalla se vera 2 veces el mismo carácter, y si le quiten el eco se
vera 1 vez.

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 12


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 13

6- tambien pueden hacer otras pruebas, teclear un carácter y en el


micro sumarle 1 para devolver otro ascii diferente

TXREG=RCREG+1;

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 13


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 14

Anexo 1: CONFIGURACION DEL HYPERTERMINAL DE WINDOWS

Abrimos el hyperterminal ubicado en accesorios. Es posible q no lo encuentren


en su PC ya q se debio instalar con el windows, pero no siempre se hace.
Entonces lo pueden bajar de internet, este mismo u otro software similar.

Luego, lo abrimos, hacemos una nueva conexión, le colocamos un nombre y


seleccionamos un icono

Luego seleccionamos el puerto de comunicación a utilizar, generalmente es el


COM1

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 14


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 15

Y configuramos con las mismas caracteristicas de la comunicación


serial del microcontrolador, es decir 9.600 baudios, 1 bit de inicio, 8
bit de datos, 1 bit de parada, sin paridad, sin control de flujo ( Xon-
Xoff)

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 15


Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 16

Y queda listo la conexión por Hyperterminal para ser utilizada.

Curso de Microcontroladores PIC ndmunoz@elpoli.edu.co 16

También podría gustarte