10 COMUNICACIÓN SERIAL

Anuncio
10- Comunicación Serial
10 COMUNICACIÓN SERIAL
Una característica 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 módulos de comunicación serial diseñados para
permitir la comunicación del microcontrolador con otros componentes o dispositivos
esternos.
El PIC32MX534F064H posee:
•
6 módulos para comunicación serial asíncrona UART (Universal Asynchronous
Receiver and Transmitter).
•
3 módulos para comunicación serial síncrona SPI (Serial Peripheral Interface).
•
4 módulos para comunicación serial síncrona I2C (Inter-Integrated Circuit).
•
1 módulo para comunicación CAN (Controller Area Network).
•
1 módulo para comunicación USB OTG (Universal Serial bus On-the-go).
La diferencia principal entre una interface síncrona (como SPI o I2C) y una asícrona
(como UART, CAN o USB) es la forma en la que la información de sincronización es
pasada del transmisor al receptor.
Los periféricos síncronos necesitan una línea física (un cable) dedicada a la señal de
reloj, proporcionando la sincronización entre los dos dispositivos.
Los periférico asíncronos no usan una señal de reloj, la información de
sincronización es extraida de los mismos datos. Se agregan bit de inicio y de parada,
además de un formato preciso a una tasa de transferencia fija.
Ing. Juan Ramon Terven Salinas
152
10- Comunicación Serial
UART
El módulo UART de la siglas en Ingles Universal Asynchronous Receiver
Transmitter permite comunicación serial asíncrona full-duplex con otros dispositivos, o
componentes tales como computadoras, convertidores, módulos inalámbricos, etc.
Las caracteristicas principales del módulo UART son:
•
•
•
•
•
•
•
•
•
•
Transmisión Full-duplex de 8- o 9-bits a través 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).
Detección automática 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.
Detección de errors de paridad y desbordamiento de buffer.
Soporte para modo de 9 bits con detección de dirección (bit 9 en 1).
Interrupciones de transmission y recepción.
Modo de circuito cerrado (Loopback) para diagnóstico y depuración.
La Figura 10-1 muestra el diagrama simplificado del UART, el cual consiste de los
siguientes elementos principales:
•
•
•
Generador de Baudios
Transmisor Asíncrono
Receptor Asíncrono
Figura 10-1. Diagrama de bloques simplificado (tomado de[12] ).
Ing. Juan Ramon Terven Salinas
153
10- Comunicación Serial
Protocolo serial RS-232
Un uso común que se le da al módulo 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 más de 20 años. 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 instrumentación y en módulos
embebidos, debido a su sencillez en comparación 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 día suportan los puertos serie, porque
estos puertos se han usado por décadas.
El término "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 más para transmitir el
dato que si tuviéramos 8 cables.
En el protocolo RS-232, antes de cada byte de información, se envia un bit de
Start, el cual es un bit con valor de 0, después se envía el octeto y finalmente se
envía un bit de Stop para indicar que el byte ha sido completado como se muestra en la
Figura 10-2. Algunas veces también se manda un bit de paridad para verificación de
errores.
Figura 10-2. Serialización de un byte
Ing. Juan Ramon Terven Salinas
154
10- Comunicación 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 asignación de los pines refleja esta conexión como se muestra en la Tabla 10-1 y
Tabla 10-2.
Comúnmente 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
ABREV.
NOMBRE
1
CD
Carrier Detect
2
RD
Receive Data
3
4
TD
DTR
5
6
SG
DSR
Transmit Data
Data Terminal
Ready
Signal Ground
Data Set Ready
7
RTS
Request To Send
8
CTS
Clear To Send
9
RI
Ring Indicator
Ing. Juan Ramon Terven Salinas
FUNCIONAMIENTO
Determina si el modem está conectado a una línea
telefónica en funcionamiento.
La computadora recibe la información enviada por el
modem.
La computadora envía información al modem.
Esta señal le dice al MODEM que el UART está listo para
establecer una conexión.
Tierra
Esta señal le dice al UART que el MODEM está listo para
establecer una conexión.
Esta línea le informa al MODEM que el UART está listo
para intercambiar datos.
Esta línea indica que el MODEM está listo para
intercambiar datos.
Una vez que una llamada ha tomado lugar, la computadora
reconoce por esta señal (enviada por el modem) que una
llamada es detectada.
155
10- Comunicación Serial
Tabla 10-2. Conector de 25 pines
PIN
ABREV.
NOMBRE
1
2
3
TD
RD
No utilizado
Transmit Data
Receive Data
4
RTS
Request To Send
5
CTS
Clear To Send
6
DSR
Data Set Ready
7
8
SG
CD
Signal Ground
Carrier Detect
9-19
20
21
22
DTR
RI
23-25
No utilizado
Data Terminal
Ready
No utilizado
Ring Indicator
FUNCIONAMIENTO
La computadora envía información al modem.
La computadora recibe la información enviada por el
modem.
Esta línea le informa al MODEM que el UART está listo
para intercambiar datos.
Esta línea indica que el MODEM está listo para
intercambiar datos.
Esta señal le dice al UART que el MODEM está listo para
establecer una conexión.
Tierra
Determina si el modem está conectado a una línea
telefónica en funcionamiento.
Esta señal le dice al MODEM que el UART está listo para
establecer una conexión.
Una vez que una llamada ha tomado lugar, la
computadora reconoce por esta señal (enviada por el
modem) que una llamada es detectada.
No utilizado
Control de Flujo
Un aspecto importante de la comunicación serial es el concepto de control de flujo.
Esta es la capacidad de sincronización 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 conexión serial
entre la computadora y el modem es de a 115Kbps, el cual es mas del doble de rápido
que lo que el MODEM puede transmitir hacia la red. Esto significa que el modem está
recibiendo más información de la computadora que la que puede transmitir por la línea
telefónica. Aun si el modem tuviera un buffer grande para almacenar datos, este
rápidamente se llenaría y sería incapaz de funcionar correctamente con toda la
información recibiendo de la computadora. Esta es una aplicación clásica donde se
requiere control de flujo. Imagine otra aplicación en donde se tiene conectado un
PIC32MX a una computadora con el sistema operativo Windows® y se está realizando
una comunicación serial de alta velocidad (por ejemplo 20 MHz), el SO Windows es
multitarea y debido a esto sus aplicaciones pueden experimentar largos retardos
provocando pérdidas de datos enviados por el PIC32MX. Aquí también necesitamos un
control de flujo.
Ing. Juan Ramon Terven Salinas
156
10- Comunicación Serial
Control de Flujo por Software
Algunas veces llamado Xon/Xoff, usa dos caracteres Xon y Xoff. El carácter Xon
comúnmente es el ASCII17 y el carácter ASCII 19 es el Xoff.
Cuando la computadora llena el buffer del MODEM, este envía el carácter Xoff
indicandole a la computadora que deje de enviar datos. Una vez que el MODEM tiene
espacio para más datos envía el carácter Xon y la computadora reanuda el envio de
datos.
Este tipo de control de flujo tiene la ventaja de que no requiere más cables, ya que
los caracteres Xon y Xoff son enviados por las líneas TD/RD. La desventaja de este
control de flujo es que tenemos que enviar más datos haciendo la transmisión más lenta.
Control de Flujo por Hardware
También llamado Control de flujo RTS/CTS. Usa dos cables más en la conexión, los
pines RTS y CTS. Cuando la computadora desea enviar datos activa la línea 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 línea CTS.
Ing. Juan Ramon Terven Salinas
157
10- Comunicación Serial
Conexión de MODEM nulo
La conexión de MODEM nulo se usa para conectar dos DTEs, proporciona una
manera económica de conectar dos computadoras o bien una computadora con un
dispositivo Embedded, en nuestro caso un PIC32MX a la computadora.
Figura 10-4. Conexión Modem nulo
La conexión de MODEM nulo mostrada en la Figura 10-4 solo requiere de 3 cables:
1. Transmit Data (Transmisión)
2. Receive Data
(Recepción)
3. Signal Ground (Tierra)
La teoría 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 señal de tierra también 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 activarán
inmediatamente.
En este punto, la computadora “piensa” que el “MODEM” al cual está conectada
está listo y ha detectado la portadora de la línea telefónica.
Ing. Juan Ramon Terven Salinas
158
10- Comunicación 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 están también interconectados.
Cuando la computadora desea enviar datos, envía la señal Request To Send y esta
misma señal 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 línea solo se usa para
decirle a la computadora que hay una señal en la línea telefónica, pero como no tenemos
un MODEM conectado a la línea telefónica, lo dejamos desconectado.
Conexión del PIC32MX con una computadora por puerto serie
La conexión 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 más 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- Comunicación 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,
además de los componentes externos que debe tener.
Figura 10-6. MAX3232
Ing. Juan Ramon Terven Salinas
160
10- Comunicación Serial
Usando el MAX 232 y control de flujo por hardware, el diagrama de conexión sería
como el de la Figura 10-7.
Figura 10-7. Conexion del dsPIC con la computadora
Ing. Juan Ramon Terven Salinas
161
10- Comunicación Serial
Generador de Baudios
Regresando al módulo UART, el generador de Baudios controla la velocidad de
transmisión o recepción 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 fórmula 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 fórmula 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- Comunicación 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 fórmulas 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- Comunicación Serial
Ejemplo 1. Comunicación Serial
Para el siguiente ejemplo se usó una librería llamada uartP32.h la cual
proporciona varias funciones útiles para implementar comunicación serial. El siguiente
ejemplo muestra el uso de todas las funciones de la librería uartP32.
Este ejemplo está hecho para ser probado usando la Hyperminal.
Programa 10-1. Ejemplo de transmisión serial
/*****************************************************************
*
DEMOSTRACIÓN DE COMUNICACIÓN SERIAL USANDO UART
*
REALIZA UNA COMUNICACIÓN 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- Comunicación 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 Conexión”.
3. Seleccione el puerto COMx que está usando.
4. Seleccióne las propiedades de la comunicación. 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 comunicación
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- Comunicación Serial
Figura 10-11. HyperTerminal funcionando con el ejemplo 1
Ing. Juan Ramon Terven Salinas
166
Descargar