16. Comunicación Serial

16. Comunicación Serial
4.4 (88.75%) 16 votes

Uno de los protocolos de comunicación que podemos emplear con nuestros dispositivos electrónicos embebidos, es la utilización de la comunicación serial para poder interactuar con diferentes dispositivos.

 

 

La comunicación serial sólo utiliza tres líneas, una para recibir los datos Rx, otra para trasmitir los datos Tx y la línea común GND. En nuestro caso especifico para el PIC 16F887 las lineas TX y RX corresponden a los pines 25 y 26 (Puerto RC6 y RC7 respectivamente) como puede ser observado en la siguiente figura. Para cualquier otro PIC, solo basta con buscar donde están ubicados estos pines con ayuda del datasheet.

Comunicacion Serial con PIC

NOTA: El pic 16F887 solo tiene un puerto UART fisico, es por eso que solo tiene 1 solo RX y un solo TX para realizar la comunicación serial. Existen otros PICS que poseen más de 1 UART facilitando realizar varias comunicaciones con el dispositivo al tiempo. Si necesitamos adicionar mas puertos de comunicación serial, podremos hacerlo con ayuda del PIC C Compiler creando UARTS VIRTUALES, esto sera detallado abajo en el post en el TERCER EJEMPLO, para verlo debes compartir el post.

Cada dato se transmite bit a bit, un bit a la vez, por lo tanto se hace mucho más lenta, pero tiene la ventaja de necesitar menos líneas y las distancias a las cuales se puede transferir la información son mayores, además con el uso de los módem se puede trasmitir a cualquier parte del mundo.

Comuicacion serial

Existen dos formas de comunicación serial:

  • Sincrónica􀂃
  • Asincrónica

Comunicación Sincrónica

En esta comunicación además de una línea sobre la que se transfieren los datos, se necesita otra que contenga pulsos de reloj que indiquen que el dato es válido; la duración del bit está determinada por la duración del pulso de  sincronismo.

Comunicación Asincrónica

En esta comunicación los pulsos de reloj no son necesarios y se utilizan otros mecanismos para realizar la transferencia de datos. La duración de cada bit esta determinada por la velocidad con la cual se realiza la trasferencia de datos, por ejemplo si se transmite a 1200 bits por segundo (baudios), la duración de cada bit es de 833 microsegundos. Las velocidades de transmisión más comunes son 300, 600,1200, 2400, 9600, 14400 y 28800 baudios.

 

En esta entrada solo se estudia la comunicación asincrónica.

señal asincrona

En la figura se muestra la forma como se trasmite un dato cuando se realiza alguna transferencia, la línea del transmisor permanece en alto. Para empezar a transmitir datos esta línea se pone en bajo durante un bit, lo cual se conoce como bit de Start, y luego comienza a transmitir los bits correspondientes al dato, empezando por el bit menos significativo (LSB) y terminando con el más significativo (MSB). Al finalizar se agrega el bit de paridad, si está activada esta opción, y por último los bits de stop, que pueden ser 1 o 2, en los cuales la línea regresa a nivel alto. En el ejemplo de la figura, después del bit de start se trasmite el dato 01001011 y al final hay un bit de stop.

 

Esto significa que la configuración de la transmisión serial es: 1 bit start, 8 bits datos, no paridad y 1 bit de stop.

 

El receptor no está sincronizado con el transistor y no sabe cuando va a recibir datos. La transición de alto a bajo de la línea del transmisor, activa el receptor y este generan un conteo de tiempo de tal manera que realiza una lectura de la línea medio bit después del evento; si la lectura realizada es un estado alto, asume que la transición ocurrida fue ocasionada por ruido en la línea; si por el contrario la lectura es un estado bajo, considera como válida la transición y
empieza a realizar lecturas secuenciales a intervalos de un bit hasta conformar el dato transmitido. Lógicamente tanto el transmisor como el receptor deberán tener los mismos parámetros de configuración (velocidad, número bits del dato, paridad y bits de parada).

Pasos para trabajar con comunicación serial con el microcontrolador:

1. En el encabezado del programa incluir la directiva:

