PIC-PC RS232 C++

25
30/5/2015 PIC-PC RS232 C++ http://perso.wanadoo.es/pictob/picrs232cpp.htm 1/25 DISPOSITIVOS LÓGICOS MICROPROGRAMABLES PIC-PC RS232 C++ Índice / Introducción Ampliación de contenidos PIC-PC RS232 C++ Por terminar. Falta desarrollar el proyecto 4. Introducción En este tema se desarrollan varios proyectos de comunicación por el puerto serie COM RS232 de un PC y un PIC16F84A. El PIC se programa en ASM con MPLAB . Los programas de comunicación en el PC se desarrollan bajo Windows con Borland C++ Builder 6 Enterprise y el componente TComPort . Para comprobar los proyectos mediante simulación 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 comunicación 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).

description

En este tema se desarrollan varios proyectos de comunicación por el puertoserie COM RS232 de un PC y un PIC16F84A. El PIC se programa en ASM conMPLAB. Los programas de comunicación en el PC se desarrollan bajo Windowscon Borland C++ Builder 6 Enterprise y el componente TComPort.

Transcript of PIC-PC RS232 C++

  • 30/5/2015 PIC-PC RS232 C++

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

    DISPOSITIVOS LGICOS MICROPROGRAMABLES PIC-PC RS232 C++

    ndice / Introduccin 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 puertoserie COM RS232 de un PC y un PIC16F84A. El PIC se programa en ASM conMPLAB. Los programas de comunicacin en el PC se desarrollan bajo Windowscon 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 comunicacindesarrollados con Borland C++ Builder.

    Para los dos ltimos puntos debemos tener instalados puertos serie virtualesinterconectados, y un puerto virtual en Proteus. Ver Puerto serie virtual VSPD yCOMPIM de Proteus.

    Podemos comprobar que se han creado los puertos virtuales con elAdministrador de dispositivos (Inicio / Panel de Control / Sistema / Hardware /Administrador de dispositivos / Puertos (COM & LPT).

  • 30/5/2015 PIC-PC RS232 C++

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

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

    Podemos probar la comunicacin con Hyperterminal de Windows ver de Puertoserie virtual VSPD y COMPIM de Proteus la parte que trata sobre Hyperterminal.

  • 30/5/2015 PIC-PC RS232 C++

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

    Proyectos de comunicacin desarrollados conBorland C++ Builder

    Se han realizado 4 proyectos de comunicacin PC-PIC (01, 02, 03 y 04). En cadauno puede haber varias versiones (a, b, c ...).

    PIC-PC RS232 C++ 01. "Hola mundo" del PIC al PC.PIC-PC RS232 C++ 02. Control de salidas del PIC. Puerto B, 1 bit de 8.PIC-PC RS232 C++ 03. Control de salidas del PIC. Puerto B, bit a bit.PIC-PC RS232 C++ 04. Enviar al PC estado de RB4 a RB7.

    Archivos necesarios

    Los archivos necesarios se descargan de:

    picpcrs232cpp/01.rarpicpcrs232cpp/02.rarpicpcrs232cpp/03.rarpicpcrs232cpp/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 necesariotener instalado Borland C++ Builder 6 si se desea trabajar con losejemplos. En Borland debe incluirse el componente TComport. A destacarque en las ltimas versiones de Borland parece que no puede utilizarse elcomponente TComport.Un archivo DSN de Proteus con el PIC y el programa HEX listo para susimulacin. Es necesario tener instalado Proteus 7.7 SP2.El proyecto en MPLAB con el ASM del PIC. Es necesario tener instaladaMPLAB 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\

  • 30/5/2015 PIC-PC RS232 C++

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

    \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++ pararecibir 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 proyectoson: 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" siexiste comunicacin y no hay problemas.

    Crear la interface grfica

    Vamos al directorio 01\ y creamos la carpeta cpp_a_prac\, dondedesarrollaremos el primer programa en C++. Conviene dejar tal cual elcontenido desescargado y desarrollar nuestros propios programas desde cero ennuevos directorios del tipo cpp_a_prac\.

    Iniciamos Borland y establecemos sus propiedades. En el Object Inspector,Properties del form:

    Caption = PIC RS232 Hola MundoClientHeight = 70ClientWidth = 272BorderStyle = bsSingleBorderIcons: biMaximize = false

    Este es un buen momento para salvar el proyecto (File / Save Project as) en01\cpp_a_prac\

    Unit = Unit1.cppProject = picrs232hola.bpr

    De la paleta de componentes (pestaa CPortLib) insertamos ComPort, asincorporamos sus mtodos, eventos y propiedades a nuestro proyecto.

  • 30/5/2015 PIC-PC RS232 C++

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

    Realmente no importa donde se coloque, es un componente invisible en tiempode ejecucin. Se nombrar por defecto como ComPort1. Podemos colocar massi vamos a asignarlos a otros puertos. Colocamos 3 botones y un cuadro detexto.

    En el Object Inspector, Properties:

    Botn Configurar:Name = ButtonConfigurarButtonConfigurar->Caption = "Configurar"TabOrder = 0

    Botn Abrir:Name = ButtonAbrirButtonAbrir->Caption = "Abrir"TabOrder = 1

    Botn Cerrar:Name = ButtonCerrarButtonCerrar->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();}

  • 30/5/2015 PIC-PC RS232 C++

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

    //---------------------------------------------------------------------------

    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, pestaaEvents, seleccionamos OnRxChar. Doble clic en la lista desplegable del evento:

    //---------------------------------------------------------------------------void __fastcall TForm1::ComPort1RxChar(TObject *Sender, intCount){ 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 alarchivo .hex de 01\mplab. El componente COMPIM de Proteus debeconfigurarse como COM4, 4800 baudios, 8 bits, sin paridad, 2 bits de stop y sincontrol de flujo.

  • 30/5/2015 PIC-PC RS232 C++

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

    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:

  • 30/5/2015 PIC-PC RS232 C++

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

    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 lasimulacin y cada vez que se resetea al PIC con el pulsador:

  • 30/5/2015 PIC-PC RS232 C++

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

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

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

  • 30/5/2015 PIC-PC RS232 C++

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

    Si en Proteus aparece este error:

    Es porque el PIC no est correctamente asociado al programa .hex. Debemoseditar las propiedades del PIC, seleccionndolo, pulsando el botn secundariodel ratn y seleccionando Edit Properties. En Program File elegimos el .hexadecuado (compimmplab.hex).

  • 30/5/2015 PIC-PC RS232 C++

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

    01cpp_b

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

    Esto puede ocurrir porque no se ha seleccionado ningn puerto COM, porqueest en uso o porque el PC no dispone de ninguno. Si el error no aparece serporque se ha tomado uno por defecto, normalmente COM1. De todos modos,para solucionarlo debemos realizar una gestin de excepciones. Ademspodemos hacer que el botn Abrir est deshabilitado mientras no estconfigurado el puerto.

    Copiaremos el directorio 01\cpp_a_prac y lo renombraremos como01\cpp_b_prac.

    Hacemos doble click en el formulario para escribir cdigo en el eventoFormCreate:

    //---------------------------------------------------------------------------

  • 30/5/2015 PIC-PC RS232 C++

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

    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 laconfiguracin y que est disponible"); ButtonAbrir->Enabled = false; }}//---------------------------------------------------------------------------

    Si provocamos un error, por ejemplo seleccionando un COM en uso (COM4 usadopor Proteus), aparecer un error capturado por el debugger:

    Cuando aparece un error, recordemos que detenemos el programa con Run /Progran Reset o Ctrl+F2.

  • 30/5/2015 PIC-PC RS232 C++

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

    Para que el programa gestione el error (y no el debugger de Borlad) y veamos elfuncionamiento de try catch, podemos configurarlo en Tools / DebuggerOptions 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 otroordenador que no disponga de Builder apareciendo un error de falta depaquetes .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 apoyoen el propio ejecutable. Para conseguir que el proyecto funcione de nuevo hayque cambiar la configuracin del tratamiento de paquetes y del enlazador.

    Sigamos estos pasos:

    1. Abrimos el proyecto y contestamos "cancelar" a cada paquete que sesolicite.

    2. En la barra de men eligimos "Project" / "Options".

  • 30/5/2015 PIC-PC RS232 C++

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

    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 elbotn seleccionndolo y dndole a la tecla suprimir (seguir este orden oquedarn referncia del botn que deberemos borrar a mano en el cdigo decabecera (.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 laconfiguracin y que est disponible"); ButtonAbrir->Enabled = false; } }}//---------------------------------------------------------------------------

    En FormCreate eliminamos ButtonCerrar->Enabled = false;

    Vamos a utilizar los eventos ComPort1AfterOpen y ComPort1AfterClose paracontrolar el botn Abrir y Configurar:

    //---------------------------------------------------------------------------

    void __fastcall TForm1::ComPort1AfterOpen(TObject *Sender){ ButtonAbrir->Caption = "Cerrar"; ButtonConfigurar->Enabled = false;}

  • 30/5/2015 PIC-PC RS232 C++

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

    //---------------------------------------------------------------------------

    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 sihemos 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 cerramosla 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 cerradofuera del Debugger), aparecer:

  • 30/5/2015 PIC-PC RS232 C++

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

    Esto es as porque estamos modificando la propiedad de un objeto (el botn)cuando ya no existe. El evento ComPort1AfterClose se produce cuando se hadestruido el formulario y por tanto se produce un error al operar con losbotones, que tampoco existen.

    Podemos comprobarlo colocando un BreakPoint en el mdulo picrs232hola.cppen return 0:

    //---------------------------------------------------------------------------

    #include #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)

  • 30/5/2015 PIC-PC RS232 C++

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

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

    Recordemos que slo podremos ver el efecto ejecutando el .exe fuera delDebugger de Borland o configurando Borland para que no interceppte loserrores.

    02cpp_a

    El siguiente proyecto consiste en controlar desde el PC 8 salidas del PIC (elpuerto B) . Desde el programa en el PC podemos activar/desactivar mediante unbotn una salida del PIC. Slo se activa una salida cada vez (o ninguna) y elPIC responde enviando un texto de estado. El programa esta basado en elEjemplo 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 estadodel 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 talcual el contenido de cpp_a\ y que desarrollemos el programa de C++ desdecero en cpp_a_prac\. Iniciamos Borland y establecemos sus propiedades. Enel Object Inspector, Properties del form:

    Caption = PIC RS232 SalidasClientHeight = 73ClientWidth = 329BorderStyle = bsSingleBorderIcons: biMaximize = false

    Colocamos un TComport, 11 botones y un campo de texto. Conviene colocarlos

  • 30/5/2015 PIC-PC RS232 C++

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

    segn el TabOrder.

    En el Object Inspector, Properties:

    Botn Configurar:Name = ButtonConfigurarButtonConfigurar->Caption = "Configurar"TabOrder = 0

    Botn Abrir Puerto:Name = ButtonAbrirButtonAbrir->Caption = "Abrir Puerto"TabOrder = 1

    Botn Borrar salidas:Name = ButtonBorrarButtonBorrar->Caption = "Borrar salidas"TabOrder = 2

    Botones 0 a 7:Name = Button0 a Button7Caption = "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) en02\cpp_a_prac\

    Unit = Unit1.cppProject = 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 deindicadores lgicos en la versin b, que se ve mas clara. En ambos casos el PICtiene que estar asociado al archivo .hex de 02\mplab. El componente COMPIM

  • 30/5/2015 PIC-PC RS232 C++

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

    de Proteus debe configurarse como COM5, 9600 baudios, 8 bits, sin paridad, 2bits de stop y sin control de flujo.

    En el programa en C++ pulsamos el botn Configurar y ponemos la mismaconfiguracin 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. Iniciar EXE.2. Configurar puerto.3. Abrir puerto.4. Pulsar botn (pulsar 2 o 3). Si no se pulsa ningn botn, no hay error.5. Cerrar programa.6. Aqu se genera el ERROR.

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

    02cpp_b

    Este proyecto en una modificacin del anterior para solucionar el problema delerror 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 acada botn:

    //--------------------------------------------------------------------------- void __fastcall TForm1::Button0Click(TObject *Sender){ AnsiString Str;

    Edit1->Text=""; //Borra el texto para luego recibir y presentarel 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, podemoscambiar al siguiente cdigo, que funciona y no genera problemas:

    //---------------------------------------------------------------

  • 30/5/2015 PIC-PC RS232 C++

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

    ------------ void __fastcall TForm1::Button0Click(TObject *Sender){ if (ComPort1->Connected) { Edit1->Text=""; //Borra el texto para luego recibir ypresentar el nuevo DatoBin[0] = '0'; ComPort1->Write (DatoBin, 1); // Se enva el caracter '0' alpuerto }}//---------------------------------------------------------------------------

    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 esteproyecto 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 estadodel puerto B.Los leds indican el estado del puerto, conectado, transmitiendo yrecibiendo.

    Crear la interface grfica

    Vamos a c:\picpc\picpcrs232cpp\02\. Para aprender, conviene dejar tal cualel contenido de cpp_c\ y desarrollar el programa de C++ a partir de cpp_b\,copiando esta carpeta y renombrndola como cpp_c_prac\.

  • 30/5/2015 PIC-PC RS232 C++

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

    Iniciamos Borland y abrimos el proyecto picrs232sal.bpr. Agrandamos elformulario y recolocamos algunos botones y agrandamos el edit. Colocamos unPanel y dentro, 7 TComLed y 7 Label.

    Corregir posiciones de los label para centrarlos (lo seleccionamos y con CTRL ylas flechas del cursor los movemos).

    En el Object Inspector, Properties:

    Panel1->Caption = "" (nada).En todos los ComLed en ComPort ponemos ComPort1 // El puerto a dondese asigna el ledComLed1->LedSignal = lsConnComLed2->LedSignal = lsTxComLed3->LedSignal = lsRxComLed4->LedSignal = lsCTSComLed5->LedSignal = lsDSRComLed6->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) en02\cpp_c_prac\

    Unit = Unit1.cppProject = 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 alarchivo .hex de 02\mplab. El componente COMPIM de Proteus debeconfigurarse como COM5, 9600 baudios, 8 bits, sin paridad, 2 bits de stop y sincontrol de flujo.

    Pulsamos el botn Configurar de nuestro programa y ponemos la mismaconfiguracin pero para COM5, pulsamos OK y abrimos el puerto con el botnAbrir.

    Simulamos el archivo de Proteus 02\proteus_c\.

    Hasta ahora solo hemos hecho uso de las seales TXD(salida, pat3) yRXD(entrada, pat2), tal que la comunicacin sera:

  • 30/5/2015 PIC-PC RS232 C++

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

    Ahora vamos a utilizar mas seales, as que abrimos Virtual Serial Port y nosvamos a la solapa Custom Pinout. Pulsamos sobre COM4 (a la izquierda). Aquse 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 4entradas (CTS, DSR, DCD y RI). Aqu configuramos que entradas se unen a quesalidas.

    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 estapreseleccin es dejar que el programa del PC crea que hay handshakingdisponible, til con una conexin null-modem. Simplificando, handshaking(protocolo de enlace) es un proceso que "negocia" la comunicacin antesde que comience normalmente.Personalizado (Custom): con esta seleccin podemos hacer nuestra propiadisposicin de conexin de lneas de seal, y guardarlo en un pinout presetpropio.

    Elegimos la configuracin Custom.

    La unin ideal entre PC y PIC sera a travs de un cable no cruzado, algo ascomo 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 lneasde seal estn unidas de un conector a otro segn se configure una salida (RTSy DTR)con una o varias entradas (DCD, DSR, CTS y RI). No puede modificarse laconfiguracin entre TXD y RXD. La conexin es simtrica, es decir si unimos RTScon DCD de un lado, quedara del otro unida DCD con RTS. Las seales OUT1 yOUT2 se utilizan slo con hardware especfico, como el Hayes SmartModeminternal board, que no es nuestro caso.

    Teniendo en cuenta lo anterior, primero probaremos con esta configuracin:

    Conector

    Conector1

    Conector2

    Funcin

    2 3 RXD12 TXD23

    3 2 TXD13 RXD22

    4 6 DTR14 DSR26

  • 30/5/2015 PIC-PC RS232 C++

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

    5 5 Tierra de seal

    6 4 DSR16 DTR24

    7 8 RTS17 CTS18

    8 7 CTS18 RTS27

    Funcin: SEALconector-patilla

    machodel PC

    El resultado debe ser:

    A continuacin probaremos con esta otra configuracin:

    Conectormachodel PC

    Conector1

    Conector2

    Funcin

    1 7 DCD11 RTS27

    2 3 RXD12 TXD23

    3 2 TXD13 RXD22

    4 9 DTR14 RI29

    5 5 Tierra de seal

    7 1 RTS17 DCD21

    9 4 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 (elpuerto 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 esteproyecto 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.

  • 30/5/2015 PIC-PC RS232 C++

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

    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 estadodel puert B.Cada LED asociado a un bit del puerto B se enciende si efectivamente loha hecho en el PIC.Los LEDs indican el estado del puerto, conectado, transmitiendo yrecibiendo. 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 delpuerto.No implementado el cdigo para el ComboBox ni el botn "Elegirpuerto".

    Crear la interface grfica

    Siguiendo los criterios dados anteriormente sobre nombres y TabOrder, elaspecto 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 alarchivo .hex de 03\mplab. El componente COMPIM de Proteus debeconfigurarse como COM4, 4800 baudios, 8 bits, sin paridad, 2 bits de stop y sincontrol de flujo.

    Pulsamos el botn Configurar de nuestro programa y ponemos la mismaconfiguracin 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 unproblema, y es que debe ejecutarse como administrador en Windows Vista yWindows 7 para tener acceso al registro.

  • 30/5/2015 PIC-PC RS232 C++

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

    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 virtualescon un cable cruzado mientras que en el montaje real se utiliza un cable deextensin.

    Midiendo en el PC con un polmetro funciona la activacin de RTS y DTR comosalidas, obtenindose:

    Pulsando 1 = +11,98vPulsando 0 = -11,26v

    En el c.i. MAX232:

    Patilla 2 = +9,39vPatilla 6 = -8,7v

    Las entradas del programa DSR a RI funcionan, activndose tanto con +10v delMAX232en (patilla 2) como a +5v (Vcc de alimentacin). Entienden un 0 cuandoestn al aire (0v).

    Funcionan todas las entradas incluida RI aunque en este caso solo se detectala 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. Funcionacomo el Ejemplo 3. Monitorizacin de datos.

    Por terminar, ver Ejemplo 3. Monitorizacin de datos..