Sie sind auf Seite 1von 25

30/5/2015

PIC-PC RS232 C++

DISPOSITIVOS LGICOS MICROPROGRAMABLES


ndice / Introduccin

PIC-PC RS232 C++

Ampliacin de contenidos

PIC-PC RS232 C++


Por terminar. Falta desarrollar el proyecto 4.

Introduccin
En este tema se desarrollan varios proyectos de comunicacin por el puerto
serie COM RS232 de un PC y un PIC16F84A. El PIC se programa en ASM con
MPLAB. Los programas de comunicacin en el PC se desarrollan bajo Windows
con Borland C++ Builder 6 Enterprise y el componente TComPort.
Para comprobar los proyectos mediante simulacin en el PC necesitamos:
Aplicaciones que utilicen el puerto serie, en nuestro caso en C++.
2 pares de puertos serie virtuales interconectados.
Proteus 7.7 SP2 con el componente COMPIM.

Para el primer punto se han desarrollados varios proyectos de comunicacin


desarrollados con Borland C++ Builder.
Para los dos ltimos puntos debemos tener instalados puertos serie virtuales
interconectados, y un puerto virtual en Proteus. Ver Puerto serie virtual VSPD y
COMPIM de Proteus.
Podemos comprobar que se han creado los puertos virtuales con el
Administrador de dispositivos (Inicio / Panel de Control / Sistema / Hardware /
Administrador de dispositivos / Puertos (COM & LPT).

http://perso.wanadoo.es/pictob/picrs232cpp.htm

1/25

30/5/2015

PIC-PC RS232 C++

Podemos ejecutar ELTIMA VSP desde el men Inicio / Eltima Software / Virtual
Serial Port Driver / Configure Virtual Serial Port Driver.

Podemos probar la comunicacin con Hyperterminal de Windows ver de Puerto


serie virtual VSPD y COMPIM de Proteus la parte que trata sobre Hyperterminal.
http://perso.wanadoo.es/pictob/picrs232cpp.htm

2/25

30/5/2015

PIC-PC RS232 C++

Proyectos de comunicacin desarrollados con


Borland C++ Builder
Se han realizado 4 proyectos de comunicacin PC-PIC (01, 02, 03 y 04). En cada
uno puede haber varias versiones (a, b, c ...).
PIC-PC
PIC-PC
PIC-PC
PIC-PC

RS232 C++ 01.


RS232 C++ 02.
RS232 C++ 03.
RS232 C++ 04.

"Hola mundo" del PIC al PC.


Control de salidas del PIC. Puerto B, 1 bit de 8.
Control de salidas del PIC. Puerto B, bit a bit.
Enviar al PC estado de RB4 a RB7.

Archivos necesarios
Los archivos necesarios se descargan de:
picpcrs232cpp/01.rar
picpcrs232cpp/02.rar
picpcrs232cpp/03.rar
picpcrs232cpp/picmonitor.rar
Los descargamos y creamos un directorio de trabajo, por ejemplo, c:\picpc\,
dentro descomprimimos los archivos.
Cada proyecto contiene, al menos:
Archivos fuente y ejecutables para Borland C++ Builder 6. Es necesario
tener instalado Borland C++ Builder 6 si se desea trabajar con los
ejemplos. En Borland debe incluirse el componente TComport. A destacar
que en las ltimas versiones de Borland parece que no puede utilizarse el
componente TComport.
Un archivo DSN de Proteus con el PIC y el programa HEX listo para su
simulacin. Es necesario tener instalado Proteus 7.7 SP2.
El proyecto en MPLAB con el ASM del PIC. Es necesario tener instalada
MPLAB 8.5 o superior.
La estructura de directorios de prg/picpcrs232cpp es:
picpcrs232cpp\
\01\("Hola mundo" del PIC al PC)
\cpp_a\
\cpp_b\
\cpp_c\
\mplab\
\proteus\
\02\(Salida PIC 1 bit de 8)
\cpp_a\
\cpp_b\
\mplab\
\proteus_a\
\proteus_b\
\03\(Salida PIC 8 bits)
\cpp_a\
\cpp_b\ (Con DTR/DSR)
\cpp_c\
\mplab\
http://perso.wanadoo.es/pictob/picrs232cpp.htm

3/25

30/5/2015

PIC-PC RS232 C++

\proteus_a\
\04\(Entrada PIC 4 bits)
por terminar

01cpp_a
El PIC enva un "Hola mundo" al PC. Se trata de un programa en C++ para
recibir por el puerto de comunicaciones serie COM de un PC el mensaje ASCII
"Hola mundo" desde un PIC cada vez que este se reinicia, basado en el
"Ejemplo 1. Enviar un mensaje del PIC al PC". Los archivos de este proyecto
son: 01\cpp_a\, 01\mplab\ y 01\proteus\.
Interface del programa:

Uso del programa:


Configurar: Elige el puerto y su configuracin.
Abrir: Abre el puerto para que pueda recibir y/o enviar datos.
Cerrar: Cierra el puerto.
Cuadro de texto: La aplicacin del PIC debe enviar un "Hola mundo" si
existe comunicacin y no hay problemas.
Crear la interface grfica
Vamos al directorio 01\ y creamos la carpeta cpp_a_prac\, donde
desarrollaremos el primer programa en C++. Conviene dejar tal cual el
contenido desescargado y desarrollar nuestros propios programas desde cero en
nuevos directorios del tipo cpp_a_prac\.
Iniciamos Borland y establecemos sus propiedades. En el Object Inspector,
Properties del form:
Caption = PIC RS232 Hola Mundo
ClientHeight = 70
ClientWidth = 272
BorderStyle = bsSingle
BorderIcons: biMaximize = false
Este es un buen momento para salvar el proyecto (File / Save Project as) en
01\cpp_a_prac\
Unit = Unit1.cpp
Project = picrs232hola.bpr
De la paleta de componentes (pestaa CPortLib) insertamos ComPort, as
incorporamos sus mtodos, eventos y propiedades a nuestro proyecto.
http://perso.wanadoo.es/pictob/picrs232cpp.htm

4/25

30/5/2015

PIC-PC RS232 C++

Realmente no importa donde se coloque, es un componente invisible en tiempo


de ejecucin. Se nombrar por defecto como ComPort1. Podemos colocar mas
si vamos a asignarlos a otros puertos. Colocamos 3 botones y un cuadro de
texto.

En el Object Inspector, Properties:


Botn Configurar:
Name = ButtonConfigurar
ButtonConfigurar->Caption = "Configurar"
TabOrder = 0
Botn Abrir:
Name = ButtonAbrir
ButtonAbrir->Caption = "Abrir"
TabOrder = 1
Botn Cerrar:
Name = ButtonCerrar
ButtonCerrar->Caption = "Cerrar"
TabOrder = 2
Cuadro de texto:
Edit1->Text = "" (nada)
TabOrder = 3
Compilamos con F9 o

para ver si hay errores.

Programar botones
Doble click en botn "Configurar":
//-------------------------------------------------------------------------void __fastcall TForm1::ButtonConfigurarClick(TObject *Sender)
{
ComPort1->ShowSetupDialog();
}
//-------------------------------------------------------------------------Doble click en botn "Abrir":
//-------------------------------------------------------------------------void __fastcall TForm1::ButtonAbrirClick(TObject *Sender)
{
ComPort1->Open();
}
http://perso.wanadoo.es/pictob/picrs232cpp.htm

5/25

30/5/2015

PIC-PC RS232 C++

//-------------------------------------------------------------------------Doble click en botn "Cerrar":


//-------------------------------------------------------------------------void __fastcall TForm1::ButtonCerrarClick(TObject *Sender)
{
ComPort1->Close();
}
//-------------------------------------------------------------------------Compilamos (F9) para ver errores. Salvamos todo con

Programar evento OnRxChar


Seleccionamos el componente ComPort1 y en el Object Inspector, pestaa
Events, seleccionamos OnRxChar. Doble clic en la lista desplegable del evento:
//-------------------------------------------------------------------------void __fastcall TForm1::ComPort1RxChar(TObject *Sender, int
Count)
{
AnsiString Str;
ComPort1->ReadStr(Str, Count);
Edit1->Text = Edit1->Text + Str;

}
//-------------------------------------------------------------------------Prueba del programa
Salvamos todo con

