Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > ASM y Microcontroladores
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2008
italo_grossi italo_grossi is offline
Registrado
 
Registrado: jun 2006
Posts: 4
Poder: 0
italo_grossi Va por buen camino
Smile Microcontrolador pic16f877a y cport en delphi 7

hola amigos me encuentro realizando una pequeña aplicaciones que me permite o permitiria ver las capturas que realiza el conversor analogico digital de un micriciontrolador (pic16f877a) y enviarlas via serial a un PC en al pc he diseñado una aplicacion en delphi 7 con el componente cport previamente instalado (aseguro que el componente esta bien instalado) bueno la cosa es que la aplicacion de delphi le manda una string a microcontrolador y este le empieza a mandar las capturas que va realizando en su ADC pero cuando llegan a la aplicacion de delphi y las voy guardando en una linea de un memo, pero estas no las recive bien como ejemplo si el micro manda un 158 en una linea aparece un 1 y en la segunda un 58 como puedo hacer para que este problema se arregle tengo los codigos tanto de el micro con el realizado en delphi.
se me imagina que trabajando directamente con el buffer esto podria tener solucion pero la ayuda de la documentacion que trae el componente para mi no es suficiente espero que me peudan ayudar no referenciandome la pagina de donde se debe bajar pues ya he estado en ese foro.

de ante mano muchas gracias.
Responder Con Cita
  #2  
Antiguo 11-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Un TMemo tiene varias strings de una clase q se llama TStrings. Para recoger desde el procesador seguramente con una string a secas tendrias bastante...

Vamos, en vez de
TMemo.Add(inttostr(valor_lpt))

hacer

s := s + inttostr(valor_lpt);

¿el 158 del ejemplo anterior te lo mandaba todo en un solo byte? si no es asi, es normal q por cada Add te haga un salto de linea.

Última edición por coso fecha: 11-05-2008 a las 13:50:07.
Responder Con Cita
  #3  
Antiguo 11-05-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
cport? hay varios componentes de comunicacon serial y hasta el momento conosco 2 con este nombre. ¿Cual es el que tienes tu?
¿Como realizas la captura de los datos que envia el pic? ¿Puedes mostrarnos tu codigo?
Responder Con Cita
  #4  
Antiguo 12-05-2008
italo_grossi italo_grossi is offline
Registrado
 
Registrado: jun 2006
Posts: 4
Poder: 0
italo_grossi Va por buen camino
respuesta

Haber las capturas las realizo con un pic.... el se encarga de capturar un vooltaje analogio y convertirlo en digital ademas de mandarle por protocolo serial por medio de un cable....a un pc.....

Adjunto la rutina en C y la aplicacion en delphi el componente cport que baje esta en: http://sourceforge.net/projects/comport/

Con respecto al primer comentario que se hizo en el foro efectivamente se manda un string y llega a cada a una linea del memo pero se ha hecho una rutina que ocupa un memo auxiliar k hace que cada vez que llega 3 datos junta las 3 lineas de ese emo auxiliar y hace un numero que va se copia en el memo que se ve en la aplicacion.

espero que me puedan ayudar son la ultima esperanza cualquier pregunta que tengan las respondere lo antes posible
Archivos Adjuntos
Tipo de Archivo: zip 7.zip (719 Bytes, 31 visitas)
Tipo de Archivo: zip delphi.zip (2,5 KB, 34 visitas)
Responder Con Cita
  #5  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
en delphi.zip has puesto todo menos el .pas .
Responder Con Cita
  #6  
Antiguo 12-05-2008
italo_grossi italo_grossi is offline
Registrado
 
Registrado: jun 2006
Posts: 4
Poder: 0
italo_grossi Va por buen camino
Ahora sip esta el codigo entero

Amigos aca esta el codigo completo pero si lo kieren probar tendran que instalar el compornente cport que esta en la direccion que anteriormente he puublicado grax
Archivos Adjuntos
Tipo de Archivo: zip com.zip (16,3 KB, 31 visitas)
Responder Con Cita
  #7  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Italo_grossi me da la impresion que has ido cogiendo y pegando codigo de varios sitios sin comprender bien bien que hace...
mira, vamos a hacer que se te pongan los valores muestreados en la memo 'numero', sin que de momento lo pase al tchart, y me dices q te sale

en vez de ... (ComportRxChar)

Código Delphi [-]
var
  Str,z,b,g: String;
  dato, conv : real;
  s,i:integer;
  nume:double;

begin
   ComPort.ReadStr(Str, count);
   memo.Lines.Add(Str);
   f:=f+1;
 // label1.Caption:=floattostr(h);
  //label2.Caption:=Str;
  if (((memo.Lines[0]='x')or(memo.Lines[1]='x')or(memo.Lines[2]='x'))and(memo.Lines[3]<>'x')) then begin  memo.Lines.Clear; f:=0;  end;//goto GotoLabel;  end;

  if (f=4) then
      begin
        h:=h+1;
        gran:=gran+1;
          if (h=200) then begin series1.Clear; h:=0; end;
          if (gran=2500) then begin series2.Clear; gran:=0;  end;

            z:=memo.Lines[0]+memo.Lines[1]+memo.Lines[2];
            val(z,nume,s);
            numero.Lines.Add(floattostr(nume));
            series1.Add(nume*(strtofloat(edit1.Text))/255);
            series2.Add(nume*(strtofloat(edit1.Text))/255);
            f:=0;
            memo.Clear;
           // ComPort.ClearBuffer(True, False);
      end;

  end;

