Autor Tema: Interface GTK para PIC  (Leído 3034 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Interface GTK para PIC
« en: 09 de Enero de 2012, 14:00:15 »
Hola a todos.

He implementado un circuito con un PIC que envia via serie mediante un MAX232 4 bytes, luego hace una DEMORA y envia otros 4 bytes.
La parte electrónica funciona perfectamente y mediante Minicom de Linux (semejante al HyperTerminal de Windows) veo que recibo los datos perfectos.

Ahora me he hecho una interfaz software con GTK, tambien recibe los datos perfectos, pero tengo el siguiente problema:

Mediante un bucle While de 2 pasadas, la funcion "leePic" hace un read del puerto serie y pinta (???)  en 4 cajas de texto (GtkEntrys) los 4 bytes que recibe y despues de la DEMORA lee los otros 4 bytes y sale de la funcion, pero el problema es que Gtk no rellena las cajitas hasta que no sale del bucle While, con lo que solo veo las cajas rellenas con los ultimos 4 byes.

No se si me he explicado bien, pero no veo la forma de solucionarlo.


Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Interface GTK para PIC
« Respuesta #1 en: 10 de Enero de 2012, 05:06:47 »
hola halowin,
el motivo de eso, me parece más que va por temas de programación, si lo estás haciendo dentro de un hilo o algo similar (o quizá en Linux lo haga todo así), para actualizar temas de interfaz (cajas de texto...) lo tienes que hacer dentro de un método delegado e invocarlo, en C++ es fácil de hacer, haz un poco de googling buscando por: how to use delegates C++.  O algo así y lo haces.
Si no la otra cosa qe puedes intentar es poner un sleep(x milisegs) para que se duerma la ejecución del bucle y a lo mejor así el SO actualiza la interfaz... Pero eso no se si funcionará.
Saludos

Desconectado ma4826

  • PIC16
  • ***
  • Mensajes: 130
Re: Interface GTK para PIC
« Respuesta #2 en: 10 de Enero de 2012, 09:40:13 »
Tienes que añadir esto dentro de tu rutina, después de actualizar las cajas de texto, para que te redibuje la ventana.

Código: [Seleccionar]
while (gtk_events_pending())
{
gtk_main_iteration();
}
      

También te recomiendo que desactives los botones que no se puedan usar mientras estas en mitad de la rutina y lo vuelvas a activar justo antes de salir de la misma.

¿Como realizas la demora? ¿Quizás sería mejor usar un timer en lugar de estar esperando dentro de la función?.

Saludos,

Miguel.
万人の友は誰の友でもない。

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: Interface GTK para PIC
« Respuesta #3 en: 10 de Enero de 2012, 09:56:16 »
Hola ma4826.

Eso ya lo hice y no lo arregla.

Voy a separar el programa en dos partes:

Un thread para leer constantemente el puerto y
La parte de GTK para pintar en las cajas los valores leidos por el thread.

Ya os contaré si funciona.


Tienes que añadir esto dentro de tu rutina, después de actualizar las cajas de texto, para que te redibuje la ventana.

Código: [Seleccionar]
while (gtk_events_pending())
{
gtk_main_iteration();
}
      

También te recomiendo que desactives los botones que no se puedan usar mientras estas en mitad de la rutina y lo vuelvas a activar justo antes de salir de la misma.

¿Como realizas la demora? ¿Quizás sería mejor usar un timer en lugar de estar esperando dentro de la función?.

Saludos,

Miguel.


Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: Interface GTK para PIC
« Respuesta #4 en: 11 de Enero de 2012, 05:19:36 »
[SOLUCIONADO]

Hay dos posibilidades validas las dos:

1.- Descomponer la aplicacion en un thread que lea el puerto serie y actualice unas variables, que...
2.- Luego ha de pintar en las cajas de texto la aplicacion principal.

y la segunda es utilizar la funcion "gdk-input-add()" para vigilar el puerto y mandar una señal a la aplicacion principal diciendole que hay datos esperando a ser leidos.

He probado las dos, pero he optado por la segunda.

Saludos.

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: Interface GTK para PIC
« Respuesta #5 en: 11 de Enero de 2012, 05:27:58 »
P.D.
Si alguien está interesado en la aplicacion le puedo enviar el codigo fuente sin problemas.

Está en C con GTK+ (todo bajo linux).

Saludos.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Interface GTK para PIC
« Respuesta #6 en: 12 de Enero de 2012, 16:09:15 »
Qué tal, yo estoy haciendo una aplicación que se comunica con un micro a través de puerto serie (emulado vía USB), la estoy haciendo con Mono (C#) :). Me gustaría echarle un vistazo al manejo que hiciste de gdk-input-add para estar atento a lo que se recibe por el puerto.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado halowin

  • PIC16
  • ***
  • Mensajes: 151
Re: Interface GTK para PIC
« Respuesta #7 en: 13 de Enero de 2012, 12:51:44 »
Hola Geo, te he enviado a tu correo el programa y un pantallazo para que veas lo que querias. No lo pego aqui porque creo que no viene a cuento y es algo largo.

Un saludo.

Qué tal, yo estoy haciendo una aplicación que se comunica con un micro a través de puerto serie (emulado vía USB), la estoy haciendo con Mono (C#) :). Me gustaría echarle un vistazo al manejo que hiciste de gdk-input-add para estar atento a lo que se recibe por el puerto.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Interface GTK para PIC
« Respuesta #8 en: 13 de Enero de 2012, 20:45:38 »
Gracias por la info halowin, ya la recibí.

Como te dije, yo estoy trabajando con Mono, utilizando la clase SerialPort, lamentablemente aún no tiene implementado el callback DataReceived (como en Windows), por lo que estoy usando un timer para leer del puerto. Por eso me llamó la atención lo que mencionaste del callback que usas en C++, en cuanto pueda lo pruebo :).

Gracias.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Interface GTK para PIC
« Respuesta #9 en: 09 de Diciembre de 2012, 02:27:23 »
Qué tal halowin, recibí una petición en mi blog para compartir lo que me enviaste, considero que mejor lo subo por aquí y tú dirás si lo dejamos o lo quitamos :).

Muchas gracias.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/