matlab y comunicacion rs232 con proteus

19
ALGORITMO EN MATLAB DE COMUNICACIÓN RS232 CON PROTEUS 7.6 (Se utiliza Virtual Serial Ports Driver XP4 y MicroCode Studio) Ingeniero Electrónico: Monteza Zevallos Fidel Tomas

Upload: fidel-tomas-monteza-zevallos

Post on 19-Jan-2016

260 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Matlab y Comunicacion Rs232 Con Proteus

ALGORITMO EN MATLAB DE COMUNICACIÓN RS232 CON PROTE US 7.6

(Se utiliza Virtual Serial Ports Driver XP4 y Micro Code Studio)

Ingeniero Electrónico: Monteza Zevallos Fidel Toma s

Page 2: Matlab y Comunicacion Rs232 Con Proteus

En esta oportunidad presento líneas abajo la programación en MATLAB el algoritmo de comunicación directamente con PROTEUS. Esta comunicación se

realiza mediante el protocolo de comunicación RS232 utilizando puertos creados virtualmente con el programa Virtual Serial Ports Driver XP4.

MATLAB utiliza el puerto virtual 2 mientras que PROTEUS utiliza el puerto virtual 3. En el circuito electrónico implementado con PROTEUS se debe tener en

cuenta que deberá utilizar el programa MicroCode Studio para confeccionar las líneas del algoritmo que realizara el trabajo de que el microcontrolador

PIC16F877A pueda recibir y enviar información con el protocolo RS232.

Solo deberá copiar y pegar todas las líneas de programación en el respectivo archivo de MATLAB y ejecutar la simulación, este proyecto comparado con el

publicado con el título ALGORITMO DE ENLACE VISUAL BASIC 6.0 CON PROTEUS 7.6 es más fácil de implementar puesto que si ya tiene ejecutado el proyecto

en PROTEUS solo debe ejecutar MATLAB y este realizara automáticamente la comunicación.

La idea es demostrar que mientras se tenga un hardware ya implementado (El microcontralador PIC16F877A ya programado) cualquier programa que se

implemente para su operación y funcionamiento será posible.

En el proyecto ALGORITMO DE ENLACE VISUAL BASIC 6.0 CON PROTEUS 7.6 se debió tener mucho cuidado en dar los valores correspondientes de cada

herramienta en la Ventana de Propiedades como por ejemplo cambiar los nombres de cada Command de acuerdo las líneas programadas, el intervalo del

Timer1, el intervalo del Timer2 y el intervalo del Timer 3 que debieron ser colocados adecuadamente.

Para esto se anexan las respectivas figuras demostrando su aplicación paso a paso.

Igualmente las líneas del algoritmo correspondiente al programa MicroCode Studio se publican en este trabajo, solo deberá copiarlas y pegarlas en el

programa respectivo para ejecutar su compilación tal como se explica en cada una de las figuras adjuntadas.

El tiempo que se pueda dedicar a este proyecto es muy importante, tengo la idea de cómo hacerlo y espero que sirva para ayudar a otros investigadores.

Posteriormente seguiré publicando líneas de programación en MATLAB de diversas aplicaciones como Sistema Gravitacional, Interacción de partículas,

Cinemática Directa y Cinemática Inversa para robótica, y con mucha más dedicación la Comunicación RS232 con microcontroladores, etc.

En la siguiente publicación estaré comentando acerca de un programa desarrollado en SIMULINK de MATLAB sobre temas de Control, toda una novedad,

estar atentos.

Se muestra el programa VIRTUAL SERIAL PORT DRIVER X P4 que servirá para la creación de puertos virtuale s RS232

Page 3: Matlab y Comunicacion Rs232 Con Proteus

Se apertura el programa VIRTUAL SERIAL PORT DRIVER XP4 y utilizamos el menú para la creación de puerto s virtuales RS232

Una vez que se apertura el programa VIRTUAL SERIAL PORT DRIVER XP4 se crea los puertos virtuales RS232 (2 con 3) y (4 con 5)

Page 4: Matlab y Comunicacion Rs232 Con Proteus

Una vez establecido los puertos virtuales de comuni cación RS232 con el programa VIRTUAL SERIAL PORT D RIVER XP4 lo cerramos

