Professional Documents
Culture Documents
PROTOLOCO RS232
Objetivos de aprendizaje
En esta prctica se pretende que el alumno aprenda a comunicar dispositivos por medio
del protocolo RS-232, en este caso un microcontrolador con un programa de control como
labview o myopenlab.
Los pasos que deber seguir el alumno ayudaran a reflejaran un progreso en el aumento
de sus conocimientos sobre el tipo de comunicacin (rs232), as podr obtener
conocimiento para realizar y comprender este tipo de comunicaciones.
Actividad(es) de aprendizaje
Controlar el encendido y apagado de un led por medio del protocolo rs232.
Materias relacionadas
Control
Electrnica digital
Microcontroladores
Programacin bsica
Programacin avanzada
1
MECATRONICA
No. DE PARTE
Microcontrolador atmega
Capacitores
Led
Maneje con cuidado herramientas y piezas con bordes afilados para evitar heridas.
ELABOR:
REVIS:
AUTORIZ:
ACADEMIA DE INGENIERIA
MECATRNICA
JEFE DE CARRERA
INGENIERIA MECATRNICA
NOMBRE Y FIRMA
NOMBRE Y FIRMA
NOMBRE Y FIRMA
FECHA
FECHA
FECHA
2
MECATRONICA
ndice
FUNDAMENTO TEORICO ............................................................................................................ 4
SOBRE EL RS232....................................................................................................................... 4
COMUNICACIN RS232 - LO BSICO .......................................................................... 4
FUNDAMENTOS DE LA COMUNICACIN SERIAL. .................................................... 4
RS232 ........................................................................................................................................... 5
RS232 TRANSMISIN DE DATOS....................................................................................... 6
TRANSMISIN: ......................................................................................................................... 6
RS232 RECEPCIN DE DATOS ............................................................................................. 7
SOBRE MY OPEN LAB Y EL MICROCONTROLADOR AVR ATMEGA 32 ........................ 8
DESARROLLO DE LA PRCTICA: ............................................................................................. 8
PROGRAMACIN EN LENGUAJE C PARA EL MICRO CONTROLADOR .................... 9
PROGRAMA ENTERO ......................................................................................................... 15
PROGRAMA EN MYOPENLAB EN EL PANEL FRONTAL Y DE CIRCUITO ............... 17
PLANTILLA EN PROTEUS ..................................................................................................... 21
PROGRAMA EN LABVIEW .................................................................................................... 23
DIAGRAMA PARA CABLE RS232 ...................................................................................... 29
APENDICES: .................................................................................................................................. 30
APENDICE A.............................................................................................................................. 30
OPERADORES PARA EL MANEJO DE BITS ................................................................. 30
APENDICE B.............................................................................................................................. 30
OPERADORES DE RELACION ......................................................................................... 30
APENDICE C.............................................................................................................................. 31
OPERADORES ARITMATICOS ........................................................................................ 31
APENDICE D ............................................................................................................................. 31
USO DE LAS MACROS PARA FACILITAR LA ESCRITURA EN REGISTROS DE
PINES ..................................................................................................................................... 32
BIBLIOGRAFAS .......................................................................................................................... 34
3
MECATRONICA
FUNDAMENTO TEORICO
SOBRE EL RS232
4
MECATRONICA
Supongamos que la lnea es baja por algn tiempo que significa un '0', pero cuantos
pulsos de cero tenemos que tomar en cuenta? Si enviamos los datos como 00001111 la
lnea esta baja por algn tiempo y despus alta. Entonces, cmo sabemos que son cuatro
'0 y cuatro 1?
Ahora bien, si aadimos otra lnea llamada lnea de reloj para sincronizar, entonces ser
muy fcil. Es necesario anotar el valor de la lnea de datos slo cuando se ve la "lnea de
reloj" en alto. Vamos a entender esto con ayuda de una animacin (ver serial_trasm.gif en
la carpeta de imgenes usando un navegador web).
RS232
En RS232 hay dos lneas de datos RX y TX. TX es el cable en el que los datos se envan a
otro dispositivo. RX es la lnea en la que otro dispositivo, puso a los datos que necesita
enviado al dispositivo.
5
MECATRONICA
1200
2400
4800
9600
19200
38400
57600
115200
Para nuestro ejemplo para la discusin del protocolo elegimos la velocidad 9600bps (bits
por segundo). Como estamos enviando 9.600 bits por segundo, un bit toma 1/9600
segundos o 0,000104 seg o 104 uS (microsegundo = 10 ^ -6 seg).
Para transmitir un nico byte necesitamos bits adicionales BIT DE INICIO Y BIT DE
PARADA. As que cuando enviamos 8bits realmente estamos mandando 10bits y haciendo
cuentas 9600bps entre 10bits nos resulta en que mandamos 960 bytes por segundo.
Nota: El nmero de bits de parada puede ser uno o dos (por simplicidad vamos a utilizar
un solo bit de parada).Hay bit de paridad, pero de nuevo por simplicidad no estaramos
utilizndolo).
Transmisin:
Recordemos que en voltaje TTL alto=-12 y bajo=+12
6
MECATRONICA
1. Cuando no hay datos en la lnea TX esta se encuentra en estado alto HIGH (-12V)
2. Cuando el dispositivo necesita enviar datos se enva el BIT DE INICIO que es un 0
que dura 104uS (si la taza de baudios es 9600bps) (Este es el bit de inicio,es
siempre 0).
3. entonces se enva cada pedacitos con duracin = 104uS
4. Finalmente activa ALTA durante al menos 104uS (Esto es bits de parada y es
siempre 1).
RS232 Recepcin de datos
7
MECATRONICA
2. Cuando detecta el bit de inicio espera medio tiempo de bit es decir, 104/2 = 52uS
y vuelve a comprobar que haya una seal en BAJA con el fin asegurarse de que es
un bit de inicio y no alguna interferencia que pudiera arrojar un BAJO
momentneo.
3. Luego espera 104uS y ahora se encuentra situado en medio del primer bit que
ahora lee el valor. La razn de que se posicione la lectura de los bits a la mitad de
cada pulso trasmitido es para evitar errores ya que si se posicionara la lectura al
principio o al final del pulso podra haber errores por el cambio de estado.
4. De igual forma se lee todos los 8 bits
5. Ahora el receptor tiene los datos.
Desarrollo de la prctica:
Dividiremos la prctica en 4 partes:
Plantilla en proteus
Programa en Labview
8
MECATRONICA
9
MECATRONICA
Despus nos
mostrara una
plantilla base para
empezar a
programar el
microncontrolador.
Donde tendremos
primero la parte
comentada que
muestra nombre
del programa,
autor y fecha
10
MECATRONICA
Despues la librera
principal de
funciones bsicas y
posteriormente el
main y su
correspondiente ciclo
while.
11
MECATRONICA
Procedamos a definir 2 macros que nos servirn para facilitarnos la manera de declarar
como entradas o salidas los pines del micro y la lectura y escritura de los mismos.
12
MECATRONICA
Tenemos 3 funciones:
La primera con titulo USARTInit es la encargada de configurar el usart para asignar su
modo de operacin sncrono o asncrono, recordemos del marco terico rs232 que tiene
que se asncrona ya que para usar el sncrono existen otros protocolos diferentes al
RS232. Dado que es muy extensa la explicacin de cada uno de los registros y los bits que
se utilizan en la configuracin me limitaren a explicar solamente las 2 ltimas funciones.
NOTA: se agrego la seccin de usart de la hoja de datos del atmega 32 en espaol a los
documentos de esta prctica si quieren saber que hace cada registro y cada bit.
La seguna funcin con titulo USARTReadChar bsicamente es un ciclo while con la
condicin de que mientras la bandera RXC=0 (que no tengamos nada en el buffer de
lectura) se quede esperando en el ciclo while y cuando RXC=1(que tengamos algo en el
buffer) lea el buffer que es el registro UDR
La tercera funcin con titulo USARTWriteChar bsicamente es lo mismo que la segunda
pero esta funcin espera que el buffer este vaco para poder mandar un dato al registro
UDR(el buffer)
13
MECATRONICA
Dentro del main declaramos como salida el pin del led para poder prenderlo y apagarlo.
14
MECATRONICA
NOTA: En la hoja de datos se especifican otras formulas para otros modos de operacin
del usart.
Ahora tenemos el FOR que simplemente almacena lo que llega en el arreglo, dado que
solo recibimos un dato la cuenta es hasta 1.
Tenemos ahora entero =atoi(dato); que convierte los caracteres ascci de el arreglo dato
en nmeros enteros para ser utilizados como valores.
Despus simplemente tenemos la condicional, si el valor que recibimos es 0 el puerto esta
en bajo pero si el dato que recibimos es 1, entonces el puerto esta en alto.
PROGRAMA ENTERO
#include
#include
#include
#include
<avr/io.h>
<util/delay.h>// libreria para los retardos
<inttypes.h>//libreria de funciones basicas
<stdio.h>//libreria de funciones basicas
15
MECATRONICA
char USARTReadChar()
{
while(!(UCSRA & (1<<RXC)))//mientras sea 0 la bandera esperar
{
//no hacer nada
}
return UDR;//devolverme lo que este en el buffer
}
void USARTWriteChar(char data)
{
while(!(UCSRA & (1<<UDRE)))//mi entras sea 0 la bandera esperar
{
//no hacer nada
}
UDR=data;// mandar al buffer lo que tengo
}
//fIN DE LOS PROTOTIPOS DE FUNCIONES
//declarar variables
int dato[1];
int entero;
int i;
int main(void)
{
bit_set(DDRC,DDC0); // declarar salidas
//inicializar usart a 9600 baudios
// formula a doble velocidad----> UBRR=[fcpu/8(9600)]-1=103
USARTInit(103);
while(1)
{
for(i=0;i<1;i++)// ciclo de lectura de datos, el contador aumenta d 1 en 1
{
dato[i]=USARTReadChar();
}
entero=atoi(dato);
if (entero==0)
{
bit_clear(PORTC,PC0);
}
else
{
bit_set(PORTC,PC0);
}
}//fin del while
}//fin del main
16
MECATRONICA
17
MECATRONICA
Una vez colocados en la hoja en blanco, estos componentes aparecern como bloques en
la pestaa de panel de circuito. Ahora bien, en el panel de circuito crearemos 2 circuitos
diferentes en la misma hoja, uno para el envio de datos por rs232 y otro para convertir
por medio de un diagrama de flujo la salida boleana del interruptor en un valor numrico
reconocible para el componente rs232.
18
MECATRONICA
19
MECATRONICA
Nos aparecesa un men donde agregaremos 2 variables, una que llamaremos por ejemplo
led y que ser de tipo doubl y otra que llamaremos por ejemplo boleano que ser de
tipo boolean. Y estas sern las que utilizaremos para guardar informacin en el diagrama
de flujo.
20
MECATRONICA
En resumen: el diagrama de flujo toma el valor booleano del interruptor para iniciar el
diagrama de flujo (recordemos que solo podemos iniciar un diagrama de flujo cuanto
tenemos una seal booleana ALTO en el smbolo de inicio, por eso tenemos un segundo
inicio start2 negado) en ALTO y otro para cuando est en BAJO, por eso tiene los 2
smbolos star 1 y 2. Depositamos el valor del interruptor en la variable booleana que
creamos, despus preguntamos si es verdadera o falsa y le asignamos un numero real 1 o
0 segn sea el caso para despus mandar este nmero real por rs232.
Plantilla en Proteus
Para la plantilla necesitaremos 2 terminales virtuales para ver los datos que se reciben o
envan, un atmega 32, un led y un puesto COM(configurado como COM4). Al darle doble
clic al ATMEGA32 nos dara la opcin de cargarle un programa que ser el que creamos al
inicio, que se encuentra en la carpeta del proyecto en la carpeta debug y es un .hex
21
MECATRONICA
22
MECATRONICA
Programa en Labview
Empezamos abriendo un nuevo proyecto donde tendremos 2 ventanas, una que indica el
panel frontal y una que se enfoca al circuito de bloques. Si presionamos control-T las 2
ventanas tomaran una mitad del monitor cada una.
Empecemos en la ventana de bloques donde buscaremos el puerto visa para configurarlo
dando click derecho sobre la hoja de trabajo y nos saldr un men de componentes,
iremos a instrument I/O luego a serial y por ultimo tomamos el componente configure
port:
23
MECATRONICA
Una vez que tengamos el componente pondremos el puntero sobre la entradas del mismo
Daremos doble clic sobre el primer punto llamado visa resource name y crearemos un
control manipulable por el usuario:
24
MECATRONICA
Despus crearemos una constante en la terminal con el nombre de Baud rate que tendr
un valor de 9600, esto es la configuracin del puerto. Despus crearemos un ciclo while
entrando al men de componentes y en estructuras encontraremos el while loop:
25
MECATRONICA
Ahora bien, dentro del ciclo while creamos un case que encontramos donde estaba el
while loop. Procedemos a crearle un control booleano y unimos las entradas de un lado al
otro del case cuando esta en su pestaa de false.
Ahora empezaremos a trabajar en la pestaa de True. Vamos a colocar un visa write que
se encuentra en el mismo sitio que el componente de configuracin VISA serial y le
crearemos un control del tipo carcter o un combo box, tambin unimos las entradas del
case al componente y las salidas del componente a la salida del case.
26
MECATRONICA
Por ltimo aadimos un control de parada al while un contador a 15 y fuera del ciclo while
un cierre de puertos que encontramos en las herramientas de visa donde sacamos los
componentes anteriores.
27
MECATRONICA
Bastara con simular tanto en proteus como en labview para que empiece a funcionar la
trasmisin.
28
MECATRONICA
29
MECATRONICA
APENDICES:
APENDICE A
OPERADORES PARA EL MANEJO DE BITS
APENDICE B
OPERADORES DE RELACION
30
MECATRONICA
APENDICE C
OPERADORES ARITMATICOS
APENDICE D
31
MECATRONICA
Entonces cuando queramos definir una salida en el puerto A pin 0 por ejemplo, nosotros
hacamos esto:
DDRA=DDRA|(1<<DDA0);
Que podamos simplificar como esto:
DDRA|=(1<<DDA0);
BIT 6
BIT 5
BIT 4
BIT 3
BIT 2
BIT 1
BIT 0
32
MECATRONICA
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
BIT 6
BIT 5
BIT 4
BIT 3
BIT 2
BIT 1
BIT 0
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
Donde el registro DDRA terminaba configurado con un bit 1 en DDA0 asignandolo como
salida
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
Y lo mismo suceda cuando queramos asignar una entrada, escribir en un puerto, activar
resistencia de pull up a una entrada o leer una entrada:
DDRA|=(1<<DDA0);// declarar un pin como salida
DDRA&=~(1<<DDA0);//declarar un pin como entrada
PORTA|=(1<<PA0);//escribir un 1 en un puerto
PORTA&=~(1<<PA0);//escribir un 0 en un puerto
Y un
DDRA|=(1<<DDA0);//declarar un pin como salida
Set_clear(DDRA,DDA0);//asisna un 0 al registro DDRA en el bit DDA0
Ahora bien si etiquetamos los registros y los bits de los registros con nombres a nuestra
conveniencia como por ejemplo
33
MECATRONICA
Bibliografas
http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-basics/
http://extremeelectronics.co.in/avr-tutorials/rs232-communication-the-level-conversion/
34
MECATRONICA