PDA

Ver la Versión Completa : ayuda con componente comport


dperezju
31-07-2008, 07:08:14
buenas noches amigos del foro.

Creo que ya se ha hablado mucho des este tema pero bueno la verdad no he comprendido del todo como hacer la comunicacion de un programa en delphi hacia el puerto serie, es decir, configurarlo, mandar una señal al puerto, etc.

Mi intención es algo muy sencillo (eso creo):crear un programita en delphi que al presionar un boton mande una señal a un PIC por el puerto serie y este PIC a su vez envie una señal a un circuito que controle los aspersores de un jardin, solo que aun no he encontrado como enviar esa señal al puerto serie con el programita, he instalado los componentes APRO y Comport, he leido el post de Control relay pero no he entendido bien como es que funciona, quisiera que me ayudaran con el programita ya que en cuanto al hardware siento que no estoy tan perdido.

Espero que me puedan ayudar. Saludos!!!

FGarcia
31-07-2008, 17:04:07
De la programacion de los PIC y ensamblador se lo mismo que de astrofisica nuclear...¡nada!

De ComPort es tan simple como que envies solo esto:


//Por ejemplo al hacer click en un boton se envia una cadena
ComPort1.WriteStr('tuComando');


por otro lado en el paquete del comport viene una carpeta de ejemplos, estudialos y practica.

JoseFco
31-07-2008, 17:28:55
Hola amigos.

Lo que sobra aqui en este mismo sub-foro son ejemplos de como mandar un byte (comando a un micro) por el serial port.

Seria bueno que nos digas que componente usas para el puerto serie a ver si te damos una mejor ayuda.

Un Saludo.

JoseFco
31-07-2008, 17:33:17
Veo que tienes Comport:

Aqui tienes un ejemplo:


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open; Comport.WriteStr(#17);
end;


esto manda un byte al serial port.

Un Saludo.

dperezju
31-07-2008, 17:41:43
Exactamente, eso es lo que necesito, como enviar un byte al puerto serie, Al gonzalez me recomendo el componente APRO aunque precisamente en este foro he encontrado que mas personas usan el Comport aunque en los ejemplos aun no me queda muy claro el envio de los bytes al puerto, ya que con el comando:

ComPort1.WriteStr('tuComando');

En la parte de "tuComando" se envia una cadena, solo que necesito por ejemplo, un dato en binario o hexadecimal,y no se por que pines del puerto es donde obtengo esos bits, estas son las partes que aún no comprendo muy bien.

De antemano, gracias por su tiempo y ayuda.

egostar
31-07-2008, 17:49:17
Exactamente, eso es lo que necesito, como enviar un byte al puerto serie, Al gonzalez me recomendo el componente APRO aunque precisamente en este foro he encontrado que mas personas usan el Comport aunque en los ejemplos aun no me queda muy claro el envio de los bytes al puerto, ya que con el comando:

ComPort1.WriteStr('tuComando');

En la parte de "tuComando" se envia una cadena, solo que necesito por ejemplo, un dato en binario o hexadecimal,


Ya te ha puesto [JoseFco] el ejemplo de como enviarlo,


y no se por que pines del puerto es donde obtengo esos bits, estas son las partes que aún no comprendo muy bien.

De antemano, gracias por su tiempo y ayuda.

Hola

Lee este documento (http://www.arcelect.com/rs232.htm) (en inglés) para que te des una idea de lo que estas preguntando.

En específico los pines 2 y 3 son los que se usan para transmitir y para recibir datos, sin embargo, los demas pines son muy importantes.

Salud OS

dperezju
31-07-2008, 18:34:09
muchas gracias amigos, voy a probar lo que me han comentado y les digo como me fue.

Muchas gracias por su ayuda!!!
Saludos!!!:)

JoseFco
31-07-2008, 19:41:33
muchas gracias amigos, voy a probar lo que me han comentado y les digo como me fue.

Muchas gracias por su ayuda!!!
Saludos!!!:)

Por el pin 3 tu envias algo y por el pin 2 recives, el pin 5 lo pones a tierra en el board del micro.
No veo mayor complicacion en conectar un micro a un programita en Delphi.

Un Saludo.

egostar
31-07-2008, 19:44:15
Por el pin 3 tu envias algo y por el pin 2 recives, el pin 5 lo pones a tierra en el board del micro.
No veo mayor complicacion en conectar un micro a un programita en Delphi.

Un Saludo.

Depende amigo, depende :D, si estas hablando de un DB9 si, pero en DB25 es al revés y el Pin 5 es para DB9 y 7 para DB25 :)

Salud OS

JoseFco
31-07-2008, 19:50:03
Depende amigo, depende :D, si estas hablando de un DB9 si, pero en DB25 es al revés y el Pin 5 es para DB9 y 7 para DB25 :)

Salud OS

Todavia existen DB25? en que parte del mundo anu no llega el desarrollo?:D

Asi es maestro, como siempre estas en lo correcto y le cabe el derecho.:D:D:D


Un Saludo.

egostar
31-07-2008, 19:55:43
Todavia existen DB25? en que parte del mundo anu no llega el desarrollo?:D


Pues me gustaría decirle que ya no existen, pero pues si, aún siguen vigentes sobre todo para el uso con modems, debería darle una leída a cada una de las señales para que vea "pa' que" sirven :D:D:D


Asi es maestro, como siempre estas en lo correcto y le cabe el derecho.:D:D:D


Que paso mi amigo tan temprano está usted de agresivo :D

Salud OS

dperezju
31-07-2008, 20:45:00
Ya hice el programita que me hizo favor de enviarme JoseFco:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open; Comport.WriteStr(#17);
end;

no sin antes utilizar un boton que muestre la ventana de los settings del comport.
Bueno, (no se si estoy mal con lo siguiente) estoy usando el DB9 y quiero medir el voltaje que sale del pin 3 y el pin 5 para verificar que efectivamente estoy obteniendo un dato, pero no alcanzo a medir nada, no se si necesito forzosamente un MAX232 para obtener un poco más de voltaje para por lo menos encender un led y así continuar con lo de los aspersores que le habia comentado.

JoseFco
31-07-2008, 21:23:16
Ya hice el programita que me hizo favor de enviarme JoseFco:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open; Comport.WriteStr(#17);
end;

no sin antes utilizar un boton que muestre la ventana de los settings del comport.
Bueno, (no se si estoy mal con lo siguiente) estoy usando el DB9 y quiero medir el voltaje que sale del pin 3 y el pin 5 para verificar que efectivamente estoy obteniendo un dato, pero no alcanzo a medir nada, no se si necesito forzosamente un MAX232 para obtener un poco más de voltaje para por lo menos encender un led y así continuar con lo de los aspersores que le habia comentado.

Hermano esta usted mas perdido que un raton en una ferreteria.Primero para leer un byte que salga del puerto serial tienes que tener un terminal o usar el mismo comport y puentiar los pines 2 y 3 asi te regresara y con el procedure ComPortRxChar pues leerlo.
En algunos PIC no hace falta el Max232.Pero que quieres subir el voltage a ver si enciendes un led? eso me deja saber dos cosas:

1) No tienes idea que es un puerto serie.
2)No tienes idea como trabaja un uC.

Para hacer lo que quieres amigo.Tienes que entender que el serial port solo podras conectarlo a un micro y recibir ese byte de data(comando)despues procesarlo y si es el comando que esperas, pues hacer algo con el.(encender un relay, un led,lo que se pueda conectar.
Nunca puedes usar el voltage del serial port para nada de eso.
Me gustaria poder ayudarte pero no trabajo los PIC y no tengo idea ni como configurar su puerto serial.;)
Te aconsejo encontrar algun projecto que este hecho para ese PIC que quieres usar y pues modificar tu programita Delphi de acuerdo a el.

Un ejemplo tu envias un byte de data al micro, este lo recive y entonces comparas ese byte, si es igual a lo que esperas entonces hacer una rutina que ponga uno de los pines de un puerto a cero (CLR) o lo pongas a 1 (SET), pero jamas usar un pin del puerto serie para conectar algo mas, como un led por ejemplo.

Un Saludo.

JoseFco
31-07-2008, 21:27:52
Pues me gustaría decirle que ya no existen, pero pues si, aún siguen vigentes sobre todo para el uso con modems, debería darle una leída a cada una de las señales para que vea "pa' que" sirven :D:D:D



Que paso mi amigo tan temprano está usted de agresivo :D

Salud OS

Le prometo que antes que termine el año me aprendo los 25 pines del DB25.;)

Lo que no entiendo es lo de agresivo.:confused:

Acaso es alguno de esos componentes raros para serial port que tu recomiendas por aca.:D:D:D

Un Saludo.

egostar
31-07-2008, 21:48:10
Le prometo que antes que termine el año me aprendo los 25 pines del DB25.;)


Me parece bien, le recordare el primer día de 2009 :D



Lo que no entiendo es lo de agresivo.:confused:

Acaso es alguno de esos componentes raros para serial port que tu recomiendas por aca.:D:D:D


No se haga Wey, sabe de lo que hablo :D:D

Salud OS

JoseFco
31-07-2008, 21:53:44
Me parece bien, le recordare el primer día de 2009 :D




No se haga Wey, sabe de lo que hablo :D:D

Salud OS

jajajajajajaja para nada amigo, yo soy wey de fabrica.:D:D:D

Bueno y hablando de wey.Tengo dias que no hablo con Eduarcol, sabes algo de el?:D

Un Saludo.

egostar
31-07-2008, 21:57:01
jajajajajajaja para nada amigo, yo soy wey de fabrica.:D:D:D

Bueno y hablando de wey.Tengo dias que no hablo con Eduarcol, sabes algo de el?:D

Un Saludo.

:D:D:D

Salud OS

poliburro
02-08-2008, 07:24:04
Amigo josé no seas duro con el compañero :D, jajaja a él precisamente le hablé de ti por ser un experto en esto de la circuitería. El desea desarrollar un sistema en delphi que le permita por ejemplo encender un aspersor.

Tendrás alguna fuente que le puedas recomendar?, u orientarle sobre lo que debe investigar para conseguir su objetivo?.

Saludos

JoseFco
02-08-2008, 15:07:22
Amigo josé no seas duro con el compañero :D, jajaja a él precisamente le hablé de ti por ser un experto en esto de la circuitería. El desea desarrollar un sistema en delphi que le permita por ejemplo encender un aspersor.

Tendrás alguna fuente que le puedas recomendar?, u orientarle sobre lo que debe investigar para conseguir su objetivo?.

Saludos

Hola mi Poli.
jajajajajajaja como que duro? para nada, lo que pasa es que el amigo comenzo muy bien este hilo y en el primer post del mismo el hombre esta muy claro.despues el hombre no solo quiere medir el voltage del pin 3, tambien quiere medir el del pin 5 y para rematar la cosa quiere elevar el voltage a estos pines a ver si puede conectar un led.Entendi mal?

Aqui esta la idea y cuando trabaje en ese programita lo deje universal,puedes usarlo en el micro que quieras y el antes de comenzar este hilo paso por el.
Control Relay. (http://www.clubdelphi.com/foros/showthread.php?t=56000)

Me gustaria poder ayudarlo en el hardware y en el firmware.Pero de PIC no se nada carnal.

PD:Dile al amigo que el no conocer algo no es pecado,el pecado es no hacer el esfuerzo por aprenderlo.Siempre es mas lo que ignoramos que lo que podamos aprender.

Un Saludo.

dperezju
02-08-2008, 18:32:59
Pues esa era mi duda, si ya simplemente con lo que mandara un dato por el puerto serie podia controlar por ejemplo el PIC o un led pero ya revise que hay que utilizar forzamente el protocolo RS232 para la comunicación con el mismo PIC, no asi???

Y otra cosa que queria saber era, que dato necesito enviar al puerto serie por ejemplo en binario, hexadecimal o una cadena lo cual creo que el programa contro relay lo deja claro.

Saludos!!!

JoseFco
02-08-2008, 18:36:10
Bueno aqui esta algo de ayuda para el amigo:

http://suncoastmicros.com/images/SER_TER.gif


Con esto podras practicar un poco y entender como mandar y recibir por el serial port, usando en componente Comport.

Aqui el codigo:


unit SerieT;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CPort;
type
TForm1 = class(TForm)
Button1: TButton;
ComPort: TComPort;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ComPortRxChar(Sender: TObject; Count: Integer);
procedure Button4Click(Sender: TObject);
procedure Button5Click(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;
// aqui esta el primer boton
procedure TForm1.Button1Click(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.Button2Click(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.Button3Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
Comport.WriteStr(#03); // tambien puedes cambiar su valor
end;
// salir de la aplicacion
procedure TForm1.Button4Click(Sender: TObject);
begin
Close;
end;
//aqui puedes cambiar los parametros del comport
procedure TForm1.Button5Click(Sender: TObject);
begin
ComPort.ShowSetupDialog;
end;
end.


Solo tienes que unir los pines 2 y 3 del puerto serie y podras monitorear lo que envias.Por otra parte tambien este programita te funcionara como un monitor.
Cambiendo los bytes a enviar en el procedure de los buttons podras ir jugando con ellos y encontrar que es lo que quieres que tu micro reciba.


procedure TForm1.Button3Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
Comport.WriteStr(#03); //cambia este numero, por el codigo que
//quieras mandar a tu micro
end;



Un Saludo.

dperezju
02-08-2008, 18:50:37
Hombre muchas gracias esto es más de lo que esperaba les agradesco en demasia, pense que solo respondian preguntas muy avanzadas pero el día que fui a la reunión de programadores delphi, me di cuenta que es una comunidad muy unida.

Un saludo a todos!!!!

JoseFco
02-08-2008, 20:45:08
Hombre muchas gracias esto es más de lo que esperaba les agradesco en demasia, pense que solo respondian preguntas muy avanzadas pero el día que fui a la reunión de programadores delphi, me di cuenta que es una comunidad muy unida.

Un saludo a todos!!!!

Amigo en lo que te podamos ayudar aqui estamos.Desafortunadamente en los PIC si no puedo hacer nada.Pero con el componente Comport y Delphi.Pues lo poco que aprendimos en este mismo club, pues esta a la orden.;)


Un Saludo.