Aquí se muestra el circuito electrónico confecciona do en el programa PROTEUS 7.6, considerar el diseño en hardware tal como se encuentra el circuito most rado.

Page 5: Matlab y Comunicacion Rs232 Con Proteus

Aquí podemos visualizar la ventana con el circuito electrónico del microcontrolador PIC16F877A del pro grama PROTEUS. Note que el contador display 7 segme ntos se encuentra en

CERO y además las ventanas de ingreso (derecha) y salida (izquierda) de información en el protocolo R S232 se encuentran vacías.

Aquí podemos visualizar igualmente la ventana de MA TLAB y en ella la del Command Window con la que deb erá seguir los pasos que se soliciten.

Page 6: Matlab y Comunicacion Rs232 Con Proteus

Aquí podemos visualizar en MATLAB la ventana Editor en donde figura las líneas del algoritmo desarroll ado para la comunicación RS232. Las líneas en detal le figuran líneas abajo y se

encuentran comentadas

Aquí podemos visualizar tanto la ventana Editor de MATLAB en el instante de iniciar la simulación, en este caso no tengo mi carpeta reconocida por MATLAB así que se inicie la

comunicación RS232 se debe ejecutar Add to Path .

Page 7: Matlab y Comunicacion Rs232 Con Proteus

Aquí podemos visualizar la ventana del Command Wind ow que solicita ejecutar ENTER para que PROTEUS reciba la información desde MATLA B.

Aquí podemos visualizar solo la ventana con el circ uito electrónico del microcontrolador PIC16F877A de l programa PROTEUS en pleno proceso de recibir la p rimera información

numérica de confirmación de inicio de la comunicaci ón desde MATLAB. Note que el contador display 7 seg mentos se encuentra en ONCE y además las ventanas de ingreso (derecha) se encuentra codificado con AA000011 y salida (izquier da) de información en el protocolo RS232 se encuent ran codificado con $$0011.

Page 8: Matlab y Comunicacion Rs232 Con Proteus

Aquí podemos ahora visualizar la ventana con el cir cuito electrónico del microcontrolador PIC16F877A d el programa PROTEUS en pleno proceso de recibir la segunda información numérica desde MATLAB. Note que el contador display 7 segmentos se encuentra en MIL DOSCIENTOS TREINTA IOCHO y además las ventanas de ingreso (derecha) s e encuentra

codificado con AA001238 y salida (izquierda) de inf ormación en el protocolo RS232 se encuentran codifi cado con $$1238.

Aquí podemos ahora visualizar la ventana con el cir cuito electrónico del microcontrolador PIC16F877A d el programa PROTEUS en pleno proceso de recibir la tercera información

numérica desde MATLAB. Note que el contador display 7 segmentos se encuentra en DOS MIL CIENTO DOCE y además las ventanas de ingreso (derecha) se encuen tra codificado con AA002112 y salida (izquierda) de información en el protocolo RS232 se encuentran codificado con $$2112 .

Page 9: Matlab y Comunicacion Rs232 Con Proteus

Aquí podemos ahora visualizar la ventana con el cir cuito electrónico del microcontrolador PIC16F877A d el programa PROTEUS en pleno proceso de recibir la última información

numérica desde MATLAB de comprobación de término de la comunicación. Note que el contador display 7 se gmentos se encuentra en TRES MIL OCHOCIENTOS TREINT AIOCHO y además las ventanas de ingreso (derecha) se encuent ra codificado con AA003838 y salida (izquierda) de información en el protocolo RS232 se encuentran cod ificado con $$3838.

Finalmente podemos visualizar la ventana del Comman d Window que informa Fin comunicación RS232 con PROTEUS reciba la información desde MATLAB.

Page 10: Matlab y Comunicacion Rs232 Con Proteus

Se muestra el programa MicroCode Studio que servirá para la creación del algoritmo que deberá ser grab ado en el microcontrolador PIC16F877A que se implem entó en PROTEUS. El

procedimiento de grabación virtual se muestra línea s abajo, se debe considerar que si se desea la impl ementación del hardware se deberá contar con una ta rjeta electrónica grabadora de PIC y el programa PICKit2 se debe utilizar para realizar la grabación física en el microcontrolador .

Con la apertura el programa MicroCode Studio se pue de visualizar las líneas del algoritmo implementado para ser grabado en el microcontrolador PIC16F877A . Estas líneas de