Compilamos con F9 o

Abrimos el archivo de Proteus 01\proteus. El PIC tiene que estar asociado al


archivo .hex de 01\mplab. El componente COMPIM de Proteus debe
configurarse como COM4, 4800 baudios, 8 bits, sin paridad, 2 bits de stop y sin
control de flujo.

http://perso.wanadoo.es/pictob/picrs232cpp.htm

6/25

30/5/2015

PIC-PC RS232 C++

Pulsamos el botn Configurar de nuestro programa y ponemos:

Pulsamos OK y abrimos el puerto con el botn Abrir.


Simulamos el archivo de Proteus.
El resultado debe ser:

http://perso.wanadoo.es/pictob/picrs232cpp.htm

7/25

30/5/2015

PIC-PC RS232 C++

Al iniciar el PIC o cada vez que se pulse el pulsador de reset se enviar el texto
"Hola mundo".
Al simular el esquema debe aparecer el componente COMPIM as:

Y debemos "ver" momentneamente la transmisin en TXD al iniciar la


simulacin y cada vez que se resetea al PIC con el pulsador:

http://perso.wanadoo.es/pictob/picrs232cpp.htm

8/25

30/5/2015

PIC-PC RS232 C++

Si hay algn problema, como que el puerto est abierto por otra aplicacin, el
COMPIM aparece as:

Podemos ejecutar ELTIMA VSP desde el men Inicio / Eltima Software / Virtual
Serial Port Driver / Configure Virtual Serial Port Driver para comprobar que
aplicacin tiene abierto el puerto:

http://perso.wanadoo.es/pictob/picrs232cpp.htm

9/25

30/5/2015

PIC-PC RS232 C++

Si en Proteus aparece este error:

Es porque el PIC no est correctamente asociado al programa .hex. Debemos


editar las propiedades del PIC, seleccionndolo, pulsando el botn secundario
del ratn y seleccionando Edit Properties. En Program File elegimos el .hex
adecuado (compimmplab.hex).
http://perso.wanadoo.es/pictob/picrs232cpp.htm

10/25

30/5/2015

PIC-PC RS232 C++

01cpp_b
Si en el programa desarrollado en "01cpp_a" pulsamos el botn Abrir antes de
configurar el puerto puede aparecer un error:

Esto puede ocurrir porque no se ha seleccionado ningn puerto COM, porque


est en uso o porque el PC no dispone de ninguno. Si el error no aparece ser
porque se ha tomado uno por defecto, normalmente COM1. De todos modos,
para solucionarlo debemos realizar una gestin de excepciones. Adems
podemos hacer que el botn Abrir est deshabilitado mientras no est
configurado el puerto.
Copiaremos el directorio
01\cpp_b_prac.

01\cpp_a_prac

lo

renombraremos

como

Hacemos doble click en el formulario para escribir cdigo en el evento


FormCreate:
//-------------------------------------------------------------------------http://perso.wanadoo.es/pictob/picrs232cpp.htm

11/25

30/5/2015

PIC-PC RS232 C++

void __fastcall TForm1::FormCreate(TObject *Sender)


{
ButtonAbrir->Enabled = false;
ButtonCerrar->Enabled = false;
}
//-------------------------------------------------------------------------Doble click en ButtonConfigurar:
//-------------------------------------------------------------------------void __fastcall TForm1::ButtonConfigurarClick(TObject *Sender)
{
ComPort1->ShowSetupDialog();
ButtonAbrir->Enabled = true;
}
//-------------------------------------------------------------------------Doble clikck en ButtonAbrir:
//-------------------------------------------------------------------------void __fastcall TForm1::ButtonAbrirClick(TObject *Sender)
{
try {
ComPort1->Open();
ButtonCerrar->Enabled = true;
}
catch( ... ) {
ShowMessage("Error al abrir puerto. Compruebe la
configuracin y que est disponible");
ButtonAbrir->Enabled = false;
}
}
//-------------------------------------------------------------------------Si provocamos un error, por ejemplo seleccionando un COM en uso (COM4 usado
por Proteus), aparecer un error capturado por el debugger:

Cuando aparece un error, recordemos que detenemos el programa con Run /


Progran Reset o Ctrl+F2.
http://perso.wanadoo.es/pictob/picrs232cpp.htm

12/25

30/5/2015

PIC-PC RS232 C++

Para que el programa gestione el error (y no el debugger de Borlad) y veamos el


funcionamiento de try catch, podemos configurarlo en Tools / Debugger
Options y desmarcar la opcin que aparece abajo, Integrated debugging.
Tambin podemos ejecutar el archivo .exe compilado:

Conviene incluir un LED que indique que el puerto est abierto. Para ello
insertamos un

. Y en FormCreate ponemos:

//-------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)


{
ComLed1->ComPort = ComPort1;
ComLed1->LedSignal = lsConn;
ComLed1->Kind = lkGreenLight;
ButtonAbrir->Enabled = false;
ButtonCerrar->Enabled = false;
}
//-------------------------------------------------------------------------El programa debe quedar as:

Distribuir el programa en otros equipos


Si realizamos los ejecutables desde cero, no funcionarn al copiarlos en otro
ordenador que no disponga de Builder apareciendo un error de falta de
paquetes .bpi.
Esto se debe a que faltan las libreras de apoyo al ejecutable (.bpl,.dll, etc.).
Una buena solucin es configurar Builder para que incluya las libreras de apoyo
en el propio ejecutable. Para conseguir que el proyecto funcione de nuevo hay
que cambiar la configuracin del tratamiento de paquetes y del enlazador.
Sigamos estos pasos:
1. Abrimos el proyecto y contestamos "cancelar" a cada paquete que se
solicite.
2. En la barra de men eligimos "Project" / "Options".
http://perso.wanadoo.es/pictob/picrs232cpp.htm

13/25

30/5/2015

PIC-PC RS232 C++

3. En la pestaa "Packages", desmarcamos "Build with runtime packages".


4. En la pestaa "Linker", desmarcamos "Use dynamic RTL".
5. Aceptamos y reconstruimos el proyecto ("Project" / "Build")

01cpp_c
En este caso vamos a utilizar un nico botn para abrir y cerrar el puerto.
Copiamos la carpeta 01\cpp_b_prac y la renombramos como 01\cpp_c_prac.
Primero borramos el cdigo asociado a ButtonCerrar. Despus borramos el
botn seleccionndolo y dndole a la tecla suprimir (seguir este orden o
quedarn referncia del botn que deberemos borrar a mano en el cdigo de
cabecera (.h) asociado a la unidad que estamos programando.
En ButtonAbrir ponemos:
//-------------------------------------------------------------------------void __fastcall TForm1::ButtonAbrirClick(TObject *Sender)
{
if (ComPort1->Connected)
{
ComPort1->Close();
}else
{
try {
ComPort1->Open();
}
catch( ... ) {
ShowMessage("Error al abrir puerto. Comprueba la
configuracin y que est disponible");
ButtonAbrir->Enabled = false;
}
}
}
//-------------------------------------------------------------------------En FormCreate eliminamos ButtonCerrar->Enabled = false;
Vamos a utilizar los eventos ComPort1AfterOpen y ComPort1AfterClose para
controlar el botn Abrir y Configurar:
//-------------------------------------------------------------------------void __fastcall TForm1::ComPort1AfterOpen(TObject *Sender)
{
ButtonAbrir->Caption = "Cerrar";
ButtonConfigurar->Enabled = false;
}
http://perso.wanadoo.es/pictob/picrs232cpp.htm

14/25

30/5/2015

PIC-PC RS232 C++

//-------------------------------------------------------------------------void __fastcall TForm1::ComPort1AfterClose(TObject *Sender)


{
ButtonAbrir->Caption = "Abrir";
ButtonConfigurar->Enabled = true;
}
//-------------------------------------------------------------------------El resultado:

ATENCIN: El siguiente cdigo producir un error justo al cerrar la aplicacin si


hemos configurado y abierto el puerto:
//-------------------------------------------------------------------------void __fastcall TForm1::ComPort1AfterClose(TObject *Sender)
{
ButtonAbrir->Caption = "Abrir";
ButtonConfigurar->Enabled = true;
}
//-------------------------------------------------------------------------Si estamos trabajando con Borland en modo depuracin (Debugger) y cerramos
la aplicacin aparecer:
Detenindose la ejecucin en:
//-------------------------------------------------------------------------void __fastcall TForm1::ComPort1AfterClose(TObject *Sender)
{
ButtonAbrir->Caption = "Abrir";
ButtonConfigurar->Enabled = true;
}
//-------------------------------------------------------------------------Si estamos ejecutndo el .exe de forma independiente (con Borland cerrado
fuera del Debugger), aparecer:
http://perso.wanadoo.es/pictob/picrs232cpp.htm

15/25

30/5/2015

PIC-PC RS232 C++

Esto es as porque estamos modificando la propiedad de un objeto (el botn)


cuando ya no existe. El evento ComPort1AfterClose se produce cuando se ha
destruido el formulario y por tanto se produce un error al operar con los
botones, que tampoco existen.
Podemos comprobarlo colocando un BreakPoint en el mdulo picrs232hola.cpp
en return 0:
//-------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
//-------------------------------------------------------------------------USEFORM("Unit1.cpp", Form1);
//-------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//-------------------------------------------------------------------------La solucin mas simple es:
//-------------------------------------------------------------------------void __fastcall TForm1::ComPort1AfterClose(TObject *Sender)
http://perso.wanadoo.es/pictob/picrs232cpp.htm

16/25

30/5/2015

PIC-PC RS232 C++

try {
ButtonAbrir->Caption = "Abrir";
ButtonConfigurar->Enabled = true;
}
catch ( ... )
{
}

}
//-------------------------------------------------------------------------Recordemos que slo podremos ver el efecto ejecutando el .exe fuera del
Debugger de Borland o configurando Borland para que no interceppte los
errores.