pon

Código Delphi [-]
var
   s : string;
begin
   ComPort.ReadStr(s,count);
   while (s = 'x') or (s='y')do 
   begin 
       ComPort.ReadStr(s, count);
       Application.ProcessMessages; 
   end;
   numero.Add(s);
end;

esto en teoria te tiene que ir llenando la memo 'numero' de los numeros muestreados, sin las x ni las y...que por cierto, desde el fichero 7.c ... para q son las 'x' y las 'y's? no te iria mejor cambiarlo a printf("%lu",s) sin poner el printf("x") delante y el printf("y") detras?

venga, espero tu respuesta

Última edición por coso fecha: 12-05-2008 a las 20:07:09.
Responder Con Cita
  #8  
Antiguo 12-05-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Hice una prueba colocando un TrackBar en el formulario y este código:

Código Delphi [-]
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  If comport.Connected then
    Comport.WriteStr(IntTostr(TrackBar1.Position ))
  else
    showmessage('Abra el Puerto primero');
end;

Conecte los pines 2 (Tx) y 3 (Rx) de mi puerto com en puente para que el trasmita y reciba simultaneamente.
Al TrackBar le puse un valor de mínimo 100 y máximo 500 con intervalos de 15 y en memo me aparecen perfectamente los tres dígitos. tres lecturas y se limpia el memo.

Pienso que el problema no esta en la recepcion sino en la manera en que estas enviando los datos, pero eso ya es codigo de los pics y ahi si no se nada.

Última edición por FGarcia fecha: 23-05-2008 a las 23:17:58.
Responder Con Cita
  #9  
Antiguo 12-05-2008
italo_grossi italo_grossi is offline
Registrado
 
Registrado: jun 2006
Posts: 4
Poder: 0
italo_grossi Va por buen camino
hola

grax amigos por la ayuda pero contesto algunas preguntas.....los ocntervalos de 15 ms??? eso es demasiado timepo la idea es muestrear menos de 1 ms 500us seria lo ideal lo que pasa es que a esa velocidad el porgrama de delphi si agrupa los valores en 3 cifras y toodo bien pero cuendo bajo la velocidad ......entonces en algunas lineas del memo encontremos solo un valor y entraas nada o en otroas la cifra entera.

la cosa creo k va mas que nada en trabajar no recepcionando el buffer del puerto serial se que mi codigo es muy basico y no he solo copiado o pegado como se dice ahi me base en un ejemplo que traia el mismo componente cport se que a baja velocidad ni un problema... pero es no es mi idea.....

estoy probando las posibles soluciones que me han anviado.........ahhh lo ultimo la rutina del microcontrolado es muy basica y solo manda un string....noc reo que eso sea el problema.
Responder Con Cita
  #10  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Quiza el problema esta en que por debajo de los 15 ms la aplicación aun esta ejecutando otro codigo, por lo que algunas muestras se 'pierden'...

bueno, es una idea. Quiza pasa por optimizar el codigo de 7.c...
Responder Con Cita
  #11  
Antiguo 13-05-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Hola!
No me explique correctamente, los intervalos de 15 no son intervalos de ningun temporizador, son los intervalos que avanza en su posicion el trackbar.

Despues de dormir y descansar (aja!) probe con un timer en intervalos de 1ms e insisto funciona bien. Solo añadi al formulario un Timer con su propiedad Interval a 1 y un boton de inicio.

Código Delphi [-]
procedure TForm1.Button7Click(Sender: TObject);
begin
  if timer1.Enabled then
    begin
      Button7.Caption := 'Timer On';
      timer1.Enabled := false;
    end
  else
    begin
      Button7.Caption := 'Timer Off';
      timer1.Enabled := true;
    end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  trackbar1.Position := TrackBar1.Position + 1;
end;

Última edición por FGarcia fecha: 13-05-2008 a las 19:29:37. Razón: Pruebas extras
Responder Con Cita
  #12  
Antiguo 15-05-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Código Delphi [-]
procedure TForm1.Button7Click(Sender: TObject);
begin
  if timer1.Enabled then
    begin
      Button7.Caption := 'Timer On';
      timer1.Enabled := false;
    end  else    
    begin
      trackbar1.Position := 0; //Y esto no??? o mantenemos lo anterior?
      Button7.Caption := 'Timer Off';
      timer1.Enabled := true;
    end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  trackbar1.Position := TrackBar1.Position + 1;
end;

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Delphi 6, Delphi 2005 y Delphi 2006 Leviatan Varios 6 18-08-2007 17:02:08
Ayuda con Cport VNNO Varios 0 10-02-2007 03:07:30


La franja horaria es GMT +2. Ahora son las 12:42:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi