You are on page 1of 15

10- Comunicacin Serial

10 COMUNICACIN SERIAL
Una caracterstica importante en todo microcontrolador es la capacidad de poder comunicarse con otros componentes (memorias, convertidores, RTC, etc) o con otros dispositivos (computadora personal, u otros microcontroladores). Los PIC32MX poseen varios mdulos de comunicacin serial diseados para permitir la comunicacin del microcontrolador con otros componentes o dispositivos esternos. El PIC32MX534F064H posee: 6 mdulos para comunicacin serial asncrona UART (Universal Asynchronous Receiver and Transmitter). 3 mdulos para comunicacin serial sncrona SPI (Serial Peripheral Interface). 4 mdulos para comunicacin serial sncrona I2C (Inter-Integrated Circuit). 1 mdulo para comunicacin CAN (Controller Area Network). 1 mdulo para comunicacin USB OTG (Universal Serial bus On-the-go).

La diferencia principal entre una interface sncrona (como SPI o I2C) y una ascrona (como UART, CAN o USB) es la forma en la que la informacin de sincronizacin es pasada del transmisor al receptor. Los perifricos sncronos necesitan una lnea fsica (un cable) dedicada a la seal de reloj, proporcionando la sincronizacin entre los dos dispositivos. Los perifrico asncronos no usan una seal de reloj, la informacin de sincronizacin es extraida de los mismos datos. Se agregan bit de inicio y de parada, adems de un formato preciso a una tasa de transferencia fija.

Ing. Juan Ramon Terven Salinas

152

10- Comunicacin Serial

UART
El mdulo UART de la siglas en Ingles Universal Asynchronous Receiver Transmitter permite comunicacin serial asncrona full-duplex con otros dispositivos, o componentes tales como computadoras, convertidores, mdulos inalmbricos, etc.

Las caracteristicas principales del mdulo UART son: Transmisin Full-duplex de 8- o 9-bits a travs de los pines UxTX and UxRX. Opciones de paridad Par, Impar o Sin paridad para datos de 8 bits. Uno o dos bits de parada (Stop bits). Deteccin automtica de la tasa de baudios. Un generador de baudios integrado con prescaler de 16 bits. Tasas de transferencia de desde 76 bps hasta 20 Mbps a 80 MHz. Deteccin de errors de paridad y desbordamiento de buffer. Soporte para modo de 9 bits con deteccin de direccin (bit 9 en 1). Interrupciones de transmission y recepcin. Modo de circuito cerrado (Loopback) para diagnstico y depuracin.

La Figura 10-1 muestra el diagrama simplificado del UART, el cual consiste de los siguientes elementos principales: Generador de Baudios Transmisor Asncrono Receptor Asncrono

Figura 10-1. Diagrama de bloques simplificado (tomado de[12] ).

Ing. Juan Ramon Terven Salinas

153

10- Comunicacin Serial

Protocolo serial RS-232


Un uso comn que se le da al mdulo UART es comunicar el microcontrolador con una computadora usando el puerto serie. El protocolo RS-232 es el que usa el Puerto Serie de la computadora. Este puerto ha sido una parte integral de todas las computadoras por ms de 20 aos. A pesar de que muchos sistemas nuevos han abandonado el puerto serie completamente y adoptado conexiones por USB, el puerto serie sigue siendo usado en la industria, en los equipos de instrumentacin y en mdulos embebidos, debido a su sencillez en comparacin con protocolos seriales modernos como el USB o el IEEE1394. En el protocolo RS-232, el dispositivo a conectar es llamado DCE (Data Communication Equipment) y la computadora es llamada DTE (Data Terminal Equipment). Todos los sistemas operativos en uso hoy en da suportan los puertos serie, porque estos puertos se han usado por dcadas. El trmino "serial" viene del hecho de que el puerto serie "serializa" los datos. Esto quiere decir que toma un byte de datos y transmite un bit a la vez. La ventaja del puerto serie es que necesita nicamente 1 solo cable para transmitir los 8 bits (mientras que un puerto paralelo necesita 8). La desventaja es que dura 8 veces ms para transmitir el dato que si tuviramos 8 cables. En el protocolo RS-232, antes de cada byte de informacin, se envia un bit de Start, el cual es un bit con valor de 0, despus se enva el octeto y finalmente se enva un bit de Stop para indicar que el byte ha sido completado como se muestra en la Figura 10-2. Algunas veces tambin se manda un bit de paridad para verificacin de errores.

Figura 10-2. Serializacin de un byte

Ing. Juan Ramon Terven Salinas

154

10- Comunicacin Serial

El conector serial

El conector externo para un puerto serie puede ser de 9 o de 25 pines (Figura 10-3). Originalmente el uso de un puerto serie era para conectar un modem a la computadora. La asignacin de los pines refleja esta conexin como se muestra en la Tabla 10-1 y Tabla 10-2. Comnmente se usa un conector DB9 hembra para conectarlo en el conector serial DB9 macho que poseen las computadoras.

Figura 10-3. Conector Serie Tabla 10-1. Conector de 9 pines

PIN
1 2 3 4 5 6 7 8 9

ABREV.
CD RD TD DTR SG DSR RTS CTS RI

NOMBRE
Carrier Detect Receive Data Transmit Data Data Terminal Ready Signal Ground Data Set Ready Request To Send Clear To Send Ring Indicator

FUNCIONAMIENTO
Determina si el modem est conectado a una lnea telefnica en funcionamiento. La computadora recibe la informacin enviada por el modem. La computadora enva informacin al modem. Esta seal le dice al MODEM que el UART est listo para establecer una conexin. Tierra Esta seal le dice al UART que el MODEM est listo para establecer una conexin. Esta lnea le informa al MODEM que el UART est listo para intercambiar datos. Esta lnea indica que el MODEM est listo para intercambiar datos. Una vez que una llamada ha tomado lugar, la computadora reconoce por esta seal (enviada por el modem) que una llamada es detectada.

Ing. Juan Ramon Terven Salinas

155

10- Comunicacin Serial


Tabla 10-2. Conector de 25 pines

PIN
1 2 3 4 5 6 7 8 9-19 20 21 22

ABREV.
TD RD RTS CTS DSR SG CD

NOMBRE
No utilizado Transmit Data Receive Data Request To Send Clear To Send Data Set Ready Signal Ground Carrier Detect No utilizado Data Terminal Ready No utilizado Ring Indicator

FUNCIONAMIENTO
La computadora enva informacin al modem. La computadora recibe la informacin enviada por el modem. Esta lnea le informa al MODEM que el UART est listo para intercambiar datos. Esta lnea indica que el MODEM est listo para intercambiar datos. Esta seal le dice al UART que el MODEM est listo para establecer una conexin. Tierra Determina si el modem est conectado a una lnea telefnica en funcionamiento. Esta seal le dice al MODEM que el UART est listo para establecer una conexin. Una vez que una llamada ha tomado lugar, la computadora reconoce por esta seal (enviada por el modem) que una llamada es detectada.

DTR

RI

23-25

No utilizado

Control de Flujo
Un aspecto importante de la comunicacin serial es el concepto de control de flujo. Esta es la capacidad de sincronizacin entre transmisor y receptor con la finalidad de que el receptor no se sature. Existe el control de flujo por software y control de flujo por hardware. Imagine un MODEM que se comunica a 56Kbps con la red, y la conexin serial entre la computadora y el modem es de a 115Kbps, el cual es mas del doble de rpido que lo que el MODEM puede transmitir hacia la red. Esto significa que el modem est recibiendo ms informacin de la computadora que la que puede transmitir por la lnea telefnica. Aun si el modem tuviera un buffer grande para almacenar datos, este rpidamente se llenara y sera incapaz de funcionar correctamente con toda la informacin recibiendo de la computadora. Esta es una aplicacin clsica donde se requiere control de flujo. Imagine otra aplicacin en donde se tiene conectado un PIC32MX a una computadora con el sistema operativo Windows y se est realizando una comunicacin serial de alta velocidad (por ejemplo 20 MHz), el SO Windows es multitarea y debido a esto sus aplicaciones pueden experimentar largos retardos provocando prdidas de datos enviados por el PIC32MX. Aqu tambin necesitamos un control de flujo.

Ing. Juan Ramon Terven Salinas

156

10- Comunicacin Serial

Control de Flujo por Software


Algunas veces llamado Xon/Xoff, usa dos caracteres Xon y Xoff. El carcter Xon comnmente es el ASCII17 y el carcter ASCII 19 es el Xoff. Cuando la computadora llena el buffer del MODEM, este enva el carcter Xoff indicandole a la computadora que deje de enviar datos. Una vez que el MODEM tiene espacio para ms datos enva el carcter Xon y la computadora reanuda el envio de datos. Este tipo de control de flujo tiene la ventaja de que no requiere ms cables, ya que los caracteres Xon y Xoff son enviados por las lneas TD/RD. La desventaja de este control de flujo es que tenemos que enviar ms datos haciendo la transmisin ms lenta.

Control de Flujo por Hardware


Tambin llamado Control de flujo RTS/CTS. Usa dos cables ms en la conexin, los pines RTS y CTS. Cuando la computadora desea enviar datos activa la lnea RTS (Request to send), si el MODEM tiene espacio para los datos, contesta activando CTS (Clear to send) y la computadora comienza a enviar datos. Si el MODEM ya no tiene espacio entonces desactiva la lnea CTS.

Ing. Juan Ramon Terven Salinas

157

10- Comunicacin Serial

Conexin de MODEM nulo

La conexin de MODEM nulo se usa para conectar dos DTEs, proporciona una manera econmica de conectar dos computadoras o bien una computadora con un dispositivo Embedded, en nuestro caso un PIC32MX a la computadora.

Figura 10-4. Conexin Modem nulo

La conexin de MODEM nulo mostrada en la Figura 10-4 solo requiere de 3 cables: 1. Transmit Data (Transmisin) 2. Receive Data (Recepcin)

3. Signal Ground (Tierra)

La teora de funcionamiento es sencilla, la meta consiste en hacer que la computadora piense que est hablando con un MODEM, en lugar de con otra computadora.

Todo dato transmitido de una computadora debe ser recibido por la otra, de tal forma que TD est conectado con RD en ambas computadoras, la seal de tierra tambin debe estar unida entre ambas.

El pin Data Terminal Ready est interconectado con el pin Data Set Ready y con Carrier Detect en ambos extremos. De tal forma que cuando el pin Data Terminal Ready se active, entonces Data Set Ready y Carrier Detect se activarn inmediatamente. En este punto, la computadora piensa que el MODEM al cual est conectada est listo y ha detectado la portadora de la lnea telefnica.

Ing. Juan Ramon Terven Salinas

158

10- Comunicacin Serial Los pines que quedan son Request to Send y Clear To Send. Como ambas computadoras se comunican a la misma velocidad, el control de flujo no es necesario de tal forma que estos dos pines estn tambin interconectados.

Cuando la computadora desea enviar datos, enva la seal Request To Send y esta misma seal es atrapada en el pin Clear To Send de tal forma que siempre obtiene la respuesta del MODEM que est listo para recibir datos.

Note que el pin Ring Indicador no est conectado a nada. Esta lnea solo se usa para decirle a la computadora que hay una seal en la lnea telefnica, pero como no tenemos un MODEM conectado a la lnea telefnica, lo dejamos desconectado.

Conexin del PIC32MX con una computadora por puerto serie


La conexin de MODEM nulo la podemos usar para conectar el PIC32 con una computadora. El modulo UART del PIC32 usa el formato non-return-to-zero (NRZ) (donde un nivel TTL alto indica un 1 y un nivel TTL bajo indica un 0, vea Figura 10-5) con un bit de Start, ocho o nueve bits de datos y uno o dos bits de Stop (el modo ms comun es 8 bits, sin paridad, 1 bit de Stop denotado como 8,N,1, el cual es el modo predeterminado al Reset).

Figura 10-5. Formato tipo NRZ (tomada de [25] ).

Sin embargo todos los pines del puerto serie de la computadora usa niveles RS-232, en los cuales un voltaje de +3 a +25 indican un 0 (espacio) y de -3 a -25 volts indican un 1 (marca). Cualquier voltaje entre -3 y 3 volts es un bit indefinido. Debido a esto es necesario un Convertidor de niveles RS-232.

Ing. Juan Ramon Terven Salinas

159

10- Comunicacin Serial

Convertir de niveles RS-232


Uno de los convertidores mas comunes es el MAX3232, este convertidor convierte niveles de TTL a niveles RS-232 y viceversa. Incluye 2 receptores y 2 transmisores en el mismo encapsulado. Existen muchas variaciones de este convertidor dispositivo inclusive algunos con capacitores internos. En la Figura 10-6 se muestra el diagrama de pines de un MAX3232 y una vista interna de los componentes que lo conforman, adems de los componentes externos que debe tener.

Figura 10-6. MAX3232

Ing. Juan Ramon Terven Salinas

160

10- Comunicacin Serial Usando el MAX 232 y control de flujo por hardware, el diagrama de conexin sera como el de la Figura 10-7.

Figura 10-7. Conexion del dsPIC con la computadora

Ing. Juan Ramon Terven Salinas

161

10- Comunicacin Serial

Generador de Baudios
Regresando al mdulo UART, el generador de Baudios controla la velocidad de transmisin o recepcin de los datos. Por medio del registro UxBRG controlamos la tasa de baudios (bits por segundo). Los PIC32MX manejan 2 velocidades: Baja (bit BRGH=0) y Alta (bit BRGH=1). El bit BRGH se encuentra en el registro UxMODE. La Figura 10-8 muestra la frmula para calcular el valor de UxBRG para una determinada tasa de transferencia en baja velocidad.

Figura 10-8. Formula para calcular la tasa de baudios en baja velocidad (BRGH=0) [12]

La Figura 10-9 muestra la frmula para calcular el valor de UxBRG para una determinada tasa de transferencia para alta velocidad.

Figura 10-9. Formula para calcular la tasa de baudios en alta velocidad (BRGH=0) [12]

Ing. Juan Ramon Terven Salinas

162

10- Comunicacin Serial Por ejemplo: Se desea una tasa de transferencia de 9600 bits/seg trabajando con una FPB de 80 MHz. Baud Rate = 9600 FPB = 80 x106 Como se trata de una velocidad muy lenta, usamos las frmulas de la Figura 10-8. 1. Primero calculamos el valor de UxBRG:
UxBRG = 80 10 6 1 = 519.83 520 16 9600

2. Como no dio exacto y solamente podemos usar valores enteros, calculamos el error: Con 520 en UxBRG la tasa de transferencia es:

BaudRate =
El Error en % se define como Entonces el error es E =

80 10 6 = 9596.93 16 (520 + 1)

TasaCalculada TasaDeseada 100 TasaDeseada

9596.92 9600 100 = 0.03% 9600

El protocolo RS-232 tiene una tolerancia de 2% , por lo tanto, el valor obtenido de


520 para el UxBRG es adecuado.

Ing. Juan Ramon Terven Salinas

163

10- Comunicacin Serial

Ejemplo 1. Comunicacin Serial


Para el siguiente ejemplo se us una librera llamada uartP32.h la cual proporciona varias funciones tiles para implementar comunicacin serial. El siguiente ejemplo muestra el uso de todas las funciones de la librera uartP32. Este ejemplo est hecho para ser probado usando la Hyperminal.

Programa 10-1. Ejemplo de transmisin serial


/***************************************************************** * DEMOSTRACIN DE COMUNICACIN SERIAL USANDO UART * REALIZA UNA COMUNICACIN SERIAL A 9600 BPS *****************************************************************/ #include <p32xxxx.h> #include "../librerias/retardos/retardos.h" #include "../librerias/uart/uartP32.h" //Bits de configuracion #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20 #pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1 #pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON #pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON #pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD int main(void) { char cadena[] = "Probando la comunicacion serie"; unsigned char contador, datoLeido; AD1PCFG = 0xFFFF; // configura pines como digitales

//Inicia UART2 con FPB de 80MHz y una tasa de transferencia de 9600bps openUART(UART2, 80000000, 9600); //Espera un breve retardo retardoms(10); //Limpia consola de Hyperterminal clearConsoleUART(); //Envia variable cadena putsUART(cadena); //Inicia contador en el primer caracter visible (ASCII 32 = espacio en blanco) contador = 32; while(1) { putcUART(contador); datoLeido = getUART();

//Envia dato de 8 bits //Lee dato del UART

//Si el dato fue una 'A', limpia hyperterminal e imprime "Hola" if(datoLeido == 'A') { clearConsoleUART(); putsUART("Hola"); } //pero si el dato leido es 'B' regresa el cursor al inicio del hyperterminal else if(datoLeido == 'B') { returnHomeUART(); } contador++; retardoms(100); } } //incrementa contador que envia por puerto serie

Ing. Juan Ramon Terven Salinas

164

10- Comunicacin Serial

HyperTerminal
El sistema operativo Windows incluye un programa llamado HyperTerminal el cual permite comunicarnos por puerto serie. Este programa se encuentra en Inicio> Todos los programas> Accesorios> Comunicaciones> HyperTerminal.

Pasos para configurar la HyperTerminal 1. Abra el programa HyperTerminal 2. Escriba nombre a la Nueva Conexin. 3. Seleccione el puerto COMx que est usando. 4. Seleccine las propiedades de la comunicacin. En este caso 9600 baudios, 8 bits, sin paridad, 1 bit de parada y control de flujo ninguno como se muestra en la Figura 10-10.

Figura 10-10. Propiedades de la comunicacin

5. Encienda su circuito con el Ejemplo1 grabado y listo!. La siguiente figura muestra el ejemplo 1 en Hyperterminal.

Ing. Juan Ramon Terven Salinas

165

10- Comunicacin Serial

Figura 10-11. HyperTerminal funcionando con el ejemplo 1

Ing. Juan Ramon Terven Salinas

166

You might also like