02cpp_a
El siguiente proyecto consiste en controlar desde el PC 8 salidas del PIC (el
puerto B) . Desde el programa en el PC podemos activar/desactivar mediante un
botn una salida del PIC. Slo se activa una salida cada vez (o ninguna) y el
PIC responde enviando un texto de estado. El programa esta basado en el
Ejemplo 2. Control desde PC. Los archivos de este proyecto son: 02\mplab\,
02\proteus_a\ y 02\cpp_a\.
El programa puede quedar as:
Uso del programa:
Configurar: Permite configurar el puerto.
Abrir Puerto/Cerrar Puerto: Abre o cierra el puerto.
Borrar salidas: Pone a 0 el puerto B del PIC.
Botones 0 a 7: Pone a 1 la salida del PIC correspondiente, RB0 a RB7.
En el campo de texto se recibe una confirmacin desde el PIC del estado
del puerto B.
Crear la interface grfica
Vamos a c:\picpc\picpcrs232cpp\02\ y creamos la carpeta cpp_a_prac\,
donde desarrollaremos el programa en C++. Para aprender, conviene dejar tal
cual el contenido de cpp_a\ y que desarrollemos el programa de C++ desde
cero en cpp_a_prac\. Iniciamos Borland y establecemos sus propiedades. En
el Object Inspector, Properties del form:
Caption = PIC RS232 Salidas
ClientHeight = 73
ClientWidth = 329
BorderStyle = bsSingle
BorderIcons: biMaximize = false
Colocamos un TComport, 11 botones y un campo de texto. Conviene colocarlos
http://perso.wanadoo.es/pictob/picrs232cpp.htm

17/25

30/5/2015

PIC-PC RS232 C++

segn el TabOrder.
En el Object Inspector, Properties:
Botn Configurar:
Name = ButtonConfigurar
ButtonConfigurar->Caption = "Configurar"
TabOrder = 0
Botn Abrir Puerto:
Name = ButtonAbrir
ButtonAbrir->Caption = "Abrir Puerto"
TabOrder = 1
Botn Borrar salidas:
Name = ButtonBorrar
ButtonBorrar->Caption = "Borrar salidas"
TabOrder = 2
Botones 0 a 7:
Name = Button0 a Button7
Caption = "0" a "7"
TabOrder = 3 a 10
Cuadro de texto:
Edit1->Text = "" (nada)
TabOrder = 11
Este es un buen momento para salvar el proyecto (File / Save Project as) en
02\cpp_a_prac\
Unit = Unit1.cpp
Project = picrs232sal.bpr
Compilamos con F9 o

para ver si hay errores.

Programa completo
El cdigo lo podemos ver en 02\cpp_a\.
Prueba del programa
Salvamos todo con

Compilamos con F9 o

Hay dos archivos de Proteus:


02\proteus_a:
02\proteus_b:
Ambos funcionan igual, la nica diferencia est en el uso de LED o de
indicadores lgicos en la versin b, que se ve mas clara. En ambos casos el PIC
tiene que estar asociado al archivo .hex de 02\mplab. El componente COMPIM
http://perso.wanadoo.es/pictob/picrs232cpp.htm