programación también se encuentran publicadas en es te documento.

Page 11: Matlab y Comunicacion Rs232 Con Proteus

Aquí se muestra el programa MicroCode Studio realiz ando la selección del microcontrolador a utilizar ( PIC16F877A), una vez realizada esta selección se de berá de compilar las líneas del

algoritmo pues se debe recordar que el microcontrol ador solo entiende UNOS y CEROS, no comprende las l íneas escritas.

En este paso se muestra la compilación de las línea s del algoritmo desarrollado, este proceso creara u n archico del tipo ASM que se muestra en la siguien te figura.

Page 12: Matlab y Comunicacion Rs232 Con Proteus

Aquí apreciamos que una vez que compilamos el archi vo DME tipo ASM del programa MicroCode Studio se cr eara el archivo DME tipo HEX que es el que deberá s er grabado en el

microcontrolador PIC16F877A

Aquí apreciamos el primer paso de la forma virtual de grabar el archivo DME del tipo HEX dentro del mi crocontrolador PIC16F877A

Page 13: Matlab y Comunicacion Rs232 Con Proteus

Aquí apreciamos el segundo paso de la forma virtual de grabar el archivo DME del tipo HEX dentro del m icrocontrolador PIC16F877A, se selecciona el archiv o y se da click en Abrir

A continuación se presenta las líneas de programación en MATLAB que deben realizar la comunicación RS232 con PROTEUS, posteriormente están publicadas

las líneas del programa MicroCode Studio para ser utilizado en el microcontrolador PIC16F877A.

Page 14: Matlab y Comunicacion Rs232 Con Proteus

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Programa que permite la comunicacion RS232 entre MATLAB y PROTEUS % Se podra visualizar el envio de un codigo numeric o de cuatro cifras % INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; % Limpiamos el Workspace clc; % Limpiamos el Command Window close all ; % Cerramos todo SerPIC = serial( 'COM2' ); % Se selecciona el COM2 set(SerPIC, 'BaudRate' ,4800); % Define velocidad set(SerPIC, 'DataBits' ,8); % Define numero de bits serPIC.Terminator= 'CR' ; % Comunicacion constante sin caracter de terminacio n set(SerPIC, 'Parity' , 'none' ); % Sin paridad set(SerPIC, 'StopBits' ,1); % Numero de bits de stop 1 set(SerPIC, 'FlowControl' , 'none' ); % Sin control de hardware, o software %Send (RTS) and Clear to Send (CTS) pins to control data flow. fopen(SerPIC); % Abre el puerto RS232 fprintf( '\nPresiona Enter para iniciar la transmision RS232 \n' ) pause % La pausa se levantara al presionar ENTER % Se inicia leyendo el puerto durante un determinad o tiempo de comprobacion de Inicio for j=1:1:500 % Conteo de inicio %fwrite(SerPIC,'AA000000\n') % Envia la tr ama de 8 caracteres puerto serie con las 4 cifras %fwrite(SerPIC,[j]) % Envia la tram a con las cifras de la matriz j fprintf(SerPIC, 'AA000011' ) % Envia la trama de 8 caracteres puerto serie c end % Continua leyendo el puerto durante un determinado tiempo adicional pause(1) % Pausa para poder visualizar digitos correctos for i=1:1:5 % Para tiempo de lectura %fwrite(SerPIC,'AA001238\n') % Envia la trama de 8 caracteres puerto serie con las 4 ci fras fprintf(SerPIC, 'AA001238' ) % Envia la trama de 8 caracteres puerto serie con l as 4 cifras pause(2) % Pausa para poder visualizar los digitos correctos fprintf(SerPIC, 'AA002112' ) % Envia la trama de 8 caracteres puerto serie con l as 4 cifras %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%Estas lineas se pueden activar para solo visualiz ar mensajes en el Virtual Terminal RS232 de PROTEUS %% %fprintf(SerPIC,'%1s%1s%1s%1s%1s%1s%1s%1s\n','A','A ','0','0','1','2','3','9'); %fprintf(SerPIC,'%s4') % Envia e l 4 en byte al puerto serie %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% pause(0.1) fgets(SerPIC) % Mantenemos abierto el puerto RS232 %A = fread(SerPIC,1) % Lee el buffer de com (lee el puerto serie)