Baud: Velocidad en baudios (bits por segundo).
Xmit: Bit que transmite (Tx)
RCV: Bit que recibe (Rx)
2. En el programa principal enviar o recibir un carácter.
Para recibir un carácter se usa la instrucción.

Hacen lo mismo las instrucciones GETCH() y GETCHAR()

Para enviar un carácter se usa la instrucción

Hace lo mismo la instrucción PUTCHAR()
NOTA: Entre los paréntesis va el caracter a enviar.

Si deseamos comunicar nuestro microcontrolador con el computador, tenemos que conectar nuestro PIC al puerto serial que traen principalmente los ordenadores de escritorio:

puerto serial

Y para lograr dicha comunicación con nuestro computador, es necesario utilizar un circuito integrado adicional llamado MAX232. El MAX232 es un circuito integrado de Maxim que convierte las señales de un puerto serie RS-232 a señales compatibles con los niveles TTL de circuitos lógicos. El MAX232 sirve como interfaz de transmisión y recepción para las señales RX, TX, CTS y RTS.

DB9

El siguiente esquema es para conectar nuestro pic al computador con ayuda del integrado MAX232 con un cable DB9.

PIC con MAX232

El problema principal que tenemos con este tipo de comunicación, es que el puerto serial de los computadores ya fue abolido hace mucho tiempo, y por eso en computadores actuales, no vamos a encontrar este tipo de puerto. Para dar solución a este problema, podemos usar un conversor SERIAL-USB el cual podemos comprar en cualquier tienda informatica:

conversor serial usb

O podemos utilizar un circuito integrado, que generalmente se encuentran en estos conversores SERIAL-USB, llamado FT232, este integrado generalmente viene en una placa electronica ya lista para ser usada, y lo unico que debemos hacer es energizarla y conectar los terminales RX y TX de nuestro microcontrolador a esta placa.

ft232ft232

 

 

 

 

 

 

 

Software de Simulación

Para poder simular la comunicación serial con nuestro microcontrolador, y poder hacer una practica mucho más parecida con la realidad, vamos a utilizar 3 softwares diferentes:

  1. Proteus: Como hemos venido trabajando, seguiremos usando el proteus como software principal de simulación.
  2. Virtual Serial Port: Este software crea un puerto serial virtual, en nuestro computador. Es decir, le hace creer a nuestro computador que tiene un puerto DB9 (serial) fisico. Para descargar el software, pueden hacerlo a traves de la pagina oficial de Eltima dando click aqui.
  3. Hercules: Es un software que permite mostrar en el computador los datos que están siendo enviados por el puerto serial. Es una interfaz grafica de usuario que permite visualizar los datos que nuestro PIC está enviando para nosotros. Puedes descargarlo en su pagina oficial dando click aqui.

En los siguientes ejemplos, veremos como podremos utilizar estos softwares, para ello preparé algunos videos en mi canal de Youtube para enseñarte paso a paso la utilización de cada software y ademas la explicación del puerto serial junto con cada código de programación. No olvides suscribirte a mi canal, para que recibas todas mis actualizaciones.

 

EJEMPLO 1

En nuestro primer ejemplo, vamos a conectar un LM35 (Sensor de temperatura) al puerto analogo digital del PIC16F887 y vamos a mostrar dicha temperatura en el computador utilizando la comunicación serial y el puerto DB9 del computador. El diagrama del circuito está a continuación:

Ejemplo Serial 1

 

Codigo de Implementación:

A continuación se presenta el código para que lo copies y lo pegues en tu compilador y puedas reproducirlo. Recuerda que para ver el código debes compartir o darle me gusta al contenido de este post para que más personas se beneficien de esta información.

EJEMPLO 2

Realizar una comunicación serial sencilla entre dos microcontroladores, y mostrar en un LCD lo que cada uno esta transmitiendo y/o recibiendo. El microcontrolador que recibe el dato, debe hacerlo por medio de una interrupcion por recepción serial, utilizando la siguiente sentencia:

Define las interrupciones globales y interrupcion serial asi:

Y antes del MAIN colocar la interrupción serial:

El esquema del ejemplo es el siguiente:
Comunicacion serial con 2 PIC

