Delphi, TComPort y El 8051 Micro.
#1 Guest_Jose Fco_*
Escrito 24 diciembre 2008 - 04:55
Hoy les quiero traer un mini-tutorial de como interconectar una PC con un Micro 8051 via Serial Port.Para ello usaremos el Componente TComPort y desde luego ejemplos creados en Delphi.
Aqui tenemos el esquematico de la conecion:
Continuara....
Un Saludo.
#2 Guest_Jose Fco_*
Escrito 24 diciembre 2008 - 05:27
Les dire que existen diferentes componentes para el puerto serie.Pero en esta oportunidad hablaremos del componente TComPort de Dejan Crnila.Este componente es gratis y funciona para el Delphi 3, 4, 5, 6 y 7.
Para aquellos que aun no lo tengan aqui les pongo un enlace para que lo puedan obtener:
1)
http://suncoastmicro.../cport-3.10.zip
Ahora como ejemplo les dare una demostracion de como instalarlo en Delphi 6.0
Despues de bajar el file cport-3.10.zip
2) Lo descomprimimos y obtendremos estos files:
Files despues de descomprimido cport-3.10.zip
3) Descomprimimos la carpeta sources.zip
4) Buscamos el file CPortLib6.dpk le damos doble click y se habrira una ventana en Delphi como esta:
5) Le damos click al boton "Compile" y se generaran otros files como estos:
Tendremos estos files despues de compilar CPortLib6.dpk
6) Copiamos todos estos nuevos files en la carpeta Lib donde tenemos instalado Delphi(i.e.
c:\Program Files\Borland\Delphi6\Lib\ )
7) Cerramos Delphi y buscamos en la carpeta "sources" el file DsgnCPort6.dpk le damos doble click y
Delphi habrira otra ventana Package window.
Tendremos esta ventana despues de darle doble click a DsgnCPort6.dpk
8) Le damos al boton Compile y luego a Install . El TComPort Componente quedara instalado en la Paleta de componentes de nuestro Delphi.
Si miramos en la paleta de componentes de nuestro Delphi, podremos ver una pestaña llamada CPort.La habrimos
y tendremos algo asi:
Si encontramos esta pestaña en la paleta de componentes, entonces nuestra instalacion a sido un exito.
Cualquier duda al respecto, aqui estamos para ayudar.
Un Saludo.
Continuara....
#3 Guest_Jose Fco_*
Escrito 25 diciembre 2008 - 11:14
Continuamos con el tutorial:
Una de las cosas mas importantes es estar bien familiarizados con el conector DB9 (serial port)
El conector mas comun para el puerto serie es el de 9 pines (DB9), aunque algunas PCs tambien estan equipadas con conectores de 25 pines para el puerto serie.
En la imagen anterior resaltamos los pines #2 y #3.
El Pin #2 es por el cual el computador estara recibiendo la data del exterior y por el Pin #3 estara transmitiendo data al exterior.(estos dos pines son los que estaremos usando en nuestro proyecto)
Los demas pines tienen su funcion tambien y a continuacion mostrare una imagen que nos mostrara sus nombres y la direcion de sus señales:
En esta imagen podemos observar los nombres de los 9 pines y la direcion de sus señales.
Para conectar el puerto serial del computador al microcontrolador, se usara un cable como este:
En la siguiente imagen mostraremos los tres pines que en realidad nos importan de este cable:
Un Saludo.
Continuara...
#4 Guest_Jose Fco_*
Escrito 25 diciembre 2008 - 05:59
Tenemos ya claro lo del cable BD9 (para el puerto serie) Pero entre el Com del PC y el Micro podemos ver un chip
Max232.Esto se debe a que el voltage de los pines de un puerto serie en nuestro computador, es un voltage muy elevado para conectarlo directamente a los pines de un uC.
El voltage del puerto serie va desde -15V <----> +15V y el maximo de voltage que permite los pines de un uC es 5V ya que es una estructura TTL.
Esta tabla nos muestra los voltages en un puerto serie, el valor despues de convertido en el max232 y su valor (logico)
Ya sabiendo el porque de la presencia de un chip MAX232 en nuestro proyecto, quiero mostrar una imagen de como es un chip max232.
La siguiente imagen nos muestra como conectar un Max232:
Bueno dejamos por el momento la parte del hardware y en el proximo paso nos adentramos en Delphi y el componente TComPort.
Alguna pregunta al respecto ya saben estamos a la orden para contestarla.
Continuara....
Un Saludo.
#5
Escrito 25 diciembre 2008 - 09:51
Saludos.
#6 Guest_Jose Fco_*
Escrito 26 diciembre 2008 - 05:10
Pues sí, tengo una duda, al realizar la placa, ¿debo colocar un conector macho DB9?, ¿qué tipo de componentes son J10 y J9?, ¿Diodos, resistencias y qué valores?.
Saludos.
Hola enecumene, Para la placa se coloca un DB9 hembra, ya que la parte del cable que quedara para la placa es macho.
Aqui te dejo dos imagenes de este conector:
Por otra parte te comento que J9 y J10 son jumpers.Estos solo se colocan si quieres redirecionar el micro a otro max232 o similar.Pero en el caso de solo contar con un max232 no hacen falta y pues se puede conectar esos pines directo pin con pin.
Un Saludo.
#7
Escrito 26 diciembre 2008 - 07:06
Saludos.
#8
Escrito 26 diciembre 2008 - 07:10
#9
Escrito 26 diciembre 2008 - 07:12
si tienes algun cable serial de esos que traen las gavetas de dinero o las impresoras COM, puedes utilizarlos, necesitaras un soldador para armar la configuración.
Pues de Soldar/Desoldar no me preocupo, tengo equipos para eso, lo que me preocupa es conseguir esos componentes , pues no tengo al alcance Impresoras COM o Cajones de Dinero.
Saludos.
#10
Escrito 26 diciembre 2008 - 07:14
#11
Escrito 26 diciembre 2008 - 07:16
en una tienda de electronica, o en alguna tienda de computacion seria no deberia ser problemas encontrarlo.
Pues siendo éste país (RD) deberías dudarlo
#12
Escrito 26 diciembre 2008 - 07:27
en una tienda de electronica, o en alguna tienda de computacion seria no deberia ser problemas encontrarlo.
Pues siendo éste país (RD) deberías dudarlo
jeje, no te quejes ... no te quejes compadre ...
que este intento de socialismo....
#13 Guest_Jose Fco_*
Escrito 26 diciembre 2008 - 09:25
Eso es muy comun y en cualquier lugar de electronica serio lo encontraras.¡Excelente!, lo que me preocupa es conseguir ese conector hembra, mmm, no lo he visto aquí, pero en algún lado aparecerá , gracias José.
Saludos.
Un Saludo.
#14 Guest_Jose Fco_*
Escrito 26 diciembre 2008 - 09:29
en una tienda de electronica, o en alguna tienda de computacion seria no deberia ser problemas encontrarlo.
Pues siendo éste país (RD) deberías dudarlo
jeje, no te quejes ... no te quejes compadre ...
que este intento de socialismo....
jajajajajaja Dios los libre chamo.Mira que me toco sacar resistencias de equipos viejos y enderesar sus patitas cuando estaba en Cuba.Cuando llegue aca y mire una tienda de electronica estaba como niño mirando juguetes.
Un Saludo.
#15 Guest_Jose Fco_*
Escrito 26 diciembre 2008 - 06:24
Aqui tenemos un programita que nos ayudara un poco a entender y manipular este componente TComPort:
Aqui esta el codigo:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CPort, Buttons; type TForm1 = class(TForm) ComPort: TComPort; Memo1: TMemo; Edit1: TEdit; Enviar: TBitBtn; Salir: TBitBtn; Puerto: TBitBtn; Limpiar: TBitBtn; Boton1: TBitBtn; Boton2: TBitBtn; Boton3: TBitBtn; Label1: TLabel; Label2: TLabel; Boton4: TBitBtn; procedure ComPortRxChar(Sender: TObject; Count: Integer); procedure EnviarClick(Sender: TObject); procedure SalirClick(Sender: TObject); procedure PuertoClick(Sender: TObject); procedure LimpiarClick(Sender: TObject); procedure Boton1Click(Sender: TObject); procedure Boton2Click(Sender: TObject); procedure Boton3Click(Sender: TObject); procedure Boton4Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //Esto te permite que en el memo puedas ver hex y ascii. procedure AddHexString(S : String; Lines : TStrings ); var AddS, HexS, CopyS : String; i : Integer; const SLen = 8; begin while Length(S) > 0 do begin AddS := Copy(S,1,SLen); HexS := ''; Delete(S,1,SLen); for i := 1 to SLen do begin CopyS := Copy(AddS,i,1); if CopyS <> '' then HexS := HexS + ' ' + Format('%2.2x',[Byte(CopyS[1])]) // else HexS := HexS + ' '; end; while Length(AddS) < SLen do AddS := AddS + ' '; for i := 1 to SLen do case AddS[i] of #0..#31 : AddS[i] := '.'; #127 : AddS[i] := '.'; end; Lines.Add(HexS+' : '+AddS); end; end; // este es el procedure para recibir por el serial port //(recuerda en el comport Events poner el procedure OnRxChar procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); var Str: String; begin ComPort.ReadStr(Str, Count); AddHexString(Str,Memo1.Lines); end; procedure TForm1.EnviarClick(Sender: TObject); var Valor: integer; Str: string; begin Valor := StrToIntDef(Edit1.Text,-1) ; if Valor in [0..255] then begin Str := Chr(Valor); ComPort.WriteStr(Str); end else ShowMessage('El valor ingresado no esta en el rango permitido...'); end; // salir de la aplicacion procedure TForm1.SalirClick(Sender: TObject); begin Close; end; //aqui puedes cambiar los parametros del comport procedure TForm1.PuertoClick(Sender: TObject); begin ComPort.ShowSetupDialog; end; // limpiar el Memo procedure TForm1.LimpiarClick(Sender: TObject); begin Memo1.text := ''; end; // aqui esta el primer boton procedure TForm1.Boton1Click(Sender: TObject); begin if not ComPort.Connected then ComPort.Open; Comport.WriteStr(#01);//cambia este byte a enviar si quieres end; // aqui esta el segundo boton procedure TForm1.Boton2Click(Sender: TObject); begin if not ComPort.Connected then ComPort.Open; Comport.WriteStr(#02); //puedes cambiar este byte si quieres end; // aqui esta el tercer boton procedure TForm1.Boton3Click(Sender: TObject); begin if not ComPort.Connected then ComPort.Open; Comport.WriteStr(#03); // tambien puedes cambiar su valor end; // aqui esta el cuarto boton procedure TForm1.Boton4Click(Sender: TObject); begin if not ComPort.Connected then ComPort.Open; Comport.WriteStr(#04); // tambien puedes cambiar su valor end; procedure TForm1.FormCreate(Sender: TObject); begin Memo1.text := ''; end; end.
Aqui dejo el codigo fuente:
Continuara.....
Un Saludo.
Archivos adjuntos
#16 Guest_Jose Fco_*
Escrito 27 diciembre 2008 - 08:31
Continuando, tenemos ya un programita para hacer pruebas y poder practicar.Una forma de poder probar este programita y ver los valores que estamos transmitiendo.Es poder recivirlos de retorno al puerto serie.Esto es facil si unimos los pines 2 y 3 del puerto serie.
Podemos usar un alligator clips como se muestra en esta imagen:
aqui estamos uniendo los pines 2 y 3 con el alligator.
Tambien podemos usar un DB9 hembra y soldarle unidos los pines 2 y 3 como se muestra en esta otra imagen:
Esta es la forma que yo personalmente uso.Siempre tengo al alcance en mi banco de trabajo un db9 hembra con los pines 2 y 3 soldados.
La idea es unir el pin #2 del puerto serie que es por donde se recive la data, con el pin #3 que es por donde se transmite la data.(creamos un retorno de la misma.)
Un Saludo.
Continuara.....
#17
Escrito 27 diciembre 2008 - 08:52
#18 Guest_Jose Fco_*
Escrito 27 diciembre 2008 - 08:58
Si eso es otra forma de poder monitorial el puerto.Pero ya estas usando dos PC, mientras que de esta forma lo puedes hacer con la misma PC y estar reciviendo en el mismo programita.yo para ver que se transmite tengo un cable cruzado asi puedo unir dos pc por el puerto serie.
Este programita es un tutorial para el componente TComPort y pues en el se encuentra procedimientos para enviar y para recivir.Lo mas correcto es poder recivir en el mismo lo que se esta enviando.
Un Saludo.
PD:¿Capiche?
#19
Escrito 27 diciembre 2008 - 09:00
#20 Guest_Jose Fco_*
Escrito 27 diciembre 2008 - 09:06
Ok ya entiendo, tienes que simular un protocolo de comunicacion.Eso tiene remedio y pues me gustaria poder entre los dos hacer un buen programita con esas nececidades y pues si estas usando mas que los pines 2 y 3 (si ocupas otra de las señales pues tambien creamos ese conector) Asi tendras en una sola PC la forma de probar.es que se me olvido decir que por lo general tengo que esperar una respuesta especifica a un comando enviando, por eso tengo que hacer el transmisor y el escucha
Un Saludo.