Вы находитесь на странице: 1из 12

La EUSART en el C18

(Enhanced Universal Synchronous Receiver Transmitter)


Si revisamos el documento MPLAB_C18_Librerias.pdf y vamos al
capitulo 2.10 USART Functions, observaremos que el C18 ya tiene
una librera dedicada al manejo de este puerto, adems permite
implementar por software ms puertos UARTs sin embargo esto
ocupar mas memoria de programa.
En la siguiente imagen se muestra todas las rutinas del EUSART.

BusyUSART: Detecta si el mdulo EUSART est transmitiendo o


est ocupado. Retorna un valor 0 si el buffer de transmisin
est libre o disponible, y retorna un valor 1 si est ocupado
el buffer de transmisin.
CloseUSART: Deshabilita el mdulo EUSART.
DataRdyUSART: Detecta si hay informacin lista para efectuar
una lectura del buffer de recepcin. Retorna el valor del bit
RCIF del registro PIR, es 1 cuando el buffer est con la
informacin disponible, y 0 cuando no hay informacin para
leer.
getsUSART: Lee una cadena de caracteres y las guarda en una
cadena previamente definida en la memoria de datos. Posee 2
argumentos o valores de entrada, BUFFER cadena previamente
definida en la memoria de datos donde se guardar la
informacin y LEN es la cantidad de caracteres a leer.
OpenUSART: Configura y habilita el mdulo EUSART. Tiene los
siguientes argumentos o valores de entrada.
En la aplicacin ejemplo que veremos se utiliza la siguiente
configuracin del puerto.
OpenUSART (USART_TX_INT_OFF & // TX sin interrupcin
USART_RX_INT_ON & // RX con interrupcines

1
USART_ASYNCH_MODE & // Modo asincrnico
USART_EIGHT_BIT & // Modo alta velocidad
USART_CONT_RX & // Recepcin continua
USART_BRGH_HIGH,129); // 9600 baudios a 20Mhz
Las posibles configuraciones de OpenUSART son:

putsUSART: Escribe una cadena de caracteres previamente


definida en la memoria de datos. Su valor de entrada es la
cadena de caracteres.
Por ejemplo:
char mensaje_1[]=Firtec
putsUSART(mensaje_1);
putrsUSART: Escribe una cadena de caracteres definido en la
memoria de programa. Su valor de entrada es el mensaje entre

2
mensaje comillas.
Por ejemplo:
putrsUSART(Firtec);
ReadUSART: Lee un carcter del buffer de recepcin del
mdulo EUSART.
getcUSART: lee un carcter del buffer de recepcin del
mdulo EUSART.
(Ambas funciones hacen lo mismo).
Por ejemplo:
recepcion = getcUSART();
WriteUSART: Escribe un carcter al buffer de transmisin del
mdulo EUSART.
putcUSART : Escribe un carcter al buffer de transmisin del
mdulo EUSART.
putcUSART(recepcion);
baudUSART: Configura el Baud Rate del mdulo EUSART. Esta es
una de las razones de porque ahora se llama Enhanced USART,
el BaudRate tiene sus propios bits de configuracin con el
cual puede operar en diversos modos. Tiene como argumentos
las siguientes opciones.

Para poder conectarnos va RS232 necesitamos especificar la


velocidad de comunicacin (baudios) La seleccin de baudios se
realiza mediante unas tablas presentes en el manual, en definitiva
es un valor numrico que se aplica a una frmula matemtica.

En nuestro ejemplo nos estamos comunicando a 9600 baudios con un

3
cristal de 20Mhz, si observamos en la hoja de datos vemos unas
tablas que nos dan los datos para configurar la velocidad de
acuerdo si BRGH=1 o BRGH= 0, BRGH determina si es alta o baja
velocidad, es conveniente siempre usar BRGH=1 an cuando se usen
bajas velocidades ya que el error es menor,para nuestro caso el
nmero determinado en la tabla es 129 para obtener 9600 baudios
con un cristal de 20Mhz y BRGH=1.

En nuestro caso para la


configuracin de los
baudios (velocidad de la
comunicacin) vamos a
usar este simple pero muy
eficiente programa que
resuelve el trabajo por
nosotros de manera muy
sencilla.
Nuestra funcin de
configuracin de puerto
tiene el siguiente
cdigo.

OpenUSART (USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE &


USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH,129);

La parte fsica, el hardware de


comunicaciones inicia en los dos pines
dedicados para este fin, los pines donde
esta el puerto del controlador.
En el caso del PIC18F4620 estos pines
son 25 para la transmisin y 26 para la
recepcin de las tramas RS232.
Cuando se configura el puerto con la
funcin OpenUSART tambien se configuran de manera automtica el
sentido de transferencia de los pines (TRISx).
Si buscamos conectarnos a una computadora necesitamos adaptar los
niveles RS232 nativos a niveles TTL manejados por nuestro

4
controlador, para esto tenemos dos caminos, implementar el clsico
MAX232, una interfaz que sirve para adaptar los niveles de tensin
RS232.

Claro est que esta interfaz solo es vlida para


conectarnos con computadoras que tienen el puerto
RS232 original, el clsico conector DB9.
En la actualidad este puerto ha desaparecido de
las computadoras de mesa y no existe en las computadoras
porttiles es por esto que necesitamos otra solucin y la solucin
viene con el puerto USB.

5
Podemos usar un puente USB-RS232.
Un ejemplo de estos puentes es el CP2102 de Silabs.

Una interfaz que cuenta con drivers para todos los Windows, Linux
y Mac.

La interfaz se puede conseguir en distintos formatos pero


adaptados a la conexin con microcontroladores, el CP210x puede
publicar todos los pines del RS232 clsico lo que resulta muy
interesante a la hora de conectarnos con
perifricos que siguen respetando todos los pines
del RS232.
No debemos confundir estas interfaces
especialmente diseadas para aplicaciones
electrnicas con los adaptadores comerciales que
se ven normalmente en los negocios de
informtica, la mayora de estos adaptadores solo
publican los pines TX/RX y Masa an cuando veamos
que tienen un conector DB9. Otro problema que Adaptador comercial

6
suelen tener estos adaptadores es lo problemtico que son a la
hora de hacerlos funcionar. (En lo personal tengo una coleccin de
estos adaptadores que no funcionan).
Otra forma de hacer conexiones RS232 es subir las tramas a enlaces
de radiofrecuencia (RS232 virtual).
Cuando pensamos en enlaces de RF lo primero que se nos ocurre es
WiFi, o complejos y costosos sistema de redes sin embargo hay
formas muy simples y econmicas de hacer esto.

Enlace inalambrico para conectar directamente al microcontrolador.

El mismo enlace conectado al puente USB-RS232 con lo que podramos


enviar datos directamente con nuestro micro y recibirlos en una
notebook a 100, 1000 o 5000 metros dependiendo de la potencia del
enlace y no solo los 15 metros del RS232 original cableado. Estos
enlaces pueden incluso ser configurados para operar en distintos
canales, construir redes etc.

7
Estos dispositivos se pueden programar, frecuencia, potencia,
canal, etc directamente desde una PC usando para eso el software
de configuracin.

Pero tambin se pueden programar on-line, el mismo micro conectado


puede re-programar el enlace.
Si bien el RS232 en el mundo informtico ha sido desplazado por el
USB en el campo de la electrnica sigue teniendo relevancia, los
microcontroladores siguen trayendo un puerto RS232 algunos incluso
dos puertos independientes!!!
El uso de los puentes USB-RS232 nos permite seguir usando los
viejos programas informticos que se conectaban por este puerto
pero ahora por USB conectados directamente a nuestro micro.
Simplifica mucho el trabajo para el programador informtico a la
hora de realizar programas para el manejo de variables obtenidas
con el microcontrolador. Estos enlaces no modifican en nada la
comunicacin solo eliminan el cable, si tengo una comunicacin
RS232 funcionando cableada solo tengo que conectar un enlace en
cada punta de la comunicacin y eliminar el cable. Dado el bajo
costo que tienen en relacin al valor del cable o incluso el
trabajo que insume hacer el tendido de cable es una opcin muy
interesante.
Vemos ahora un ejemplo con la UART en C18.
En este trabajo se pretende recibir desde la PC los caracteres
enviados desde el teclado, estos caracteres son mostrados en la
pantalla LCD y retransmitidos a la PC como un eco.
Se ha capturado la tecla backspace para borrar caracteres, de tal
forma que a medida que los caracteres se borran en la PC tambin
son borrados en el LCD.

