Comunicación serial UART, USART, RS232 con el PIC18F4550

publicado en: Teoria pic18f4550 | 2

comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-1

DESCRIPCIÓN

La comunicación UART puede transmitir o recibir datos bit a bit, es por eso que recibe el nombre de comunicación serial, entre dos microcontroladores o también hacia un computador. La conexión a la PC es bajo el estándar de comunicación RS232, En esta sección se explicaran a detalle todos los registros involucrados con este tipo de comunicación y se realizaran ejemplos prácticos. A continuación se describen las características de este módulo UART.

  • Operación Síncrona y Asíncrona.
  • Operación Full Dúplex en modo Asíncrono.
  • Operación Half Dúplex en operación Síncrona Maestro-Esclavo.
  • Operación de 8 o 9 bits.
  • Generador de Baud-Rate de Alta y Baja
  • Calibración Automática de Velocidad de Baudios.
  • Detección Automática de Recepción de datos.
  • Detección de errores de OverRun y Frame (datos sobrescritos y dato invalido respectivamente).
  • 2 Interrupciones independientes; TX completado, RX completado.

En las siguientes imágenes se detallaran los registros involucrados al UART

comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-2 comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-3 comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-4 comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-5

CONFIGURAR BAUD-RATE

Para una correcta Transmisión/Recepción y sin pérdida de datos, es necesario configurar correctamente el Baud-Rate a través de los registros SPBRGH y SPBRG. En la siguiente tabla se muestra las ecuaciones para los modos Síncronos y Asíncronos.

comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-6

 

Vamos a realizar un ejemplo para despejar un poco nuestras dudas. Si tenemos una Fosc=48Mhz y queremos unos Baudios de 9600 bps. Calcularemos el valor que debemos escribir en el registro SPBRG en modo 8 bits y baja Velocidad; BRG=0 y BRG16=0,  con la fórmula vista anteriormente.

comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-7

 

Como podemos apreciar el resultado no es exacto, esto nos lleva a calcular el error con la siguiente ecuación.

comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-8

A continuación se explicarán los PASOS para la Transmisión/Recepción de datos a través de la USART

  1. Configurar las líneas pin RX y pin TX como entrada y salida respectivamente, a través del registro TRISC.
  2. Configurar el modo Síncrono o Asíncrono.
  3. Configurar el Baud-Rate del USART a través del registro UBRRH y
  4. Configurar Tamaño de byte 8/9 bits.
  5. Habilitar la Transmisión y Recepción a través de los bits TXEN y RCEN respectivamente.
  6. Habilitar la Interrupción de Transmisión/Recepción a través de los bits TXIE y RCIE respectivamente (opcional).

PROCESO DE TRANSMISIÓN DE DATOS

Para enviar un dato no basta con escribir el valor que se desea enviar en el registro TXREG. Sin embargo, si se quiere enviar varios datos consecutivos debe tenerse cuidado de NO escribir un nuevo valor en TXREG antes de que el valor anterior haya sido enviado. Para ello es necesario saber si el registro TXREG ha quedado libre o está vacío. Esto puede hacerse de 2 formas.

  1. Por Sondeo: En este caso el programa debe monitorizar el estado del bit TXIF. Si este bit está a “1” significa que TXREG está vacío y por tanto podemos escribir el siguiente dato.
  2. Por Interrupción: En este caso se habilita la Interrupción a través del bit TXIE, entonces se producirá una interrupción cada vez que el registro TXREG esté vacío. Por tanto esto nos permite detectar cuando TXREG está libre para enviar un nuevo dato, sin embargo si habilitamos dicha Interrupción cuando NO estamos Transmitiendo datos se generarán Interrupciones continuas mientras TXREG este vacío. Por tanto solo se debe habilitar esta Interrupción después de haber escrito un nuevo dato en el registro TXREG y se deshabilitará cuando se ha escrito el ultimo

PROCESO DE RECPCIÓN DE DATOS

Para recibir un dato no basta con leer el valor  en el registro RCREG, es necesario esperar a que la recepción del dato se haya completado correctamente para poder realizar el proceso de lectura del registro. Esto puede hacerse de 2 formas.

  1. Por Sondeo: En este caso el programa debe monitorizar el estado del bit RCIF. Si este bit está a “1” significa que el dato recibido podrá ser leído del registro RCREG.
  2. Por Interrupción: En este caso se habilita la Interrupción a través del bit RCIE, entonces se producirá una interrupción cada vez que el registro RCREG posea un nuevo Por tanto esto nos permite detectar cuando RCREG está listo para ser leído.

EJEMPLO N°1 – COMUNICACIÓN UART PIC18F4550 CON COMPUTADOR

En este ejemplo enviaran datos del controlador pic18f4550 hacia el computador a través del protocolo de comunicación RS232, utilizaremos como interfaz el driver MAX232 (datasheet). Primero, utilizaremos el pic18f4550 solo como transmisor y pode ende solo configuramos el pin RC6 como salida de datos serial. Luego, los baudios sera igual a 9600 que es apropiado trabajo con el oscilador interno Fosc = 8mhz. Por ultimo, los datos a enviar serán una secuencia de caracteres igual a 0123456789... A continuación se muestra  el circuito de conexión y se describe el código.

comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-9

Código principal MAIN

EJEMPLO N°2 – ENVIAR DATOS DEL SENSOR TEMPERATURA LM35 HACIA UN COMPUTADOR

En este siguiente ejemplo se enviarán los datos leídos del sensor de temperatura LM35, que estará conectado al pin RA0 hacia un computador, se utilizara el protocolo de comunicación RS232 y la misma configuración del ejemplo anterior. La secuencia de datos a enviar sera igual a la siguiente «temp = xxx grados», como se puede apreciar primero se enviarán una serie de caracteres y luego el valor de temperatura. A continuación se muestra el circuito de conexión y se describe el código.

comunicacion-serial-uart-usart-rs232-con-el-pic18f4550-10

Código principal MAIN

Código FUSES

2 Respuestas

  1. EmerXd

    Una pergunta, este metodo de comunicación se puede utilizar con los pines C4 y C5? ya que no hay manera de hacer que estos pines se utilicen como salida, hablando del PIC18F4550, o si conoce algun otro metodo para usarlos como salidas. Saludos.

Deja un comentario