NOMBRE DE LA PRÁCTICA: PRÁCTICA: PROTOLOCO RS232 Parte 1: Material para el alumno
Objetivos de aprendizaje En esta práctica 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 comunicación (rs232), así podrá obtener conocimiento conocimiento para realizar y comprender este tipo de comunicaciones. comunicaciones. Actividad(es) Actividad(es) de aprendizaje aprendizaje Controlar el encendido y apagado de un led por medio del protocolo prot ocolo rs232. Materias relacionadas Control Electrónica digital Microcontroladores Programación básica Programación avanzada
1 MECATRONICA
PARTES Y EQUIPO REQUERIDO DESCRIPCIÓN
No. DE PARTE
Cable adaptador serial-usb Software labview o myopenlab Software isis proteus Software virtual serial port Equipo de computo Cable rs232 fabricado con el componente MAX232 Microcontrolador atmega Capacitores Led
PRECAUCIONES PRECAUCIONES Y MEDIDAS DE SEGURIDAD
Nunca deje objetos extraños en el área de trabajo (cables, pinzas, desarmadores, etc.). Solo utilice el material adecuado para la operación que valla a realizar. Maneje con cuidado herramientas y piezas con bordes afilados para evitar heridas.
No use ropa suelta durante la realización r ealización de la práctica.
Si tiene algún problema con el funcionamiento del equipo o herramienta que utiliza, pida ayuda a su docente o al encargado del laboratorio. Reporte cualquier anomalía a su docente o al encargado del laboratorio.
ELABORÓ:
NOMBRE Y FIRMA
REVISÓ: ACADEMIA DE INGENIERIA MECATRÓNICA NOMBRE Y FIRMA
AUTORIZÓ: JEFE DE CARRERA INGENIERIA MECATRÓNICA NOMBRE Y FIRMA
FECHA
FECHA
FECHA
2 MECATRONICA
PARTES Y EQUIPO REQUERIDO DESCRIPCIÓN
No. DE PARTE
Cable adaptador serial-usb Software labview o myopenlab Software isis proteus Software virtual serial port Equipo de computo Cable rs232 fabricado con el componente MAX232 Microcontrolador atmega Capacitores Led
PRECAUCIONES PRECAUCIONES Y MEDIDAS DE SEGURIDAD
Nunca deje objetos extraños en el área de trabajo (cables, pinzas, desarmadores, etc.). Solo utilice el material adecuado para la operación que valla a realizar. Maneje con cuidado herramientas y piezas con bordes afilados para evitar heridas.
No use ropa suelta durante la realización r ealización de la práctica.
Si tiene algún problema con el funcionamiento del equipo o herramienta que utiliza, pida ayuda a su docente o al encargado del laboratorio. Reporte cualquier anomalía a su docente o al encargado del laboratorio.
ELABORÓ:
NOMBRE Y FIRMA
REVISÓ: ACADEMIA DE INGENIERIA MECATRÓNICA NOMBRE Y FIRMA
AUTORIZÓ: JEFE DE CARRERA INGENIERIA MECATRÓNICA NOMBRE Y FIRMA
FECHA
FECHA
FECHA
2 MECATRONICA
Índice
FUNDAMENTO TEORICO ............................................................................................................ 4 SOBRE EL RS232................. ................. ................. .................. ................. .................. ............... 4 COMUNICACIÓN RS232 - LO BÁSICO .......................................................................... 4 FUNDAMENTOS DE LA COMUNICACIÓN SERIAL. .................................................... 4 RS232 ........................................................................................................................................... 5 RS232 TRANSMISIÓN DE DATOS....................................................................................... 6 TRANSMISIÓN: ......................................................................................................................... 6 RS232 RECEPCIÓN DE DATOS ............................................................................................. 7 SOBRE MY OPEN LAB Y EL MICROCONTROLADOR MICROCONTROLADOR AVR ATMEGA 32 ........................ 8 DESARROLLO DE LA PRÁCTICA: ............................................................................................. 8 PROGRAMACIÓN EN LENGUAJE C PARA EL MICRO CONTROLADOR ................. ... 9 PROGRAMA ENTERO ......................................................................................................... 15 PROGRAMA EN MYOPENLAB EN EL PANEL FRONTAL Y DE CIRCUITO 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 ARITMATICOS ........................................................................................ 31 APENDICE D ............................................................................................................................. 31 USO DE LAS MACROS PARA FACILITAR LA ESCRITURA EN REGISTROS DE PINES ..................................................................................................................................... 32 BIBLIOGRAFÍAS .......................................................................................................................... 34
3 MECATRONICA
FUNDAMENTO TEORICO SOBRE EL RS232
Comunicación RS232 - Lo Básico RS232 es un protocolo de comunicación serie asíncrona ampliamente utilizado en ordenadores y sistemas digitales. Se llama asíncrono porque no hay señal de reloj de sincronización separada, ya que hay en otros protocolos de serie como SPI y I2C. El protocolo es tal que sincronizar automáticamente a sí mismo. Podemos utilizar RS232 para crear fácilmente un enlace de datos entre nuestros proyectos basados MCU y PC estándar. Excelente ejemplo es un ratón de PC Serial comercial (no popular en estos días). Usted puede hacer una registradora de datos que lea los valores analógicos (como temperaturas o luz utilizando sensores adecuados) usando el ADC y enviarlos al PC, donde un programa especial escrito por muestra los datos utilizando bonitos gráficos y tablas, etc .. en realidad su imaginación es el límite!
Fundamentos de la comunicación serial. Digamos que un byte se transmite un bit a la vez. Mientras que en la transmisión en paralelo es un conjunto de datos a la vez, por ejemplo un byte (8bits) se transmiten a la vez. Obviamente transmisión en serie requiere un solo cable mientras transferencia paralela requiere tantos cables como los hay en nuestra unidad de datos. Así la transferencia en paralelo se utiliza para transferir datos dentro de corto alcance (por ejemplo, dentro de la computadora entre la tarjeta gráfica y la CPU), mientras que la transferencia en serie es preferible en la gama larga. Como en la transmisión en serie solamente un alambre se utiliza para la transferencia de datos. Sus cambios de nivel lógico son según los bits que se transmiten (0 o 1). Pero una comunicación serie necesita alguna forma de sincronización. ¿Se puede saber qué datos ha de venir? No porque usted no está sincronizado. Usted necesita una manera de saber cuándo se empieza a trasmitir un byte y un bit. 4 MECATRONICA
Supongamos que la línea es baja por algún tiempo que significa un '0', pero cuantos pulsos de cero tenemos que tomar en cuenta? Si enviamos los datos como 00001111 la línea esta baja por algún tiempo y después alta. Entonces, ¿cómo sabemos que son cuatro '0’ y cuatro ‘1’?
Ahora bien, si añadimos otra línea llamada “línea de reloj” para sincronizar, entonces será muy fácil. Es necesario anotar el valor de la línea de datos sólo cuando se ve la "línea de reloj" en alto. Vamos a entender esto con ayuda de una animación (ver serial_trasm.gif en la carpeta de imágenes usando un navegador web).
RS232 En RS232 hay dos líneas de datos RX y TX. TX es el cable en el que los datos se envían a otro dispositivo. RX es la línea en la que otro dispositivo, puso a los datos que necesita enviado al dispositivo.
Una cosa más sobre RS232. Sabemos que un BAJO = 0v ALTO = + 5v en Microcontroladores y en circuitos TTL / RS232 un ALTA = -12 V y LOW = + 12V . Ya esto es poco raro pero aumenta el alcance y la fiabilidad de la transferencia de datos. Ahora usted debe estar preguntándose cómo conectar este a un microcontrolador que entienden sólo 0 y 5v? Pero usted será muy feliz de saber que hay un IC muy popular que puede hacer esto para usted! Es MAX232 de Maxim Semiconductors. Como no hay una línea "reloj" para la sincronización se requiere sincronización precisa para las transmisiones se realizan con ciertas velocidades estándar . Las velocidades se miden en bits por segundo. Número de bits transmitidos también se conoce como velocidad de transmisión. Algunas velocidades de transmisión estándar son: 5 MECATRONICA
1200 2400 4800 9600 19200 38400 57600 115200
Para nuestro ejemplo para la discusión 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 número 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 estaríamos utilizándolo).
RS232 Transmisión de Datos. La transferencia de datos se hace de la siguiente forma
Transmisión: Recordemos que en voltaje TTL alto=-12 y bajo=+12
6 MECATRONICA
1. Cuando no hay datos en la línea TX esta se encuentra en estado alto HIGH (-12V) 2. Cuando el dispositivo necesita enviar datos se envía 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 envía cada pedacitos con duración = 104uS 4. Finalmente activa ALTA durante al menos 104uS (Esto es bits de parada y es siempre 1). RS232 Recepción de datos
1. El dispositivo receptor está esperando el bit de inicio es decir, la línea BAJA (+ 12V).
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 señal en BAJA con el fin asegurarse de que es un bit de inicio y no alguna interferencia que pudiera arrojar un BAJO momentáneo. 3. Luego espera 104uS y ahora se encuentra situado en medio del primer bit que ahora lee el valor. La razón 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 podría haber errores por el cambio de estado. 4. De igual forma se lee todos los 8 bits 5. Ahora el receptor tiene los datos.
SOBRE MY OPEN LAB Y EL MICROCONTROLADOR AVR ATMEGA 32 Se agregaron documentos adicionales en la carpeta de la práctica del uso de myopenlab y en específico del usart del Atmega 32. En la práctica se mostrara como hacer uso del RS232 de myopen lab y del usart del micro controlador, dado que explicar todo lo referente a sus configuraciones sería muy extenso.
Desarrollo de la práctica: Dividiremos la práctica en 4 partes: Programación en lenguaje C para el microcontrolador programa en myopenlab en el panel frontal y de circuito Plantilla en proteus Programa en Labview Diagrama para cable rs232
8 MECATRONICA
Programación en lenguaje C para el micro controlador
Lo primero que hay que hacer es abrir atmel studio 6, Después en nuevo proyecto NOTA: el programa entero se encuentra al final de este tema.
Se nos abrirá una ventana para elegir el nombre del proyecto y donde deseamos guardarlo además de 4 opciones de proyecto donde escogeremos la 1ra opción.
9 MECATRONICA
Nos mandare a una ventana nueva donde nos pedirá nuestro tipo microcontrolador, en nuestro caso es un ATMEGA32 simplemente.
Después 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 librería principal de funciones básicas y posteriormente el main y su correspondiente ciclo while.
Procedamos incertando 3 linbrerias que necesitaremos para realizar algunas operaciones después.
Procedamos primero definiendo que oscilador usaremos, como sabemos el microncontrolador posee un oscilador interno que se puede configurar en la simulación de proteus o a la hora de gravar el programa con el programador usando las palabras ALTA y BAJA ( se verá más adelante como configurar estas palabras). Dado que no se puede asegurar que todos los alumnos tengan osciladores externos para sus microcontroladores nosotros trabajaremos con el oscilador interno del atmega32 de 8Mhz. Procedamos a definirlo en el programa. Nota: es importante definir el oscilador en el programa dado que por defecto al no hacerlo el microcontrolador considerara un oscilador de 1Mhz y esto ocasionara que los delay, timers y la taza de baudios estén en cantidades distintas a las que nosotros estamos considerando, puede que un delay de 1ms dure mucho mas o mucho menos, ojo con declarar siempre su oscilador.
11 MECATRONICA
Procedamos a definir 2 macros que nos servirán para facilitarnos la manera de declarar como entradas o salidas los pines del micro y la lectura y escritura de los mismos.
NOTA: si no entiende el concepto de las macros que se escribieron, lea el apéndice D al final del documento para darse una idea de lo que hacen. Sigamos con las funciones importantes del programa que son las funciones de lectura, escritura y de configuración del USART.
12 MECATRONICA
Tenemos 3 funciones: La primera con titulo USARTInit es la encargada de configurar el usart para asignar su modo de operación síncrono o asíncrono, recordemos del marco teórico rs232 que tiene que se asíncrona ya que para usar el síncrono existen otros protocolos diferentes al RS232. Dado que es muy extensa la explicación de cada uno de los registros y los bits que se utilizan en la configuración me limitaren a explicar solamente las 2 últimas funciones. NOTA: se agrego la sección de usart de la hoja de datos del atmega 32 en español a los documentos de esta práctica si quieren saber que hace cada registro y cada bit. La seguna función con titulo USARTReadChar básicamente es un ciclo while con la condición 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 función con titulo USARTWriteChar básicamente es lo mismo que la segunda pero esta función espera que el buffer este vacío para poder mandar un dato al registro UDR(el buffer)
13 MECATRONICA
Procedemos a asignar algunas variables que necesitaremos
Int dato[1]; // es un arreglo de 1 carácter para recibir los datos de myopenlab Int i;// es para un contador que se encargara de leer el arreglo dato por dato Int entero;// es la variable donde se guarda la conversión de carácter a numero Ahora el programa principal
Dentro del main declaramos como salida el pin del led para poder prenderlo y apagarlo. 14 MECATRONICA
Después mandaremos a traer a la función para que configure el usart, y colocaremos la constante 103 dentro de ella para establecer la taza de baudios a 9600. La fórmula que se usa según la configuración que tiene es la siguiente:
NOTA: En la hoja de datos se especifican otras formulas para otros modos de operación 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 números enteros para ser utilizados como valores. Después 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
// libreria para los retardos //libreria de funciones basicas //libreria de funciones basicas
# define F_CPU 8000000UL//definir a 8MHz la Fcpu //definir macros para facilitar la configuracion de pines #define bit_set(sfr,bit)(_SFR_BYTE(sfr)|=_BV(bit)) #define bit_clear(sfr,bit)(_SFR_BYTE(sfr)&=~_BV(bit)) //PROTOTIPOS DE FUNCIONES void USARTInit(uint16_t ubrr_value) //variable de 16bits sin signo { UBRRL = ubrr_value; //acomodar la variable de 16 bits en los 2 registros de 8 bits para definir la taza de baudios UBRRH = (ubrr_value>>8); //acomodar la variable de 16 bits en los 2 registros de 8 bits para definir la taza de baudios UCSRC=(1<> Modo asíncrono,Sin paridad,1 bit de parada,tamaño de 8 bits UCSRB=(1<
15 MECATRONICA
char USARTReadChar() { while(!(UCSRA & (1< 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
Programa en myopenlab en el panel frontal y de circuito Empecemos con lo que será el panel frontal que será visible para el usuario: asi que abriremos un proyecto nuevo y nos mandara a una hoja en blanco donde podremos ver 2 pestañas que dicen “panel del circuito” y “panel frontal” respectivamente. Iremos a la
pestaña que dice panel frontal y en esta hoja en blanco crearemos el siguiente diseño: Donde tenemos un led cuadrado, un botón de acción con la etiqueta de “enviar”, un interruptor de 2 estados y una pequeña casilla blanca que nos mostrara información.
Para crearlo lo primero es ir al menú a nuestra izquierda en la pestaña de “componentes”
Menú principal que nos llevara a distintos tipos de interruptores, displays, medidores, gráficos, etc.
17 MECATRONICA
Menú de elementos boleanos, aquí encontraremos el interruptor, el botón en blanco para etiquetar, y el led
Menú de caracteres. Aquí encontramos la salida de texto “out” que necesitaremos.
Una vez colocados en la hoja en blanco, estos componentes aparecerán como bloques en la pestaña 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 numérico reconocible para el componente rs232.
18 MECATRONICA
Básicamente solo es buscar componentes y conectarlos y editarlos como se ve en el diagrama. El único punto importante es el definir variables dentro del diagrama de flujo. Para esto vamos a la parte superior de la ventana y daremos clic en el cuadro amarillo con un “i=0”
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 serán las que utilizaremos para guardar información 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 señal booleana ALTO en el símbolo de inicio, por eso tenemos un segundo inicio “start2” n egado) en ALTO y otro para cuando está en BAJO, por eso tiene los 2 símbolos star 1 y 2. Depositamos el valor del interruptor en la variable booleana que creamos, después preguntamos si es verdadera o falsa y le asignamos un numero real 1 o 0 según sea el caso para después mandar este número real por rs232.
Plantilla en Proteus Para la plantilla necesitaremos 2 terminales virtuales para ver los datos que se reciben o envían, un atmega 32, un led y un puesto COM(configurado como COM4). Al darle doble clic al ATMEGA32 nos dara la opción 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
Después crearemos una constante en la terminal con el nombre de Baud rate que tendrá un valor de 9600, esto es la configuración del puerto. Después crearemos un ciclo while entrando al menú de componentes y en estructuras encontraremos el while loop:
Ahora uniremos las salidas del componente al ciclo while:
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 pestaña de “false”.
Ahora empezaremos a trabajar en la pestaña de “True”. Vamos a colocar un visa write que
se encuentra en el mismo sitio que el componente de configuración VISA serial y le crearemos un control del tipo carácter o un combo box, también unimos las entradas del case al componente y las salidas del componente a la salida del case.
26 MECATRONICA
Por último añadimos 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.
En la ventana de panel frontal se abran colocado automáticamente los componentes:
27 MECATRONICA
Bastara con simular tanto en proteus como en labview para que empiece a funcionar la trasmisión.
28 MECATRONICA
Diagrama para cable RS232
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
USO DE LAS MACROS PARA FACILITAR LA ESCRITURA EN REGISTROS DE PINES Recordemos cómo es que funcionan los pines del micro controlador El micro atmega 32 tiene puestos A, B, C y D que van desde el pin PX0 al pin PX7 para cada puerto. Donde cada puerto es regido por 3 registros, el registro DDRX que permite designar si son entradas o salidas, el PORTX que permite escribir en ellos y el PINX que permite leer de ellos. Y cada uno de estos registros tiene un bit asignado a cada pin.
Entonces cuando queríamos definir una salida en el puerto A pin 0 por ejemplo, nosotros hacíamos esto: DDRA=DDRA|(1<
Que significa que poníamos un 1 en el bit 0 de un registro mascara REGISTRO MASCARA BIT 7
BIT 6
BIT 5
BIT 4
BIT 3
BIT 2
BIT 1
BIT 0
0
0
0
0
0
0
0
1
Luego hacíamos un OR bit a bit con el registro encargado de la configuración de entradas y salidas y lo guardábamos en el mismo. REGISTRO DDRA (encargado de entradas y salidas) 32 MECATRONICA
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
0
0
0
0
0
0
0
0
Entonces obteníamos esto como resultado: BIT 7
BIT 6
BIT 5
BIT 4
BIT 3
BIT 2
BIT 1
BIT 0
0
0
0
0
0
0
0
1
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
0
0
0
0
0
0
0
0
DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
0
0
0
0
0
0
0
1
Donde el registro DDRA terminaba configurado con un bit 1 en DDA0 asignandolo como salida DDA7
DDA6
DDA5
DDA4
DDA3
DDA2
DDA1
DDA0
0
0
0
0
0
0
0
1
Y lo mismo sucedía cuando queríamos asignar una entrada, escribir en un puerto, activar resistencia de pull up a una entrada o leer una entrada: DDRA|=(1<
Entonces las macros nos permiten cambiar un DDRA&=~(1<
Y un DDRA|=(1<
Ahora bien si etiquetamos los registros y los bits de los registros con nombres a nuestra conveniencia como por ejemplo
33 MECATRONICA