You are on page 1of 19

ALGORITMO EN MATLAB DE COMUNICACIN RS232 CON PROTEUS 7.

6
(Se utiliza Virtual Serial Ports Driver XP4 y MicroCode Studio)



Ingeniero Electrnico: Monteza Zevallos Fidel Tomas





En esta oportunidad presento lneas abajo la programacin en MATLAB el algoritmo de comunicacin directamente con PROTEUS Esta comunicacin se
reali!a mediante el protocolo de comunicacin 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 electrnico implementado con PROTEUS se debe tener en
cuenta )ue deber* utili!ar el programa Micro+ode Studio para con,eccionar las lneas del algoritmo )ue reali!ara el trabajo de )ue el microcontrolador
P-+./0122A pueda recibir 3 en$iar in,ormacin con el protocolo RS"#"
Solo deber* copiar 3 pegar todas las lneas de programacin en el respecti$o arc4i$o de MATLAB 3 ejecutar la simulacin5 este pro3ecto comparado con el
publicado con el ttulo 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 comunicacin
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 operacin 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 lneas 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 aplicacin paso a paso
-gualmente las lneas 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 compilacin 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 cmo 4acerlo 3 espero )ue sir$a para a3udar a otros in$estigadores
Posteriormente seguir: publicando lneas de programacin en MATLAB de di$ersas aplicaciones como Sistema ;ra$itacional5 -nteraccin de partculas5
+inem*tica &irecta 3 +inem*tica -n$ersa para robtica5 3 con muc4a m*s dedicacin la +omunicacin RS"#" con microcontroladores5 etc
En la siguiente publicacin 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 creacin de puertos virtuales RS232




Se apertura el programa VIRTUAL SERIAL PORT DRIVER XP4 y utilizamos el men para la creacin 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 comunicacin RS232 con el programa VIRTUAL SERIAL PORT DRIVER XP4 lo cerramos






Aqu se muestra el circuito electrnico confeccionado en el programa PROTEUS 7.6, considerar el diseo en hardware tal como se encuentra el circuito mostrado.




Aqu podemos visualizar la ventana con el circuito electrnico del microcontrolador PIC16F877A del programa PROTEUS. Note que el contador display 7 segmentos se encuentra en
CERO y adems las ventanas de ingreso (derecha) y salida (izquierda) de informacin en el protocolo RS232 se encuentran vacas.






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 lneas del algoritmo desarrollado para la comunicacin RS232. Las lneas en detalle figuran lneas abajo y se
encuentran comentadas





Aqu podemos visualizar tanto la ventana Editor de MATLAB en el instante de iniciar la simulacin, en este caso no tengo mi carpeta reconocida por MATLAB as que se inicie la
comunicacin RS232 se debe ejecutar Add to Path.






Aqu podemos visualizar la ventana del Command Window que solicita ejecutar ENTER para que PROTEUS reciba la informacin desde MATLAB.




Aqu podemos visualizar solo la ventana con el circuito electrnico del microcontrolador PIC16F877A del programa PROTEUS en pleno proceso de recibir la primera informacin
numrica de confirmacin de inicio de la comunicacin desde MATLAB. Note que el contador display 7 segmentos se encuentra en ONCE y adems las ventanas de ingreso (derecha) se
encuentra codificado con AA000011 y salida (izquierda) de informacin en el protocolo RS232 se encuentran codificado con $$0011.







Aqu podemos ahora visualizar la ventana con el circuito electrnico del microcontrolador PIC16F877A del programa PROTEUS en pleno proceso de recibir la segunda informacin
numrica desde MATLAB. Note que el contador display 7 segmentos se encuentra en MIL DOSCIENTOS TREINTAIOCHO y adems las ventanas de ingreso (derecha) se encuentra
codificado con AA001238 y salida (izquierda) de informacin en el protocolo RS232 se encuentran codificado con $$1238.




Aqu podemos ahora visualizar la ventana con el circuito electrnico del microcontrolador PIC16F877A del programa PROTEUS en pleno proceso de recibir la tercera informacin
numrica desde MATLAB. Note que el contador display 7 segmentos se encuentra en DOS MIL CIENTO DOCE y adems las ventanas de ingreso (derecha) se encuentra codificado con
AA002112 y salida (izquierda) de informacin en el protocolo RS232 se encuentran codificado con $$2112.






Aqu podemos ahora visualizar la ventana con el circuito electrnico del microcontrolador PIC16F877A del programa PROTEUS en pleno proceso de recibir la ltima informacin
numrica desde MATLAB de comprobacin de trmino de la comunicacin. Note que el contador display 7 segmentos se encuentra en TRES MIL OCHOCIENTOS TREINTAIOCHO y
adems las ventanas de ingreso (derecha) se encuentra codificado con AA003838 y salida (izquierda) de informacin en el protocolo RS232 se encuentran codificado con $$3838.




Finalmente podemos visualizar la ventana del Command Window que informa Fin comunicacin RS232 con PROTEUS reciba la informacin desde MATLAB.






Se muestra el programa MicroCode Studio que servir para la creacin del algoritmo que deber ser grabado en el microcontrolador PIC16F877A que se implement en PROTEUS. El
procedimiento de grabacin virtual se muestra lneas abajo, se debe considerar que si se desea la implementacin del hardware se deber contar con una tarjeta electrnica grabadora
de PIC y el programa PICKit2 se debe utilizar para realizar la grabacin fsica en el microcontrolador.




Con la apertura el programa MicroCode Studio se puede visualizar las lneas del algoritmo implementado para ser grabado en el microcontrolador PIC16F877A. Estas lneas de
programacin tambin se encuentran publicadas en este documento.








Aqu se muestra el programa MicroCode Studio realizando la seleccin del microcontrolador a utilizar (PIC16F877A), una vez realizada esta seleccin se deber de compilar las lneas del
algoritmo pues se debe recordar que el microcontrolador solo entiende UNOS y CEROS, no comprende las lneas escritas.




En este paso se muestra la compilacin de las lneas 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 continuacin se presenta las lneas de programacin en MATLAB )ue deben reali!ar la comunicacin RS"#" con PROTEUS5 posteriormente est*n publicadas
las lneas 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 aplicacin 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?

You might also like