8
Este trabajo solo captura una tecla del teclado, podramos haber
capturado muchas otras y as realizar acciones en la electrnica
dependiendo de las teclas apretadas.
Para el manejo de datos en la PC estamos usando el programa
Terminal.exe pero perfectamente podramos usar el hiperterminal de
windows.
Sin embargo considero que el programa usado presenta mas opciones
que el hiperteminal.

Programa Terminal.exe usado en este ejemplo.

9
/* *****************************************************************************
** Nombre : RS232.c
** Target : PIC18F4620
** Compilador : Microchip C18
** IDE : Microchip MPLAB
** XTAL : 20MHZ
** Autor : Firtec
**
** ****************************************************************************/

18
#include <p18f4620.h>
#pragma config OSC=HS,PWRT=ON,MCLRE=OFF,LVP=OFF,WDT=OFF

#include <stdio.h>
#include <delays.h>
#include <usart.h> // Librera para la comunicacin RS232

void ISR_Receptor (void);


volatile char Data, Kbhit=0;
#pragma code Interrupcion = 0x0008
void VectorInterrupcion (void) {
_asm goto ISR_Receptor _endasm
}
#pragma code //Se cierra seccin de ISR
//************************* Rutina de interrupcion *****************************
#pragma interrupt ISR_Receptor
void ISR_Receptor (void){
if (PIR1bits.RCIF==1){ // Discrimina la interrupcin
Data=getcUSART(); // Se lee dato recibido
Kbhit=1; // Indica que se ha recibido un dato
PIR1bits.RCIF=0; // Borra bandera de interrupcin
}
}
//******************** FUNCIN PRINCIPAL DEL PROGRAMA **************************
void main(void){
unsigned char base =1;
// Inicializa el USART y lo configura a 8N1, 9600 baudios
OpenUSART (USART_TX_INT_OFF & // TX sin interrupcin
USART_RX_INT_ON & // RX con interrupcines
USART_ASYNCH_MODE & // Modo asincrnico
USART_EIGHT_BIT & // Modo 8 Bits
USART_CONT_RX & // Recepcin continua
USART_BRGH_HIGH,129); // 9600 baudios a 20Mhz
RCONbits.IPEN = 0; // Deshabilitamos prioridades
INTCONbits.PEIE=1; // Habilitamos la interrupcin de perifricos
lcd_init();
Delay1KTCYx(25);
lcd_putrs("USART PIC18F4620"); // Cartel inicial
INTCONbits.GIE=1; // Habilita interrupcin global
while(1){
if(Kbhit !=0){ // Indica que hay nuevos datos recibidos
Kbhit = 0; // Borra la marca de ISR
if(Data!=0x00){ // El dato es distinto de 0?
if(Data==0x08 & base >= 1){ // Backspace & base son verdaderos?
Base--; // Regreso un lugar el cursor del LCD
if(base==0) // Me aseguro que no salga de la zona visible
base=1;
lcd_gotoxy(base,2);
lcd_putrs(" "); // Coloco donde est el curso un espacio
// vaco borrando el carcter anterior.
}
else{

10
lcd_gotoxy(base,2);
stdout =_H_USER;
printf("%c",Data); // Muestra el dato en pantalla
putcUSART (Data); // Re-Transmite el dato recibido como un eco.
base++;
}
}
}
}
}

Componentes y partes para la aplicacin.


1 Microcontrolador PIC18F4620.
1 Cristal de 20Mhz.
2 Condensadores de 18pF o 20pF.
1 Pantalla LCD 16x2 Hitachi 44780 o compatible
1 Resistencia de 1K.
1 Condensador de ,01uF y 10uF
1 Protoboard.
Cables de conexin.
Interfaz RS232
Placa programadora de PICs.
Fuente de alimentacin de 5 voltios.

11
Para terminar con el tema de las comunicaciones RS232 podemos ver
en este video un ejemplo de como hacer una comunicacin con un
enlace inalmbrico.

El tipo de enlace usado en este ejemplo es un APC220 y en


Argentina lo comercializa la gente amiga de CTM ELECTRONICA.
El enlace se conecta a la PC mediante los mencionados puentes USB-
RS232.

12

Вам также может понравиться