Una rasgo de gran importancia que poseen los microcontroladores PIC es la capacidad de comunicarse con el computador a través de un módulo incorporado que tiene las características apropiadas para el intercambio de información. Este módulo se llama USART (Universal Synchronous Asynchronous Receiver Transmitter) y opera de acuerdo al estándar RS232 que también es muy utilizado en las computadoras personales u ordenadores, así como en otros dispositivos. Como interfaz entre los niveles TTL del PIC y RS232 del computador se suele utilizar el circuito integrado MAX232.
¡Descubre el mundo de los microcontroladores PIC y lleva tus habilidades de programación al siguiente nivel! Obtén nuestro eBook y disfruta aprendiendo paso a paso desde cero, podrás realizar proyectos prácticos, encontrar soluciones a problemas comunes y explorar una amplia cobertura de temas desde lo más básico a lo más avanzado. Incluye software y ejemplos resueltos. ¡Cómpralo ahora y libera el increíble potencial de esta poderosa tecnología hoy mismo!
Este módulo puede configurarse para operación asincrónica (full -dúplex) y para su empleo en este modo se puede utilizar la librería UART del compilador mikroC PRO. Este es uno de los dos módulos serie E/S, también llamado Interfaz de Comunicación Serie SCI. El módulo USART de los microcontroladores PIC puede configurarse como un sistema asincrónico full-dúplex que puede comunicarse con dispositivos periféricos, tales como terminales CRT y computadoras personales, o puede configurarse como un sistema sincrónico half-dúplex que puede comunicarse con otros dispositivos tales como conversores A/D y D/A, EEPROMs serie, etc. Los modos de operación disponibles son los siguientes:
- Asincrónico (full-dúplex)
- Sincrónico-Maestro (half-dúplex)
- Sincrónico-Esclavo (half-dúplex)
Protocolo RS232
Este es un protocolo de comunicación serie ampliamente difundido en las computadoras personales y empleado por los puertos COM del computador. El acceso físico a estos puertos es a través de un conector DB-25 o DB9, machos y hembras. La norma RS232 se estableció para comunicar un computador con un modem, por lo que en los conectores DB-25 aparecen muchos pines que en otras aplicaciones no se utilizan, y en las que es más común emplear el conector DB9. Cada uno de los terminales del conector RS232 tiene una función especificada por la norma. Unos pines transmiten y reciben datos, mientras que otros permiten el control de la comunicación. En la tabla se observan estos detalles.
Un dato a tener muy en cuenta es la velocidad de transmisión, que es la cantidad de información enviada por la línea de transmisión en la unidad de tiempo. Se mide en Baudios y es proporcional a los Bits/segundo (bps). Las velocidades de transmisión normalizadas para los puertos COM son: 75, 150, 300, 600, 1200, 2400, 4800, 9600, etc. Baudios. Otra cuestión fundamental se refiere a los niveles de voltaje de la norma:
- Los datos se transmiten con lógica negativa, es decir, un voltaje positivo representa 0, mientras que un voltaje negativo representa 1.
- El 0L se encuentra entre +3 y +15V.
- El 1L se encuentra entre -3 y -15V.
- Los voltajes más usados son +12V para el 0L y -12V para el 1L.
- Cuando un puerto no está transmitiendo mantiene el terminal de transmisión en 1L (-12V).
Circuito Integrado MAX232
El MAX232 es un estándar en la industria y se emplea como interfaz entre los niveles TTL y RS232 y requiere únicamente una fuente de +5V para su operación. Para generar los niveles de +12V y -12V necesita 4 capacitores de 1,0 uF. Dispone de dos entradas TTL con salida RS232, así como dos entradas RS232 con salida TTL. El MAX232 puede realizar la transferencia de datos a una velocidad máxima de 120 kbps.
Librería UART de mikroC PRO para el módulo USART
El módulo USART se incluye en los microcontroladores PIC16F88, 16F628A y 16F877A (algunos microcontroladores PIC, como el 16F84A, no tienen este módulo). La biblioteca UART de mikroC PRO proporciona las herramientas para hacer que el empleo de este módulo en modo asincrónico (full-dúplex) sea tan sencillo como nunca lo había sido hasta ahora. Esto permite la comunicación con otros dispositivos a través del protocolo RS232. En la tabla se pueden ver las funciones incorporadas con sus características más sobresalientes.
Ejemplo en mikroC PRO con el PIC16F88
Ejemplo-USART_01.c: Lo que escriba por el teclado del computador se visualizará en el módulo LCD y será enviado de vuelta al computador, por lo que se visualizará también en el monitor. Cuando se hayan ingresado 16 caracteres el LCD se borrará y empezará nuevamente en la primera fila y primera columna.
//USART_01.c //Declaración de las 12 variables necesarias para la conexión //del módulo LCD. sbit LCD_RS at RA4_bit; sbit LCD_EN at RA6_bit; sbit LCD_D4 at RA0_bit; sbit LCD_D5 at RA1_bit; sbit LCD_D6 at RA2_bit; sbit LCD_D7 at RA3_bit; sbit LCD_RS_Direction at TRISA4_bit; sbit LCD_EN_Direction at TRISA6_bit; sbit LCD_D4_Direction at TRISA0_bit; sbit LCD_D5_Direction at TRISA1_bit; sbit LCD_D6_Direction at TRISA2_bit; sbit LCD_D7_Direction at TRISA3_bit; // Fin de declaración de variables de conexión. char uart_rd, contador=0; void main(){ OSCCON=0x60; //Oscilador interno a 4MHz (TCI=1 us). while (OSCCON.IOFS==0); //Esperar mientras el oscilador está inestable. ANSEL=0x00; //Bits AN6:AN0 como E/S digital. Lcd_Init(); //Inicializa el LCD. Lcd_Cmd(_LCD_CLEAR); //Borra el display. Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el cursor. UART1_Init(9600); //Inicializa el USART a 9600 bps. Delay_ms(100); //Espera a que el USART se estabilice. UART1_Write_Text("Hola."); //Envía este texto a través del USART. while (1){ if (UART1_Data_Ready()){ //Si se recibe un dato, uart_rd = UART1_Read(); //lee el dato recibido, Lcd_Chr_CP(uart_rd); //lo presenta en el LCD, UART1_Write(uart_rd); //y lo envía a través del USART. contador++; if(contador==16){ //Detecta el ingreso de 16 caracteres, contador=0; //reinicia el contador, Delay_1sec(); //espera 1 segundo, Lcd_Cmd(_LCD_CLEAR); //y borra el LCD. } } } }