Page 15: Matlab y Comunicacion Rs232 Con Proteus

%pause(0.1) % Pausa para que el puerto termine de llenar el buffer par a la siguiente lectura end fprintf(SerPIC, 'AA003838' ) % Envia la trama de cierre de puerto serie con 4 ci fras (3838) fprintf(SerPIC, 'FIN COMUNICACION RS232' ) % Envia ultimo mensaje de termino de comunicacion R S232 fclose(SerPIC); % Cerramos el puerto RS232 delete(SerPIC) % Borramos el puerto RS232 abierto clear SerPIC % Se limpia el puerto para un nuevo envio clear; % Limpiamos el Workspace clc; % Limpiamos el Command Window close all ; % Cerramos todo fprintf( '\n Fin comunicacion RS232 \n' ) % Se envia termino de comunicacion RS232 al Command Window de MATLAB

Page 16: Matlab y Comunicacion Rs232 Con Proteus

'******************************************************************************* '* Name : DME.BAS * '* Author : ING ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS * '* Notice : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 05/09/2013 * '* Version : 1.0 * '* Notes : Conteo 0 a 9999 con el PIC16F877A y cuatro decoder BCD a siete * '* segmentos 74LS47 (Logica negativa) * '* El codigo convenido esta dado por: * '* AA00 abcd = Reset y AA01 abcd = Indicacion numerica * '******************************************************************************* define osc 4 TRISB = 0 'Declaramos el PORTB como salida PORTB = 0 'Seteamos el PORTB a cero TRISC.6 = 0 'Declaramos el PORTC.6 como salida (Tx Serial) TRISC.7 = %1 'Declaramos el puerto C.7 como entrada serial TRISD = 0 'Declaramos el PORTD como salida PORTD = 0 'Seteamos el PORTD a cero 'Variables para recepcionar la trama acordada y1 VAR BYTE y2 VAR BYTE y3 VAR BYTE y4 VAR BYTE y5 var byte y6 var byte y7 var byte y8 var byte 'Variables para armar la informacion de distancia a ser presentada en los displays DATO VAR word 'Variable para recomposicion polinomica de distancia DATO1 VAR BYTE 'Variable para primer caracter de unidades DATO2 VAR BYTE 'Variable para primer caracter de decenas DATO3 VAR BYTE 'Variable para primer caracter de centenas DATO4 VAR BYTE 'Variable para primer caracter de millares B1 VAR BYTE 'Variables para asignar la salida de cada digito de la informacion de distancia unidad var byte 'Variable para el digito de Unidades decena var byte 'Variable para el digito de Decenas centena var byte 'Variable para el digito de Centenas millar var byte 'Variable para el digito de Millares un0 var unidad.0 'un0 es el bit cero de unidad un1 var unidad.1 'un1 es el bit uno de unidad un2 var unidad.2 'un2 es el bit dos de unidad un3 var unidad.3 'un3 es el bit tres de unidad de0 var decena.0 'de0 es el bit cero de decena de1 var decena.1 'de1 es el bit uno de decena de2 var decena.2 'de2 es el bit dos de decena de3 var decena.3 'de3 es el bit tres de decena

Page 17: Matlab y Comunicacion Rs232 Con Proteus

ce0 var centena.0 'ce0 es el bit cero de centena ce1 var centena.1 'ce1 es el bit uno de centena ce2 var centena.2 'ce2 es el bit dos de centena ce3 var centena.3 'ce3 es el bit tres de centena mi0 var millar.0 'mi0 es el bit cero de millar mi1 var millar.1 'mi1 es el bit uno de millar mi2 var millar.2 'mi2 es el bit dos de millar mi3 var millar.3 'mi3 es el bit tres de millar INICIO: 'Recepcion serial a 9600 Baudios (84) 'Recepcion serial a 4800 Baudios (188) 'Recordar: (y1=A); (y2=A); (y3=0); (y4=0 o y4=1) Son parametros rigidos de la trama 'Mientras y5, y6, y7, y8 representan caracteres numericos de la trama SERIN2 PORTC.7,188,10,NO_DATO,[y1,y2,y3,y4,y5,y6,y7,y8,B1] 'Recordar Codigo ASCII en hexadecimal: $41=A; $30=0; $31=1 IF y1=$41 AND y2=$41 AND y3=$30 AND y4=$30 THEN RESET 'Trama: AA00 IF y1=$41 AND y2=$41 AND y3=$30 AND y4=$31 THEN VARIABLES 'Trama: AA01 GOTO INICIO 'Etiqueta para resetear el sistema a CERO RESET: 'DATO4=0 'DATO3=0 'DATO2=0 'DATO1=0 'GOTO CALCULO goto VARIABLES 'Etiqueta para asignar valores de la informacion numerica VARIABLES: if y5=$30 then DATO4=0 if y5=$31 then DATO4=1 if y5=$32 then DATO4=2 if y5=$33 then DATO4=3 if y5=$34 then DATO4=4 if y5=$35 then DATO4=5 if y5=$36 then DATO4=6 if y5=$37 then DATO4=7 if y5=$38 then DATO4=8 if y5=$39 then DATO4=9 if y6=$30 then DATO3=0 if y6=$31 then DATO3=1 if y6=$32 then DATO3=2 if y6=$33 then DATO3=3 if y6=$34 then DATO3=4 if y6=$35 then DATO3=5 if y6=$36 then DATO3=6 if y6=$37 then DATO3=7 if y6=$38 then DATO3=8 if y6=$39 then DATO3=9

Page 18: Matlab y Comunicacion Rs232 Con Proteus

if y7=$30 then DATO2=0 if y7=$31 then DATO2=1 if y7=$32 then DATO2=2 if y7=$33 then DATO2=3 if y7=$34 then DATO2=4 if y7=$35 then DATO2=5 if y7=$36 then DATO2=6 if y7=$37 then DATO2=7 if y7=$38 then DATO2=8 if y7=$39 then DATO2=9 if y8=$30 then DATO1=0 if y8=$31 then DATO1=1 if y8=$32 then DATO1=2 if y8=$33 then DATO1=3 if y8=$34 then DATO1=4 if y8=$35 then DATO1=5 if y8=$36 then DATO1=6 if y8=$37 then DATO1=7 if y8=$38 then DATO1=8 if y8=$39 then DATO1=9 GOTO CALCULO 'Etiqueta para realizar el calculo de la informacion numerica y visualizarlo en los displays CALCULO: DATO = (DATO4*1000)+(DATO3*100)+(DATO2*10)+(DATO1*1) 'Recomposicion polinomica de DATO millar=DATO/1000 'Resultado para el decoder de los Millares centena=(DATO-millar*1000)/100 'Resultado para el decoder de las Centenas decena=((DATO-millar*1000)-centena*100)/10 'Resultado para el decoder de las Decenas unidad=((DATO-millar*1000)-centena*100)-decena*10 'Resultado para el decoder de las Unidades PORTD.4=mi0 PORTD.5=mi1 PORTD.6=mi2 PORTD.7=mi3 PORTD.0=ce0 PORTD.1=ce1 PORTD.2=ce2 PORTD.3=ce3 PORTB.4=de0 PORTB.5=de1 PORTB.6=de2 PORTB.7=de3 PORTB.0=un0 PORTB.1=un1 PORTB.2=un2 PORTB.3=un3 'Transmision serial a 9600 Baudios (84) 'Transmision serial a 4800 Baudios (188) serout2 PORTC.6,188,["$","$",dec4 dato,10,13] 'Transmision serial para confirmar la salida goto INICIO

Page 19: Matlab y Comunicacion Rs232 Con Proteus

no_dato: goto INICIO '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'DISPOSICION DE LOS TERMINALES DEL DISPLAY DE ANODO COMUN DE 2 cm ' ' a g f Co a b ' --------- . . . . . ' | | ' f | | b ' | g | ' --------- ' | | ' e | | c ' | | . . . . . ' --------- o e d Co c pto ' d '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'DISPOSICION DE LOS TERMINALES DEL DISPLAY DE ANODO COMUN DE 1 cm ' ' a b Co f ' --------- . . . ' | | a g ' f | | b . . ' | g | ' --------- c d ' | | . . ' e | | c ' | | . . . ' --------- o pto Co e ' d ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Espero que esta aplicación sea de mucha utilidad y de seguro debera tener mejoras, las que posteriormente estare publicando. Gracias

Ingeniero Electronico Monteza Zevallos Fidel Tomas

V.J.M.J.