18/25

30/5/2015

PIC-PC RS232 C++

de Proteus debe configurarse como COM5, 9600 baudios, 8 bits, sin paridad, 2
bits de stop y sin control de flujo.
En el programa en C++ pulsamos el botn Configurar y ponemos la misma
configuracin que en Proteus pero para el COM5:
Pulsamos OK y abrimos el puerto con el botn Abrir.
Simulamos el archivo de Proteus.
El resultado debe ser:
Aparece un error al seguir esta secuencia ejecutando el EXE sin Borland:
1.
2.
3.
4.
5.
6.

Iniciar EXE.
Configurar puerto.
Abrir puerto.
Pulsar botn (pulsar 2 o 3). Si no se pulsa ningn botn, no hay error.
Cerrar programa.
Aqu se genera el ERROR.

En una mquina con Windows XP sin Borland funciona sin errores. A veces
aparece un error al pulsar un segundo bot. En el siguiente proyecto se d una
solucin.

02cpp_b
Este proyecto en una modificacin del anterior para solucionar el problema del
error al cierre del programa. Los archivos de este proyecto son: 02\mplab\,
02\proteus_b\ o 02\proteus_b\ y 02\cpp_b\.
Sabemos que el problema aparecer despus de utilizar el cdigo asignado a
cada botn:
//-------------------------------------------------------------------------void __fastcall TForm1::Button0Click(TObject *Sender)
{
AnsiString Str;
Edit1->Text=""; //Borra el texto para luego recibir y presentar
el nuevo
Str = "0";
ComPort1->WriteStr(Str); // Se enva el caracter "0" al puerto
}
//-------------------------------------------------------------------------Puesto que no es un string lo que debemos enviar sino un caracter, podemos
cambiar al siguiente cdigo, que funciona y no genera problemas:
//--------------------------------------------------------------http://perso.wanadoo.es/pictob/picrs232cpp.htm

19/25

30/5/2015

PIC-PC RS232 C++

-----------void __fastcall TForm1::Button0Click(TObject *Sender)


{
if (ComPort1->Connected)
{
Edit1->Text=""; //Borra el texto para luego recibir y
presentar el nuevo
DatoBin[0] = '0';
ComPort1->Write (DatoBin, 1); // Se enva el caracter '0' al
puerto
}
}
//-------------------------------------------------------------------------Previamente hay que definir como variable pblica:
//-------------------------------------------------------------------------unsigned char DatoBin[1];
//-------------------------------------------------------------------------Quedara por estudiar en profundidad el problema de 02\cpp_a.

02cpp_c
Modificacin de 02\cpp_b para incluir leds de estado. Los archivos de este
proyecto son: 02\mplab\, 02\proteus_c\ y 02\cpp_c\.
El programa puede quedar as:
Uso del programa:
Configurar: Permite configurar el puerto.
Abrir Puerto/Cerrar Puerto: Abre o cierra el puerto.
Borrar salidas: Pone a 0 el puerto B del PIC.
Botones 0 a 7: Pone a 1 la salida del PIC correspondiente, RB0 a RB7.
En el campo de texto se recibe una confirmacin desde el PIC del estado
del puerto B.
Los leds indican el estado del puerto, conectado, transmitiendo y
recibiendo.
Crear la interface grfica
Vamos a c:\picpc\picpcrs232cpp\02\. Para aprender, conviene dejar tal cual
el contenido de cpp_c\ y desarrollar el programa de C++ a partir de cpp_b\,
copiando esta carpeta y renombrndola como cpp_c_prac\.
http://perso.wanadoo.es/pictob/picrs232cpp.htm

20/25

30/5/2015

PIC-PC RS232 C++

Iniciamos Borland y abrimos el proyecto picrs232sal.bpr. Agrandamos el


formulario y recolocamos algunos botones y agrandamos el edit. Colocamos un
Panel y dentro, 7 TComLed y 7 Label.
Corregir posiciones de los label para centrarlos (lo seleccionamos y con CTRL y
las flechas del cursor los movemos).
En el Object Inspector, Properties:
Panel1->Caption = "" (nada).
En todos los ComLed en ComPort ponemos ComPort1 // El puerto a donde
se asigna el led
ComLed1->LedSignal = lsConn
ComLed2->LedSignal = lsTx
ComLed3->LedSignal = lsRx
ComLed4->LedSignal = lsCTS
ComLed5->LedSignal = lsDSR
ComLed6->LedSignal = lsRLSD (CD)
ComLed7->LedSignal = lsRing
Establecer la propiedad caption apropiada a las etiquetas.
Este es un buen momento para salvar el proyecto (File / Save Project as) en
02\cpp_c_prac\
Unit = Unit1.cpp
Project = picrs232sal.bpr
Compilamos con F9 o

para ver si hay errores.

Programa completo
Ver 02\mplab\, 02\proteus_c\ y 02\cpp_c\.
Prueba del programa
Abrimos el archivo de Proteus 02\proteus_c. El PIC tiene que estar asociado al
archivo .hex de 02\mplab. El componente COMPIM de Proteus debe
configurarse como COM5, 9600 baudios, 8 bits, sin paridad, 2 bits de stop y sin
control de flujo.
Pulsamos el botn Configurar de nuestro programa y ponemos la misma
configuracin pero para COM5, pulsamos OK y abrimos el puerto con el botn
Abrir.
Simulamos el archivo de Proteus 02\proteus_c\.
Hasta ahora solo hemos hecho uso de las seales TXD(salida, pat3) y
RXD(entrada, pat2), tal que la comunicacin sera:

http://perso.wanadoo.es/pictob/picrs232cpp.htm

21/25

30/5/2015

PIC-PC RS232 C++

Ahora vamos a utilizar mas seales, as que abrimos Virtual Serial Port y nos
vamos a la solapa Custom Pinout. Pulsamos sobre COM4 (a la izquierda). Aqu
se establece que pines estn unidos entre los puertos en un "cable virtual":
Aparte de TXD y RXD, el puerto RS232 DB9 tiene 2 salidas (RTS y DTR) y 4
entradas (CTS, DSR, DCD y RI). Aqu configuramos que entradas se unen a que
salidas.
Podemos preseleccionar 3 pinout (Custom pinout presets):
Estndar (Standard): cableado de lneas de seal por defecto.
Modo de bucle (Loopback Mode): el principal objetivo de esta
preseleccin es dejar que el programa del PC crea que hay handshaking
disponible, til con una conexin null-modem. Simplificando, handshaking
(protocolo de enlace) es un proceso que "negocia" la comunicacin antes
de que comience normalmente.
Personalizado (Custom): con esta seleccin podemos hacer nuestra propia
disposicin de conexin de lneas de seal, y guardarlo en un pinout preset
propio.
Elegimos la configuracin Custom.
La unin ideal entre PC y PIC sera a travs de un cable no cruzado, algo as
como un cable hembra-macho para "alargar" la conexin del PC hasta el PIC.
Esto tambin es util si no va a utilizarse control de flujo, que es nuestro caso.
Sin embargo Virtual Serial Port utiliza un "cable" con dos hembras y las lneas
de seal estn unidas de un conector a otro segn se configure una salida (RTS
y DTR)con una o varias entradas (DCD, DSR, CTS y RI). No puede modificarse la
configuracin entre TXD y RXD. La conexin es simtrica, es decir si unimos RTS
con DCD de un lado, quedara del otro unida DCD con RTS. Las seales OUT1 y
OUT2 se utilizan slo con hardware especfico, como el Hayes SmartModem
internal board, que no es nuestro caso.
Teniendo en cuenta lo anterior, primero probaremos con esta configuracin:

Conector Conector
1
2

Funcin

RXD12

TXD23

TXD13

RXD22

DTR14

DSR26 Conector

http://perso.wanadoo.es/pictob/picrs232cpp.htm

22/25

30/5/2015

PIC-PC RS232 C++

Tierra de seal

DSR16

DTR24

RTS17

CTS18

CTS18

RTS27

macho
del PC

Funcin: SEALconector-patilla
El resultado debe ser:
A continuacin probaremos con esta otra configuracin:

Conector Conector
1
2

Funcin

DCD11

RTS27

RXD12

TXD23

TXD13

RXD22

DTR14

RI29

Conector
macho
del PC
Tierra de seal

RTS17

DCD21

RI19

DTR24

Funcin: SEALconector-patilla
El resultado debe ser:
Ntese como RI se detecta en los flancos de subida o bajada de DTR.

03cpp_a
El siguiente proyecto consiste en controlar desde el PC 8 salidas del PIC (el
puerto B) bit a bit. Adems se controlan DSR y DTR. Se basa en Ejemplo 2.
Control desde PC y sera un desarrollo de 02\cpp_a. Los archivos de este
proyecto son: 03\mplab\, 03\proteus_a\ y 03\cpp_a\.
El programa queda as:
Uso del programa:
Configurar: Permite configurar el puerto.
Abrir Puerto/Cerrar Puerto: Abre o cierra el puerto.
Borrar salidas: Pone a 0 el puerto B del PIC.
http://perso.wanadoo.es/pictob/picrs232cpp.htm

23/25

30/5/2015

PIC-PC RS232 C++

Botones 0 a 7: Pone a 1 la salida del PIC correspondiente, RB0 a RB7.


En el campo de texto se recibe una confirmacin desde el PIC del estado
del puert B.
Cada LED asociado a un bit del puerto B se enciende si efectivamente lo
ha hecho en el PIC.
Los LEDs indican el estado del puerto, conectado, transmitiendo y
recibiendo. No implementado.
El botn RTS=1 pone a 1 la seal RTS del puerto.
El botn RTS=0 pone a 0 la seal RTS del puerto.
El botn DTR=1 pone a 1 la seal DTR del puerto.
El botn DTR=0 pone a 0 la seal DTR del puerto.
En los LEDs CTS, CD, DSR y RI muestran los estados de estas seales del
puerto.
No implementado el cdigo para el ComboBox ni el botn "Elegir
puerto".
Crear la interface grfica
Siguiendo los criterios dados anteriormente sobre nombres y TabOrder, el
aspecto de la interface grfica debe ser:
Programa completo
Ver 03\mplab\, 03\proteus_a\ y 03\cpp_a\.
Prueba del programa
Salvamos todo con

Compilamos con F9 o

Abrimos el archivo de Proteus 03\proteus. El PIC tiene que estar asociado al


archivo .hex de 03\mplab. El componente COMPIM de Proteus debe
configurarse como COM4, 4800 baudios, 8 bits, sin paridad, 2 bits de stop y sin
control de flujo.

Pulsamos el botn Configurar de nuestro programa y ponemos la misma


configuracin que con COM4 pero para COM5.
Pulsamos OK y abrimos el puerto con el botn Abrir.
Simulamos el archivo de Proteus y vemos el resultado.

03cpp_b
Variante del anterior, con la interface modificada, que, entre otros aadidos,
recoge del registro de Windows los puertos del sistema instalados. Tiene un
problema, y es que debe ejecutarse como administrador en Windows Vista y
Windows 7 para tener acceso al registro.
http://perso.wanadoo.es/pictob/picrs232cpp.htm

24/25

30/5/2015

PIC-PC RS232 C++

Programa completo
Ver 03\mplab\, 03\proteus_b\ y 03\cpp_b\.

03cpp_c
Variante del anterior pero que no necesita utilizar el registro.
Programa completo
Ver 03\mplab\, 03\proteus_b\ y 03\cpp_c\.
Pruebas reales
Debe tenerse en cuenta que en la simulacin se utilizan dos puertos virtuales
con un cable cruzado mientras que en el montaje real se utiliza un cable de
extensin.
Midiendo en el PC con un polmetro funciona la activacin de RTS y DTR como
salidas, obtenindose:
Pulsando 1 = +11,98v
Pulsando 0 = -11,26v
En el c.i. MAX232:
Patilla 2 = +9,39v
Patilla 6 = -8,7v
Las entradas del programa DSR a RI funcionan, activndose tanto con +10v del
MAX232en (patilla 2) como a +5v (Vcc de alimentacin). Entienden un 0 cuando
estn al aire (0v).
Funcionan todas las entradas incluida RI aunque en este caso solo se detecta
la activacin.
A resaltar que funciona todo con un conversor USB-RS232.

04cpp_a
El siguiente proyecto consiste en leer desde el PC 4 entradas del PIC. Funciona
como el Ejemplo 3. Monitorizacin de datos.
Por terminar, ver Ejemplo 3. Monitorizacin de datos..

http://perso.wanadoo.es/pictob/picrs232cpp.htm

25/25

Das könnte Ihnen auch gefallen