El código del Primer microcontrolador:

Código del Segundo Microcontrolador:

Ejemplo 3

En este último ejemplo vamos a ver como podremos ampliar los puertos de comunicación serial programando UARTS VIRTUALES. Para eso basta simplemente seleccionar otros dos pines CUALQUIERAS donde queremos realizar una comunicación serial, uno de estos pines lo configuraremos como el PIN RX y el otro como el PIN TX. Para efectuar esta configuración declaramos en el encabezado del programa lo siguiente:

 

Mirando detalladamente esta directiva, nos vamos a dar cuenta que estamos configurando en este caso 2 UARTS, La primera linea está configurando el UART fisico del PIC, que ya sabemos que correspone al RC6 y RC7 para el caso del PIC16f887. La segunda linea está configurando un UART por software, en este caso yo seleccione que el PIN D0 fuera el de transmisión (TX) y el PIN D1 fuera el de Recepción (RX).

Note además que ahora cada UART está identificado con un NOMBRE, este NOMBRE puede ser cualquiera. Para el caso de la primera linea yo lo llame como PIC (“stream=PIC”) y la segunda linea lo llame como PC (“stream=PC”). Asi, si por ejemplo yo quisiera leer un dato del UART que se llama PIC tendria que leerlo asi:

Por otro lado, si yo quisiera escribir por ejemplo en el UART que se llama PC, tendria que hacerlo asi:

 

El siguiente ejemplo es similar al Ejemplo 2. Acá vamos a conectar dos PIC por el puerto UART FISICO, pero en el PIC 1 vamos a crear un UART por Software. Entonces el PIC 1 va a recibir caracteres por medio de un computador a través del UART virtual (9600 baudios) y los va a mandar al segundo PIC por el UART fisico (57600 baudios). El segundo PIC debe recibir los datos que el PIC 1 le está mandando y mostrarlos en una pantalla LCD.

>> DESCARGAR CODIGO Y ESQUEMA DEL EJEMPLO 3 <<

uart virtual

Codigo del Primer PIC:

Codigo del Segundo PIC:

Comparte en Redes Sociales

 

Si te sirvió de algo la información de la pagina, podrías invitarme a un café y ayudarme a seguir manteniendo en pie el sitio WEB. Solo cuesta $2USD y me ayudarías enormemente a seguir con mi trabajo. Muchas Gracias por tu visita.




Esta entrada tiene 7 comentarios

  1. no puedo ver los códigos todos me salen error 400 de google

    1. Hola Enrique, el botón de facebook está funcionando perfecto!! Los de google los he solucionado. Saludos.

  2. Que tal, me ha servido de mucho tus aportes y he podido simular todos tus ejemplos ahora intento realizar la comunicación del microcontrolador a mi PC utilizando un cable SERIAL-USB sin embargo tengo problemas en el mensaje o caracteres que leo en el COM ya que obtengo caracteres raros, las conexiones que tengo son de los pines del microcontrolador RX, TX y GROUND estos tres directamente a los pines DB9 del cable serial y el usb a mi PC, no se si esta falla proviene de la falta de un max232 a la entrada del DB9 o alguna otra cosa que no este convirtiendo o enviando bien los datos, espero me ayuden, gracias

    1. Utiliza el MAX232 o utiliza el FT232, muy probablemente esa sea la causa de tu problema. Pues debe haber incompatibilidad de voltajes.

  3. Hola estoy intentando hacer una comunicacion serial pic a pic pero entre microcontroladores 18f4550 y es un gran problema debido a que la frecuencia de operacion del USB interfiere con la comunicacion, podrias hacer un tutorial o decirme donde puedo encontrar esta informacion… Gracias saludos!!!

  4. Hola, muy buena entrada. Me sirvió de mucho.
    Consulta: como puedo configurar los bit de star y stop en mi PIC?

    Saludos!

    1. Hola Gerson, utilizando el PIC C Compiler, no es necesario configurar el bit start, pues el compilador ya hace eso internamente por nosotros. El bit de stop lo configuras en el encabezado

      #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, stop=1)

Deja un comentario

Menú de cierre