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 En esta oportunidad presento líneas abajo la programación en MATLAB el algoritmo de comunicación directamente con PROTEUS Esta comunicación se reali!a mediante el protocolo de comunicación RS"#" utili!ando puertos creados $irtualmente con el programa %irtual Serial Ports &ri$er 'P( MATLAB utili!a el puerto $irtual " mientras )ue PROTEUS utili!a el puerto $irtual # En el circuito electrónico implementado con PROTEUS se debe tener en cuenta )ue deber* utili!ar el programa Micro+ode Studio para con,eccionar las líneas del algoritmo )ue reali!ara el trabajo de )ue el microcontrolador P-+./0122A pueda recibir 3 en$iar in,ormación con el protocolo RS"#" Solo deber* copiar 3 pegar todas las líneas de programación en el respecti$o arc4i$o de MATLAB 3 ejecutar la simulación5 este pro3ecto comparado con el publicado con el título ALGORITMO DE ENLACE VISUAL BASIC 6.0 CON PROTEUS 7.6 es m*s ,*cil de implementar puesto )ue si 3a tiene ejecutado el pro3ecto en PROTEUS solo debe ejecutar MATLAB 3 este reali!ara autom*ticamente la comunicación La idea es demostrar )ue mientras se tenga un 4ard6are 3a implementado 7El microcontralador P-+./0122A 3a programado8 cual)uier programa )ue se implemente para su operación 3 ,uncionamiento ser* posible En el pro3ecto ALGORITMO DE ENLACE VISUAL BASIC 6.0 CON PROTEUS 7.6 se debió tener muc4o cuidado en dar los $alores correspondientes de cada 4erramienta en la %entana de Propiedades como por ejemplo cambiar los nombres de cada +ommand de acuerdo las líneas programadas5 el inter$alo del Timer.5 el inter$alo del Timer" 3 el inter$alo del Timer # )ue debieron ser colocados adecuadamente Para esto se ane9an las respecti$as ,iguras demostrando su aplicación paso a paso -gualmente las líneas del algoritmo correspondiente al programa Micro+ode Studio se publican en este trabajo5 solo deber* copiarlas 3 pegarlas en el programa respecti$o para ejecutar su compilación tal como se e9plica en cada una de las ,iguras adjuntadas El tiempo )ue se pueda dedicar a este pro3ecto es mu3 importante5 tengo la idea de cómo 4acerlo 3 espero )ue sir$a para a3udar a otros in$estigadores Posteriormente seguir: publicando líneas de programación en MATLAB de di$ersas aplicaciones como Sistema ;ra$itacional5 -nteracción de partículas5 +inem*tica &irecta 3 +inem*tica -n$ersa para robótica5 3 con muc4a m*s dedicación la +omunicación RS"#" con microcontroladores5 etc En la siguiente publicación estar: comentando acerca de un programa desarrollado en S-MUL-<= de MATLAB sobre temas de +ontrol5 toda una no$edad5 estar atentos Se muestra el programa VIRTUAL SERIAL PORT DRIVER XP4 que servirá para la creación de puertos virtuales RS232 Se apertura el programa VIRTUAL SERIAL PORT DRIVER XP4 y utilizamos el menú para la creación de puertos 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) Una vez establecido los puertos virtuales de comunicación RS232 con el programa VIRTUAL SERIAL PORT DRIVER XP4 lo cerramos Aquí se muestra el circuito electrónico confeccionado en el programa PROTEUS 7.6, considerar el diseño en hardware tal como se encuentra el circuito mostrado. Aquí podemos visualizar la ventana con el circuito electrónico del microcontrolador PIC16F877A del programa PROTEUS. Note que el contador display 7 segmentos se encuentra en CERO y además las ventanas de ingreso (derecha) y salida (izquierda) de información en el protocolo RS232 se encuentran vacías. Aquí podemos visualizar igualmente la ventana de MATLAB y en ella la del Command Window con la que deberá seguir los pasos que se soliciten. Aquí podemos visualizar en MATLAB la ventana Editor en donde figura las líneas del algoritmo desarrollado para la comunicación RS232. Las líneas en detalle 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. Aquí podemos visualizar la ventana del Command Window que solicita ejecutar ENTER para que PROTEUS reciba la información desde MATLAB. Aquí podemos visualizar solo la ventana con el circuito electrónico del microcontrolador PIC16F877A del programa PROTEUS en pleno proceso de recibir la primera información numérica de confirmación de inicio de la comunicación desde MATLAB. Note que el contador display 7 segmentos se encuentra en ONCE y además las ventanas de ingreso (derecha) se encuentra codificado con AA000011 y salida (izquierda) de información en el protocolo RS232 se encuentran codificado con $$0011. Aquí podemos ahora visualizar la ventana con el circuito electrónico del microcontrolador PIC16F877A del 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 TREINTAIOCHO y además las ventanas de ingreso (derecha) se encuentra codificado con AA001238 y salida (izquierda) de información en el protocolo RS232 se encuentran codificado con $$1238. Aquí podemos ahora visualizar la ventana con el circuito electrónico del microcontrolador PIC16F877A del 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 encuentra codificado con AA002112 y salida (izquierda) de información en el protocolo RS232 se encuentran codificado con $$2112. Aquí podemos ahora visualizar la ventana con el circuito electrónico del microcontrolador PIC16F877A del 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 segmentos se encuentra en TRES MIL OCHOCIENTOS TREINTAIOCHO y además las ventanas de ingreso (derecha) se encuentra codificado con AA003838 y salida (izquierda) de información en el protocolo RS232 se encuentran codificado con $$3838. Finalmente podemos visualizar la ventana del Command Window que informa Fin comunicación RS232 con PROTEUS reciba la información desde MATLAB. Se muestra el programa MicroCode Studio que servirá para la creación del algoritmo que deberá ser grabado en el microcontrolador PIC16F877A que se implementó en PROTEUS. El procedimiento de grabación virtual se muestra líneas abajo, se debe considerar que si se desea la implementación del hardware se deberá contar con una tarjeta 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 puede 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 este documento. Aquí se muestra el programa MicroCode Studio realizando la selección del microcontrolador a utilizar (PIC16F877A), una vez realizada esta selección se deberá de compilar las líneas del algoritmo pues se debe recordar que el microcontrolador solo entiende UNOS y CEROS, no comprende las líneas escritas. En este paso se muestra la compilación de las líneas del algoritmo desarrollado, este proceso creara un archico del tipo ASM que se muestra en la siguiente figura. Aquí apreciamos que una vez que compilamos el archivo DME tipo ASM del programa MicroCode Studio se creara el archivo DME tipo HEX que es el que deberá ser grabado en el microcontrolador PIC16F877A Aquí apreciamos el primer paso de la forma virtual de grabar el archivo DME del tipo HEX dentro del microcontrolador PIC16F877A Aquí apreciamos el segundo paso de la forma virtual de grabar el archivo DME del tipo HEX dentro del microcontrolador PIC16F877A, se selecciona el archivo y se da click en Abrir A continuación se presenta las líneas de programación en MATLAB )ue deben reali!ar la comunicación RS"#" con PROTEUS5 posteriormente est*n publicadas las líneas del programa Micro+ode Studio para ser utili!ado en el microcontrolador P-+./0122A %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Programa que permite la comunicacion RS232 entre MATLAB y PROTEUS % Se podra visualizar el envio de un codigo numerico 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 terminacion 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 determinado tiempo de comprobacion de Inicio for j=1:1:500 % Conteo de inicio %fwrite(SerPIC,'AA000000\n') % Envia la trama de 8 caracteres puerto serie con las 4 cifras %fwrite(SerPIC,[j]) % Envia la trama 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 cifras fprintf(SerPIC,'AA001238') % Envia la trama de 8 caracteres puerto serie con las 4 cifras pause(2) % Pausa para poder visualizar los digitos correctos fprintf(SerPIC,'AA002112') % Envia la trama de 8 caracteres puerto serie con las 4 cifras %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%Estas lineas se pueden activar para solo visualizar 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 el 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) %pause(0.1) % Pausa para que el puerto termine de llenar el buffer para la siguiente lectura end fprintf(SerPIC,'AA003838') % Envia la trama de cierre de puerto serie con 4 cifras (3838) fprintf(SerPIC,'FIN COMUNICACION RS232') % Envia ultimo mensaje de termino de comunicacion RS232 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 '******************************************************************************* '* 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 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 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 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 )ue esta aplicación sea de muc4a utilidad 3 de seguro debera tener mejoras5 las )ue posteriormente estare publicando ;racias -ngeniero Electronico Monte!a >e$allos 0idel Tomas %?M?