Este documento describe el puerto serial USART (Universal Synchronous Asynchronous Receiver Transmitter) en los microcontroladores. El puerto USART permite la comunicación bidireccional asincrónica simultánea a través de los registros TXREG y RCREG. Puede operar en modo asincrónico o sincrónico. En modo asincrónico es más común y permite comunicaciones a mayor distancia, aunque más lentas. Se requiere un circuito MAX232 para adaptar los niveles lógicos RS-232 del PC a los niveles TTL del microcontrolador.
Enlace radio bidireccional PC-MICROBOT (E. Rodriguez Regidor)Cristina Urdiales
Desarrollo de un módulo de comunicación inalámbrica entre un microbot controlado por un microcontrolador y un PC, de cara a la distribución de su sistema de control. Se intercambian paquetes con información sensorial del robot al PC y de comandos a la inversa
Un proyecto basado en el control del puerto paralelo mediante el PC. Una máquina embotelladora que se controla desde el ordenador y a través de un dispositivo interfaz y programada mediante Visual Basic 6.0.
Hoja de datos de la tarjeta de prototipado rápido USB2TTL, que permite una fácil y rápida interfaz entre la UART de un microcontrolador y el puerto USB.
1. Universal Synchronous Asynchronous
Los Microcontroladores tienen un Puerto de
comunicaciones seriales llamado Transmisor
Receptor Asincrónico Sincrónico Universal
(USART por las siglas en Ingles) o Interfaz de
Comunicación Serial (SCI). Este puerto puede
ser configurado para
establecer una comunicación
bidireccional asincrónico
simultanea (full dúplex).
Modo Asincrónico
El Puerto serial USART en
modo asincrónico permite comunicación de
datos bidireccionales simultáneos (full duplex).
Esto quiere decir que durante la comunicación
entre dos dispositivos con USART en modo
asincrónico, cada dispositivito puede trasmitir y
recibir datos al
mismo tiempo.
La señal recibida
o trasmitida
consiste de 8 bit
procedido por el
bit de ‘start’ (0) y
seguido por el
bit de ‘stop’ (1).
Este modo es el
más usado ya
que puede
alcanzar mas
a) Simple comunicación de datos usando dos bit de
haciendo que los 8 bit sobrantes puedan ser el dato
b) Comunicación de 11 bit haciendo los 9 bit de datos y dos de bit
de ‘start’ y ‘stop’.
ersal Synchronous Asynchronous Receiver Transmitter
os Microcontroladores tienen un Puerto de
llamado Transmisor
Sincrónico Universal
(USART por las siglas en Ingles) o Interfaz de
Comunicación Serial (SCI). Este puerto puede
modo asincrónico permite comunicación de
datos bidireccionales simultáneos (full duplex).
Esto quiere decir que durante la comunicación
entre dos dispositivos con USART en modo
dispositivito puede trasmitir y
distancia que en modo sincrónico, aunque sea
un poco más lento.
El puerto serial tiene registros especiales para
manipular los datos para ser transmitidos o
recibidos. Estos son los registros TXREG y
RCREG. TXREG es el registro
para guardar datos para ser
transmitidos hac
RCREG es el registro que
guarda el dato recibido por la
pata RX.
Modo
EL Puerto serial USART en modo
puede ser configurado como:
COMUNICACION DE DATOS BIDIRECCIONALES
SIN SIMULTANEADAD.
(half duplex).
Simple comunicación de datos usando dos bit de start y stop,
haciendo que los 8 bit sobrantes puedan ser el dato
Comunicación de 11 bit haciendo los 9 bit de datos y dos de bit
de ‘start’ y ‘stop’.
Transmitter
modo sincrónico, aunque sea
El puerto serial tiene registros especiales para
los datos para ser transmitidos o
recibidos. Estos son los registros TXREG y
RCREG. TXREG es el registro
para guardar datos para ser
transmitidos hacia la pata TX.
RCREG es el registro que
guarda el dato recibido por la
pata RX.
Modo Sincrónico
EL Puerto serial USART en modo sincrónico
puede ser configurado como: -a)
DE DATOS BIDIRECCIONALES
b)
TRANS
MISOR
O
RECEPT
OR DE
DATOS
start y stop,
haciendo que los 8 bit sobrantes puedan ser el dato
Comunicación de 11 bit haciendo los 9 bit de datos y dos de bit
2. 29 Modulo USART
Curso de Hi tech Compiler for PIC18
Y SENALES DE RELOJ SIMULANEAMENTE.
c) COMUNICACIÓN ENTRE DOS DISPOSITIVOS
QUE ESTEN EN MODO MASTER-SLAVE.
Velocidad de Comunicación
El reloj que
determina la
velocidad de
trasmisión del
puerto serial es
derivado del
oscilador principal
del
microcontrolador. Su valor puede ser ajustado
con el registro SPBRG y el bit BRGH en el
registro TXSTA. La transmisión de velocidad en
modo Asincrónico es:
Fórmula para Alta Velocidad:
Cuando se usa una velocidad de reloj muy alta y
se desea tener una alta transmisión de
velocidad se usa esta fórmula.
ܵܲܩܴܤ ൌ ൬
݂ܿݏ
ܦܷܣܤ ∗ 16
൰ െ 1
Fórmula para baja Velocidad:
Cuando se usa una velocidad de reloj muy alta y
se desea tener una baja transmisión de
velocidad se usa esta fórmula.
ܵܲܩܴܤ ൌ ൬
݂ܿݏ
ܦܷܣܤ ∗ 64
൰ െ 1
Norma RS232
La Norma RS-232 fue definida para conectar un
ordenador a un modem. Además de
transmitirse los datos de una forma serie
asíncrona son necesarias una serie de señales
adicionales, que se definen en la norma. Las
tensiones empleadas están comprendidas entre
+15/-15 voltios.
Conexión de un microcontrolador al puerto
serie del PC
Para conectar el PC a un microcontrolador por
el puerto serie se utilizan las señales Tx, Rx y
GND. El PC utiliza la norma RS232, por lo que los
niveles de tensión de los pines están
comprendidos entre +15 y -15 voltios. Los
microcontroladores normalmente trabajan con
niveles TTL (0-5v). Es necesario por tanto
intercalar un circuito que adapte los niveles:
El conector DB9 del PC
En los PCs hay conectores DB9 macho, de 9
pines, por el que se conectan los dispositivos al
puerto serie. Los conectores hembra que se
enchufan tienen una colocación de pines
diferente, de manera que se conectan el pin 1
del macho con el pin 1 del hembra, el pin2 con
el 2, etc...
Los datos y señales en el transmisor sincrónico salen del puerto
serial. La transmisión del 9vo bit es opcional.
3. 30 Modulo USART
Curso de Hi tech Compiler for PIC18
La información asociada a cada uno de los pines es la
siguiente:
El chip MAX 232
Este chip permite adaptar los niveles RS232 y TTL,
permitiendo conectar un PC con un microcontrolador.
Sólo es necesario este chip y 4 condensadores
electrolíticos de 22 micro-faradios. El esquema es el
siguiente:
Funcion en Hi tech compiler
Los requerimientos para poder trabajar con el
modulo serial que contiene el microcontrolador en
modo asincrónico son los siguientes:
Esquema de conexión de un MAX232
///////////////////////////////////////////////////////////////////////
// Configuración del USART ///
///////////////////////////////////////////////////////////////////////
OpenUSART(USART_TX_INT_OFF &//Interrupción por Transmisión apagado
USART_RX_INT_OFF &//Interrupción por Recepción Apagado
USART_ASYNCH_MODE &//Modo Asincronico
USART_EIGHT_BIT &//8-bit de transmission
USART_CONT_RX &//Recepción Continua
USART_BRGH_HIGH, //Alta velocidad de baudios
25); //para alta Velocidad:
// FOSC / (16 * (spbrg + 1))
// spbrg=(FOS/baud*16)-1
//Para baja Velocidad:
// FOSC / (64 * (spbrg + 1))
/*---------------------Fin de Conf. USART----------------------------*/
4. 31 Modulo USART
Curso de Hi tech Compiler for PIC18
La primera práctica a
realizar es enviar
cadenas de caracteres hacia la computadora, teniendo un
software que fue realizado en Microsoft Visual C# 2010 Express,
guardara todos los caracteres que enviemos en forma de string.
Las funciones Básicas de Recibir o enviar datos son las siguientes:
char DataRdyUSART(void);
Regresa el estado del bit RCIF, si a recibido datos
Regresara 1, si no tiene datos regresara 0.
void getsUSART(unsigned char * buffer, unsigned char
length );
buffer: Apunta a la locación donde caracteres a
recibir son para ser guardado.
Length: Numero de bytes para leer del USART
void OpenUSART(unsigned char config, unsigned char
spbrg);
config:
Interrupción de Transmisión:
USART_TX_INT_ON Interrupción por Transmisión ON
USART_TX_INT_OFF Interrupción por Transmisión OFF
Interrupción por Recepción:
USART_RX_INT_ON Interrupción por Recepción ON
USART_RX_INT_OFF Interrupción por Recepción OFF
Modo del USART:
USART_ASYNCH_MODE Modo Asincrónico
USART_SYNCH_MODE Modo Sincrónico
Tamaño de datos:
USART_EIGHT_BIT 8-bit Transmision/recepcion
USART_NINE_BIT 9-bit Transmision/recepcion
Selector de Maestro/Esclavo
USART_SYNC_SLAVE Modo Esclavo Sincrónico
Aprenderás hacer la comunicación necesaria
para transmitir datos vía serial hacia una
computadora.
Material necesario:
1 PIC18F2550
1 MAX232
4 Capacitores electrolíticos de 1uF
1 conector DB9 hembra
1 Res. 10Kohm
Fuente de 5 volts
Cable
Protoboard
Pagina recomendada:
http://ucursos.webs.com
Esta página ofrece una variedad
de proyectos realizados con
microcontroladores PIC, puedes
encontrar videos introductorios,
imágenes de Robots, Manuales,
foros donde puede comentar
dudas.
Y mucho Mas!!!
5. 32 Modulo USART
Curso de Hi tech Compiler for PIC18
USART_SYNC_MASTER Modo Maestro Sincrónico
Modo de Recepción:
USART_SINGLE_RX Sola Recepción
USART_CONT_RX Recepción Continua
Baud rate:
USART_BRGH_HIGH Alta rate
USART_BRGH_LOW Baja rate
Spbrg:
0 a 255
Fórmula para Alta Velocidad:
Cuando se usa una velocidad de reloj muy alta y se desea tener una alta transmisión de velocidad se usa
esta fórmula.
ܵܲܩܴܤ ൌ ൬
݂ܿݏ
ܦܷܣܤ ∗ 16
൰ − 1
Fórmula para baja Velocidad:
Cuando se usa una velocidad de reloj muy alta y se desea tener una baja transmisión de velocidad se usa
esta fórmula.
ܵܲܩܴܤ = ൬
݂ܿݏ
ܦܷܣܤ ∗ 64
൰ − 1
Programa que contiene el Microcontrolador PIC18:
////////////////////////////////////////////////////////
// USO DEL USART ////
//Autor: george.manson.69 ////
//Lugar: Mexico ////
//Compilador: HI TECH PIC18 (LITE MODE) ////
////////////////////////////////////////////////////////
#include<htc.h>
#include<stdio.h>
/////////////////////////////////////////////////////////////
//Configuracion para trabajar Con oscilador interno de 8Mhz
__CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC);
/////////////////////////////////////////////////////////////
__CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K);
__CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN);
__CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);
//////////////////////////////
//Frecuencia FOSC 8Mhz
//////////////////////////////
#define _XTAL_FREQ 8000000
6. 33 Modulo USART
Curso de Hi tech Compiler for PIC18
//////////////////////////////////////////////
//Para usar el printf
//////////////////////////////////////////////
void putch(unsigned char byte) {
/* Salida de un byte */
while(!TXIF) /* Estbalece que el regitro esta vacio*/
continue;
TXREG = byte;
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
//////////////////////////////
//FUNCION PRINCIPAL
//////////////////////////////
void main(void){
////////////////////////////////////////
//Establece Oscilador Interno ////
////////////////////////////////////////
OSCCON=0x70;
NOP();NOP();NOP();NOP();
//////////////////////////////////////////////////////////////////////
// Configuracion de Puertos ///
//////////////////////////////////////////////////////////////////////
TRISC=0x80;
/*---------------------Fin de Conf. Puertos-------------------------*/
///////////////////////////////////////////////////////////////////////
// Configuracion del USART ///
///////////////////////////////////////////////////////////////////////
OpenUSART(USART_TX_INT_OFF &//Interrupcion por Transmision apagado
USART_RX_INT_OFF &//Interrupcion por Recepcion Apagado
USART_ASYNCH_MODE &//Modo Asincronico
USART_EIGHT_BIT &//8-bit de transmision
USART_CONT_RX &//Recepcion Continua
USART_BRGH_HIGH, //Alta velocidad de baudios
25); //para alta Velocidad:
// FOSC / (16 * (spbrg + 1))
// spbrg=(FOS/baud*16)-1
//Para baja Velocidad:
// FOSC / (64 * (spbrg + 1))
/*---------------------Fin de Conf. USART----------------------------*/
printf(" MicroCursos: Disena y Contruyern");
printf("Ejemplo de uso del USARTrn");
printf("Trabajando a una velocidad de: 19200rn");
printf("Con un PIC18F2550 a 8Mhz");
///////////////////////////////////////////////////////////////////////
// FUNCION PRINCIPAL ///
///////////////////////////////////////////////////////////////////////
while(1);
}
/*-------------------------------Fin-----------------------------------*/
7. 34 Modulo USART
Curso de Hi tech Compiler for PIC18
Esquema del Circuito:
Abra el Programa “Terminal RS232” que está ubicada en la carpeta de los proyectos, y después busque
el Puerto y ponga los baudios a 19200, ya que el programa que contiene el Microcontrolador se a puesto
a una velocidad de 19200.
Al tener ya conectado nuestro software al puerto seleccionado, conecte el circuito para ver los
resultados:
8. 35 Modulo USART
Curso de Hi tech Compiler for PIC18
La siguiente practica es muy sencilla es transformar el resultado de una operación a formato string para
luego ser enviado por el serial, y después visualizarlo en ‘TerminalRS232’
Nuestro programa es muy sencillo, solo falta de modificar el programa anterior para agregar la siguiente
línea:
Recuerde definir las variables “var,var1,var2” como tipo int.
int var,var1,var2;
Al compilar y simular podemos apreciar en nuestro software el resultado.
printf(" MicroCursos: Disena y Contruyern");
printf("Ejemplo de uso del USARTrn");
printf("Trabajando a una velocidad de: 19200rn");
printf("Con un PIC18F2550 a 8Mhzrn");
var1=50;
var2=100;
var=var1+var2;
printf("var = %u + %urn",var1,var2);
printf("var = %urn",var);
///////////////////////////////////////////////////////////////////////
// FUNCION PRINCIPAL ///
///////////////////////////////////////////////////////////////////////
while(1);
}
/*-------------------------------Fin-----------------------------------*/
Nota: Con la función printf podemos
hacer las conversiones necesarias
para mostrarlo como texto, %u
corresponde a valores unsigned char,
char, unsigned int, int
9. 36 Modulo USART
Curso de Hi tech Compiler for PIC18
Ahora haremos un conteo de 0 a 100, en este caso solo agregaremos la sentencia for para realizar un
conteo limitado.
Usando la misma variable var para usarlo con el for
Este programa hará que cuente de 0 a 100 y después visualizarlo en ‘Terminal Rs232’
Nota: Recuerde que la función printf puede causar retraso en el envío, y tardar un poco más tiempo de lo
previsto, si usted va enviar datos de tipo byte, se recomienda usar la función WriteUSART.
printf(" MicroCursos: Disena y Contruyern");
printf("Ejemplo de uso del USARTrn");
printf("Trabajando a una velocidad de: 19200rn");
printf("Con un PIC18F2550 a 8Mhzrn");
var1=50;
var2=100;
var=var1+var2;
printf("var = %u + %urn",var1,var2);
printf("var = %urn",var);
printf("Conteo:rn");
for(var=0;var<=100;var++){
printf("%ur",var);
__delay_ms(10);
}
///////////////////////////////////////////////////////////////////////
// FUNCION PRINCIPAL ///
///////////////////////////////////////////////////////////////////////
while(1);
}
/*-------------------------------Fin-----------------------------------*/